摘要:,全名叫,它可以用来完成很多的网络功能,譬如端口扫描建立连接,数据传输网络调试等等,因此,它也常被称为网络工具的瑞士军刀。
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。
nc,全名叫 netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等,因此,它也常被称为网络工具的 瑞士军刀 。
使用方式我们可以这样来使用它:
nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port] [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [hostname] [port[s]]
常用选项:
-4:只使用 IPv4 地址
-6:只使用 IPv6 地址
-l:启动本地监听
-n:不使用 DNS 解析
-p:指定源端口
-s:指定源 IP 地址
-u:使用 UDP,默认是 TCP
-v:显示详细信息
-w:设定超时时间(只适合用在 Client 端)
-d:禁止从标准输入读取数据,也就是客户端输入数据不会发送到服务端
-k:让服务端保持连接,不断开
Linux 系统默认没有安装 nc,可以用下面的方法安装:
# centos yum install nc # ubuntu apt-get install netcat建立 C/S 聊天室
nc 的本质是在两台机器之间建立连接,之后就可以基于这个连接做很多事情,数据传输是其中一个最为基本的。我们下面就使用 nc 来建立一个 C/S 的聊天室。
模拟 Server 端:
# -v :输出详细信息 # -l :指定监听地址和端口 nc -v -l 127.0.0.1 6000
模拟 Client 端:
# -p : 指定源端口 nc -v -p 5000 localhost 6000
之后,Client 和 Server 端就可以相互聊天了。
Client:
# nc -v -p 5000 localhost 6000 nc: connect to localhost port 6000 (tcp) failed: Connection refused Connection to localhost 6000 port [tcp/x11] succeeded! Hi, server Hi, client
Server:
# nc -v -l 127.0.0.1 6000 Listening on [127.0.0.1] (family 0, port 6000) Connection from [127.0.0.1] port 6000 [tcp/x11] accepted (family 2, sport 5000) Hi, server Hi, client发送文件
nc 不仅可以发送消息,还可发送文件。
假设服务端有一个 out.txt 的空文件,而客户端有一个 in.txt 文件,含有数据:hello server。
Server 端接收文件:
nc localhost 6000 > out.txt
Client 端发送文件:
nc localhost 6000 < in.txt
之后,我们可以看到 Server 端的 out.txt 文件中已经有数据了:
# cat out.txt hello server
除了可以发送文件,nc 也可以发送目录,只需要将目录压缩发送即可。
支持 UDP 和 IPv6 连接nc 默认使用 TCP 和 IPv4 协议建立连接,我们可以使用参数 -u 和 -6 参数来分别使用建立 UDP 和 IPv6 连接。
Server 端:
nc -u -6 -l localhost 6000
Client 端:
nc -u -6 localhost 6000
再开另一个终端,用 lsof 验证:
# lsof -Pni | grep nc nc 1966 root 3u IPv6 19317 0t0 UDP *:6000 nc 1976 root 3u IPv6 19330 0t0 UDP [::1]:49900->[::1]:6000
可以看到,Client 端和 Server 端都显示使用了 UDP 和 IPv6 协议。
端口扫描端口扫描是一个非常重要的功能,很多时候系统管理员会通过扫描服务器上端口,来识别系统中漏洞,nc 工具提供了非常方便的操作:
nc -vz 192.168.0.117 1-100
这条命令扫描 192.168.1.3 上 1-100 端口区间,有哪些端口是开放的。
# nc -vz 192.168.0.117 1-100 ... nc: connect to 192.168.0.117 port 21 (tcp) failed: Connection refused Connection to 192.168.0.117 22 port [tcp/ssh] succeeded! nc: connect to 192.168.0.117 port 23 (tcp) failed: Connection refused ...
可以看到,只有 22 号端口是开放的。
如果我们想扫描多个服务器上的多个端口是否开放,可以写一个脚本来完成,比如:
首先,用一个 sip.txt 保存所有服务器的地址:
# cat sip.txt 192.168.1.2 192.168.1.3 192.168.1.4
再用一个 port.txt保存要扫描的端口号:
# cat port.txt 22 80
然后,写一个脚本 portscan.sh 来遍历这个文件。
# vim portscan.sh #!/bin/sh for server in `more sip.txt` do for port in `more port.txt` do nc -zv $server $port echo "" done done
给这个脚本赋予可执行权限:
chmod +x portscan.sh
运行这个脚本就可以自动扫描多个服务器的多个端口是否开放了。
# sh portscan.sh Connection to 192.168.1.2 22 port [tcp/ssh] succeeded! Connection to 192.168.1.2 80 port [tcp/http] succeeded! Connection to 192.168.1.3 22 port [tcp/ssh] succeeded! Connection to 192.168.1.3 80 port [tcp/http] succeeded! Connection to 192.168.1.4 22 port [tcp/ssh] succeeded! Connection to 192.168.1.4 80 port [tcp/http] succeeded!总结
nc 通过在两台机器之间建立连接来完成很多网络功能,数据传输、网络连接、端口扫描等,也有助于我们进行网络调试,排查网络故障。
后台回复“加群”,带你进入高手如云交流群
我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/11687.html
摘要:,全名叫,它可以用来完成很多的网络功能,譬如端口扫描建立连接,数据传输网络调试等等,因此,它也常被称为网络工具的瑞士军刀。 本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。 nc,全名叫 netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立T...
摘要:简介是一款平台的抓包工具。第二条是,表示报文。后台回复加群,带你进入高手如云交流群参考我的公众号云计算网络,号内有书籍和视频资源,后台回复即可领取,分享的内容包括但不限于网络云计算虚拟化容器工具编程技术等内容,欢迎大家关注。 本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关...
摘要:简介是一款平台的抓包工具。第二条是,表示报文。后台回复加群,带你进入高手如云交流群参考我的公众号云计算网络,号内有书籍和视频资源,后台回复即可领取,分享的内容包括但不限于网络云计算虚拟化容器工具编程技术等内容,欢迎大家关注。 本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关...
SSL,Secure Sockets Layer,安全Socket层TLS,Transport Layer Security,传输层安全协议 package network.secure; import java.io.*; import javax.net.ssl.*; public class HTTPSClient { public static void main(Strin...
摘要:上,数据按有限大小的包传输,这些包成为数据报,每个数据报包含一个首部和一个有效载荷。不过,由于数据报长度有限,通常必须将数据分解为多个包,再在目的地重新组合。这两个构造函数,在返回之前会与远程主机建立一个活动的网络连接。 Internet上,数据按有限大小的包传输,这些包成为数据报(datagram),每个数据报包含一个首部(header)和一个有效载荷(payload)。首部包含包发...
阅读 1185·2021-11-22 15:25
阅读 3146·2021-11-16 11:44
阅读 3402·2021-11-15 11:38
阅读 3188·2021-10-21 09:38
阅读 1411·2021-10-19 13:21
阅读 3679·2021-09-14 17:57
阅读 781·2021-09-06 15:00
阅读 1519·2019-08-30 15:44