网络工具界的“瑞士军刀” nc(netcat),它短小精悍,是网络调试利器
nc
命令(netcat)端口侦听、端口连接、端口测试、端口扫描,功能大致跟ncat
类似,但有端口扫描功能。
1、查看端口是否被占用(ncat)
# nc -l 80 Ncat: bind to :::80: Address already in use. QUITTING.
2、端口扫描
例如需要扫描某个机器上21-30哪些端口是开放的:
报错
# nc -n 127.0.0.1 -z 1230-1234 -v Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connection refused.
在CentOS7.X中使用yum install -y nc
安装的并不是netcat而是nmap-ncat,并且通过软链接的方式链接为nc
命令,但实际是ncat
命令,在CentOS6.4中使用yum install -y nc
安装的是nc
命令(netcat)
# ll `which nc` lrwxrwxrwx 1 root root 22 9月 27 11:21 /usr/bin/nc -> /etc/alternatives/nmap # ll /etc/alternatives/nmap lrwxrwxrwx 1 root root 13 9月 27 11:21 /etc/alternatives/nmap -> /usr/bin/ncat # ll /usr/bin/ncat -rwxr-xr-x 1 root root 380184 8月 9 2019 /usr/bin/ncat
源码安装netcat
wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.1.tar.gz tar -zxvf netcat-0.7.1.tar.gz cd netcat-0.7.1 ./configure make make install # cp /root/netcat-0.7.1/src/netcat /usr/local/bin/ 为netcat做一个软连接(先删除之前的) # ln -s netcat nc
扫描本机上22-90哪些端口是开放的
# nc -n 127.0.0.1 -z 22-90 -v 127.0.0.1 22 (ssh) open 127.0.0.1 25 (smtp) open 127.0.0.1 80 (http) open
-n说明直接使用ip地址,而不使用域名,-z指定端口范围,-v输出详细信息
3、TCP/UDP连接测试
# nc -lk 1234 (监听1234端口,good boy手敲) good boy
新建一个窗口连接看效果
# nc 127.0.0.1 1234 good boy 或者 # telnet 192.168.40.132 1234 Trying 192.168.40.132... Connected to 192.168.40.132. Escape character is '^]'. good boy
连接本地地址1234端口,这个过程中就可以抓包,分析TCP的三次握手了。
除此之外,你还可以在建立好的连接之间发送消息(简单的聊天功能),让你分析更多!
默认情况,它创建的是TCP连接,而使用-u(UDP)参数可以测试UDP连通性。
$ nc -v -u 182.3.226.35 80 Connection to 182.3.226.35 80 port [udp/http] succeeded!
除此之外,还有很多参数用于调试,例如:
-
-b 允许广播消息
-
-D 开启socket调试模式
-
-d 禁止从标准输入读取内容
-
-k 客户端退出后,保持连接
-
-v 显示详细信息
4、HTTP连接测试
连接后,输入HEAD / HTTP/1.1或HEAD / HTTP/1.0,然后输入两个回车,可查看web服务器相关信息。
nc www.baidu.com 80 HEAD / HTTP/1.1 HTTP/1.1 302 Found Connection: Keep-Alive Content-Length: 17931 Content-Type: text/html Date: Sun, 23 Jun 2019 13:52:12 GMT Etag: "54d9748e-460b" Server: bfe/1.0.8.18
5、数据传输
还是利用前面的连接,借助重定向符可以进行文件传输,例如服务端监听,并把内容输出到out.txt:
nc -l 1234 > out.txt
而客户端连接:
nc 127.0.0.1 1234 < in.txt in.txt是已有的文件
这样客户端in.txt的内容,就会传输到out.txt
5、网络测试
测试两个主机间的网络速度(当然你可以利用iperf工具来完成这个工作),nc也是可以帮忙的:
#服务端监听: $ nc -vl 1234 >/dev/null
其中重定向到/dev/null,表示将数据丢弃。
然后在另一台主机上执行:
$ dd if=/dev/zero bs=1M count=10 |nc -vn 127.0.0.1 1234 Connection to 127.0.0.1 1234 port [tcp/*] succeeded! 10+0 records in 10+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0333675 s, 314 MB/s
dd拷贝数据,这里从/dev/zero拷贝数据0,且一次1M,拷贝10次,最后通过nc命令发送到服务端。结束后,就可以看到统计信息了。
https://man.linuxde.net/nc_netcat Linux命令大全