Netcat(nc)是常用的四层TCP或UDP端口连接测试及扫描工具,并且同时Server和Client模式。
TCP/UDP报文
TCP/UDP协议是目前网络传输中最为重要的两个协议,分别用于可靠传输和高速传输的应用场景。
由于TCP/UDP协议构成较为复杂,这里不展开说明,仅介绍几个和本文相关的知识点。
- TCP建连/拆连
- 三次握手建连
发起SYN建连的为客户端;
客户端一般采用随机端口建立连接;
TCP建连由OS协议栈管理,应用程序不参与。
- TCP四次挥手拆连
客户端、服务器均可主动发起拆连;
拆连由应用发起,OS协议栈管理;
- 两种快速拆连机制
服务器FIN与ACK在一个报文中标识
客户端或服务器收到FIN后使用RST断开连接
该方式避免close waiting问题。
- TCP Flags
TCP Flags用于标识TCP报文的类型,常用的有:
SYN:用于标识TCP连接的建立;
ACK:用于报文的接受确认;
FIN:用于标识TCP连接的拆除;
RST:用于标识TCP连接的中断。
- TCP Sequence number
Sequence number和Acknowledgement number用于TCP报文的顺序、完整性确认。
其中SYN的Sequence number为随机生成,Acknowledgement number为0。
后续的每个响应报文的Acknowledgement number均为前一个报文的Sequence number + 其报文的TCP负载长度,如果负载长度为0,则+1。
语法
nc [option] [target]
示例
- 开启server模式,并测试连接
# 开启server模式,监听TCP 18080端口
LeoMBPR:~ leoxu$ nc -l 18080
# 测试端口连接并输出
LeoMBPR:~ leoxu$ nc -v -w 3 127.0.0.1 18080
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif lo0
src 127.0.0.1 port 60541
dst 127.0.0.1 port 18080
rank info not available
TCP aux info available
Connection to 127.0.0.1 port 18080 [tcp/*] succeeded!
- 开始server模式,并传输数据
# 开启server模式,并将接受内容写入output文件:
LeoMBPR:~ leoxu$ nc -l 18080 > output
# 创建input文件,并发送至netcat的server端口
LeoMBPR:~ leoxu$ echo "this is a test" > input
LeoMBPR:~ leoxu$ cat input
this is a test
LeoMBPR:~ leoxu$ nc 127.0.0.1 18080 < input
# 查看server端文本传输内容
LeoMBPR:~ leoxu$ cat output
this is a test
- 端口扫描
# TCP端口扫描,语法:nc -z [host] [port range]
LeoMBPR:~ leoxu$ nc -z 192.168.10.10 80-88
Connection to 192.168.10.10 port 80 [tcp/http] succeeded!
# UDP端口扫描,语法:nc -uz [host] [port range]
LeoMBPR:~ leoxu$ nc -uz 192.168.10.10 80-88
Connection to 192.168.10.10 port 80 [udp/http] succeeded!
Connection to 192.168.10.10 port 88 [udp/kerberos] succeeded!
[option]
-4
强制使用IPv4地址;
-6
强制使用IPv6地址;
-b
指定nc使用的网络接口;
-D
开启debug;
-i
指定数据发送以及端口连接的间隔时间;
-G
指定TCP连接的超时时间(秒);
-I
指定TCP保活(keep alive)的间隔时间(秒);
-H
指定发起TCP保活的时间(秒);
-J
指定TCP保活报文的发送次数;
-k
nc连接结束后不退出,继续监听其他连接,需要和-l参数一起使用;
-l
强制nc为监听模式,不发起连接;
-n
不使用DNS解析IP地址或主机名;
-p
指定nc发起连接的源端口;
-r
指定源、目的端口为随机端口而非顺序端口;
-s
指定nc发起连接时的源IP地址;
-u
nc默认使用TCP连接,该参数使用UDP连接;
-v
显示更多的输出;
-w
nc默认没有超时时间,该参数可设定nc的链接超时时间(秒);
-X
指定nc使用代理协议,支持的Target为:4(SOCKS v.4),5(SOCKS v.5),connect(HTTPS),默认为5。
-x
指定nc连接代理协议的时候使用主机名加端口,如果端口没指定,则使用协议的默认端口。(SOCKS 1080,HTTPS 3128)。
总结
netcat是目前最常用的四层测试及扫描工具,不仅能覆盖常见的4层端口测试,还可以进行数据传输测试,以及部分的应用数据交互测试。
本文暂时没有评论,来添加一个吧(●'◡'●)