这是有关网络协议的第二篇文章。
前一篇文章中,分享了tcpdump和tshark最基本的抓包,读取包等命令的使用,这篇文章将分享tcpdump和tshark在抓包过程中的IP解析和端口名称解析,这里涉及了部分抓包过程中端口过滤的知识,将在后续的博客中分享IP、协议、端口过滤的知识。
TShark和tcpdump默认会尝试将以数字表示的IP地址和端口转化成名称,例如80端口解析成http,以此来提高可读性。如果无法解析,则IP地址和端口会议数字形式输出。
在tcpdump中,使用-n选项将禁用IP名称解析,使用-nn选项将会把端口解析也同时禁用。
请看下面的例子,先执行命令,然后访问一下百度,下面的例子抓取了69个包。
1) 命令行如下
tcpdump -i ens33 host 14.215.177.39 -w #抓取地址为百度的包
tcpdump -r packets.pcap -c1 #读取第一个包,启用IP和端口名称解析
tcpdump -nr packets.pcap -c1 #读取第一个包,禁用IP名称解析
tcpdump -nnr packets.pcap -c1 #读取第一个包,禁用IP和端口名称解析
2) 示例代码如下
[sunft@localhost ~]$ sudo su
[sudo] sunft 的密码:
[root@localhost sunft]# tcpdump -i ens33 host 14.215.177.39 -w packets.pcap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
^C69 packets captured
69 packets received by filter
0 packets dropped by kernel
[root@localhost sunft]# tcpdump -r packets.pcap -c1
reading from file packets.pcap, link-type EN10MB (Ethernet)
20:34:47.918894 IP localhost.28983 > 14.215.177.39.http: Flags [S], seq 2245996041, win 29200, options [mss 1460,sackOK,TS val 652313 ecr 0,nop,wscale 7], length 0
[root@localhost sunft]# tcpdump -nr packets.pcap -c1
reading from file packets.pcap, link-type EN10MB (Ethernet)
20:34:47.918894 IP 192.168.248.134.28983 > 14.215.177.39.http: Flags [S], seq 2245996041, win 29200, options [mss 1460,sackOK,TS val 652313 ecr 0,nop,wscale 7], length 0
[root@localhost sunft]# tcpdump -nnr packets.pcap -c1
reading from file packets.pcap, link-type EN10MB (Ethernet)
20:34:47.918894 IP 192.168.248.134.28983 > 14.215.177.39.80: Flags [S], seq 2245996041, win 29200, options [mss 1460,sackOK,TS val 652313 ecr 0,nop,wscale 7], length 0
[root@localhost sunft]#
3) 图示解析
上面的命令行脚本可能看起来不那么直观,请看下面的截图,可以更直观的看出不加-n选项、加一个-n选项、和加两个-n选项有什么区别。
4) 结论
无-n选项:对IP和端口进行名称解析,无法解析显示成数字;
一个-n选项:禁用IP名称解析,启用端口名称解析;
两个选项:禁用IP和端口名称解析。
与tcpdump不同,tshark禁用IP和端口解析的参数相对多一些,可以针对特定的网络层去禁用域名解析。
实际上windows和Linux平台都可以安装tshark,windows平台和Linux都需要安装Wireshark即可,Wireshark已经携带了tshark命令行工具,下面以windows 10和Linux来分析-n选项和-N选项的使用。
使用-n选项禁用所有名称解析。使用-N选项和相应的值,启用某层协议的名称解析,具体的例子请看下面的例子。
请看下面的例子,先启动抓包命令,访问下百度。下面的例子返回114个包。
1) 执行的命令
tshark -i 1 -f "dst port 80" -w packets.pcap #抓取目标为80(http默认端口)的端口
tshark -r packets.pcap -c10 #查看前10个包,启用名称解析
tshark -nr packets.pcap -c10 #查看前10个包,禁用名称解析
2) 示例代码如下
这里抓取目标端口为80的数据包。
I:\packet\other_packets>tshark -i 1 -f "dst port 80" -w packets.pcap
The NPF driver isn't running. You may have trouble capturing or
listing interfaces.
Capturing on 'Ethernet'
114
I:\packet\other_packets>dir
Volume in drive I is 学习
Volume Serial Number is 0003-7EAF
Directory of I:\packet\other_packets
2019/10/21 22:17 <DIR> .
2019/10/21 22:17 <DIR> ..
2019/10/21 22:17 25,820 packets.pcap
1 File(s) 25,820 bytes
2 Dir(s) 40,468,549,632 bytes free
查看前10个包,请分别仔细对比未加-n选项和加了-n选项输出的数据,发现下面的代码完全一致,这说明在window10上这里的禁用名称解析并没有起到作用。
I:\packet\other_packets>tshark -r packets.pcap -c10
1 0.000000 192.168.1.101 → 42.236.37.119 TCP 54 61151 → 80 [ACK] Seq=1 Ack=1 Win=258 Len=0
2 1.554508 192.168.1.101 → 140.206.78.133 TCP 66 49364 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
3 1.587997 192.168.1.101 → 140.206.78.133 TCP 54 49364 → 80 [ACK] Seq=1 Ack=1 Win=66048 Len=0
4 1.598463 192.168.1.101 → 140.206.78.133 TCP 338 POST /cloudquery.php HTTP/1.1 [TCP segment of a reassembled PDU]
5 1.636806 192.168.1.101 → 140.206.78.133 HTTP 744 POST /cloudquery.php HTTP/1.1
6 1.687702 192.168.1.101 → 140.206.78.133 TCP 54 49364 → 80 [ACK] Seq=975 Ack=592 Win=65536 Len=0
7 1.687955 192.168.1.101 → 140.206.78.133 TCP 54 49364 → 80 [FIN, ACK] Seq=975 Ack=592 Win=65536 Len=0
8 2.728984 192.168.1.101 → 140.206.78.133 TCP 66 49365 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
9 2.758943 192.168.1.101 → 140.206.78.133 TCP 54 49365 → 80 [ACK] Seq=1 Ack=1 Win=66048 Len=0
10 2.768763 192.168.1.101 → 140.206.78.133 TCP 338 POST /cloudquery.php HTTP/1.1 [TCP segment of a reassembled PDU]
I:\packet\other_packets>tshark -nr packets.pcap -c10
1 0.000000 192.168.1.101 → 140.206.78.133 TCP 66 50967 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
2 0.039864 192.168.1.101 → 140.206.78.133 TCP 54 50967 → 80 [ACK] Seq=1 Ack=1 Win=66048 Len=0
3 0.050252 192.168.1.101 → 140.206.78.133 TCP 338 POST /cloudquery.php HTTP/1.1 [TCP segment of a reassembled PDU]
4 0.087086 192.168.1.101 → 140.206.78.133 HTTP 744 POST /cloudquery.php HTTP/1.1
5 0.134486 192.168.1.101 → 140.206.78.133 TCP 54 50967 → 80 [ACK] Seq=975 Ack=592 Win=65536 Len=0
6 0.134864 192.168.1.101 → 140.206.78.133 TCP 54 50967 → 80 [FIN, ACK] Seq=975 Ack=592 Win=65536 Len=0
7 0.343920 192.168.1.101 → 1.192.193.44 TCP 55 62532 → 80 [ACK] Seq=1 Ack=1 Win=509 Len=1
8 1.150469 192.168.1.101 → 140.206.78.133 TCP 66 50968 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
9 1.184993 192.168.1.101 → 140.206.78.133 TCP 54 50968 → 80 [ACK] Seq=1 Ack=1 Win=66048 Len=0
10 1.195384 192.168.1.101 → 140.206.78.133 TCP 338 POST /cloudquery.php HTTP/1.1 [TCP segment of a reassembled PDU]
3) 结论
在windows平台,加-n选项与不加-n效果是一样的,-n选项并不能禁用名称解析。
1) 执行的命令如下
tshark -r packets.pcap -c10
tshark -nr packets.pcap -c10
2) 示例代码如下
[root@localhost sunft]# tshark -r packets.pcap -c10
Running as user "root" and group "root". This could be dangerous.
1 0 192.168.248.134 -> 14.215.177.39 TCP 74 28983 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=652313 TSecr=0 WS=128
2 0 14.215.177.39 -> 192.168.248.134 TCP 60 http > 28983 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
3 0 192.168.248.134 -> 14.215.177.39 TCP 54 28983 > http [ACK] Seq=1 Ack=1 Win=29200 Len=0
4 0 192.168.248.134 -> 14.215.177.39 HTTP 518 GET / HTTP/1.1
5 0 14.215.177.39 -> 192.168.248.134 TCP 60 http > 28983 [ACK] Seq=1 Ack=465 Win=64240 Len=0
6 0 14.215.177.39 -> 192.168.248.134 HTTP 558 HTTP/1.1 302 Found (text/html)
7 0 192.168.248.134 -> 14.215.177.39 TCP 54 28983 > http [ACK] Seq=465 Ack=505 Win=30016 Len=0
8 0 192.168.248.134 -> 14.215.177.39 TCP 74 37906 > https [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=652342 TSecr=0 WS=128
9 0 14.215.177.39 -> 192.168.248.134 TCP 60 https > 37906 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
10 0 192.168.248.134 -> 14.215.177.39 TCP 54 37906 > https [ACK] Seq=1 Ack=1 Win=29200 Len=0
[root@localhost sunft]# tshark -nr packets.pcap -c10
Running as user "root" and group "root". This could be dangerous.
1 0 192.168.248.134 -> 14.215.177.39 TCP 74 28983 > 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=652313 TSecr=0 WS=128
2 0 14.215.177.39 -> 192.168.248.134 TCP 60 80 > 28983 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
3 0 192.168.248.134 -> 14.215.177.39 TCP 54 28983 > 80 [ACK] Seq=1 Ack=1 Win=29200 Len=0
4 0 192.168.248.134 -> 14.215.177.39 HTTP 518 GET / HTTP/1.1
5 0 14.215.177.39 -> 192.168.248.134 TCP 60 80 > 28983 [ACK] Seq=1 Ack=465 Win=64240 Len=0
6 0 14.215.177.39 -> 192.168.248.134 HTTP 558 HTTP/1.1 302 Found (text/html)
7 0 192.168.248.134 -> 14.215.177.39 TCP 54 28983 > 80 [ACK] Seq=465 Ack=505 Win=30016 Len=0
8 0 192.168.248.134 -> 14.215.177.39 TCP 74 37906 > 443 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=652342 TSecr=0 WS=128
9 0 14.215.177.39 -> 192.168.248.134 TCP 60 443 > 37906 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
10 0 192.168.248.134 -> 14.215.177.39 TCP 54 37906 > 443 [ACK] Seq=1 Ack=1 Win=29200 Len=0
上述的例子查看前10个包,请分别仔细对比未加-n选项和加了-n选项的第7行数据,发现前者是http,后者是80。这说明在CentOS 7上这里的禁用名称解析起了作用。
3) 结论
通过以上对比分析-n选项在Windows 10不起作用,在CentOS 7起作用,禁用了端口和地址名称解析。
如果使用-N选项,所有的名称解析都会被禁用,除非使用相应的值显示指定启用某层协议的名称解析。
可以和-N选项搭配使用的参数如下:
参数 | 说明 |
---|---|
d | DNS包启用地址解析 |
m | 启用MAC地址解析 |
n | 启用网络地址解析 |
N | 网络地址解析使用外部解析器(例如DNS) |
t | 传输层端口数值解析 |
v | 启用VLAN id来命名解析 |
例一:下面的例子只启用传输层的地址解析
下面的例子会将传输层的端口转换成协议的形式,例如80使用http显示(HTTP基于TCP)。可以看到下面的代码中,原本的80被显示成http(80)的形式。
I:\packet\other_packets>tshark -r packets.pcap -Nt
1 0.000000 192.168.1.101 → 140.206.78.133 TCP 66 50967 → http(80) [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
2 0.039864 192.168.1.101 → 140.206.78.133 TCP 54 50967 → http(80) [ACK] Seq=1 Ack=1 Win=66048 Len=0
3 0.050252 192.168.1.101 → 140.206.78.133 TCP 338 POST /cloudquery.php HTTP/1.1 [TCP segment of a reassembled PDU]
4 0.087086 192.168.1.101 → 140.206.78.133 HTTP 744 POST /cloudquery.php HTTP/1.1
5 0.134486 192.168.1.101 → 140.206.78.133 TCP 54 50967 → http(80) [ACK] Seq=975 Ack=592 Win=65536 Len=0
6 0.134864 192.168.1.101 → 140.206.78.133 TCP 54 50967 → http(80) [FIN, ACK] Seq=975 Ack=592 Win=65536 Len=0
7 0.343920 192.168.1.101 → 1.192.193.44 TCP 55 62532 → http(80) [ACK] Seq=1 Ack=1 Win=509 Len=1
8 1.150469 192.168.1.101 → 140.206.78.133 TCP 66 50968 → http(80) [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
9 1.184993 192.168.1.101 → 140.206.78.133 TCP 54 50968 → http(80) [ACK] Seq=1 Ack=1 Win=66048 Len=0
10 1.195384 192.168.1.101 → 140.206.78.133 TCP 338 POST /cloudquery.php HTTP/1.1 [TCP segment of a reassembled PDU]
例二:下面的例子启用传输层和Mac解析
下面的例子会将传输层的端口和Mac地址解析成名称。
[root@localhost sunft]# tshark -r packets.pcap -Ntm
例一:下面的例子只启用传输层的地址解析
下面的例子会将传输层的端口转换成协议的形式,例如80使用http显示(HTTP基于TCP)。可以看到下面的代码中,原本的80被显示成http的形式。
[root@localhost sunft]# tshark -r packets.pcap -Nt
Running as user "root" and group "root". This could be dangerous.
1 0 192.168.248.134 -> 14.215.177.39 TCP 74 28983 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=652313 TSecr=0 WS=128
2 0 14.215.177.39 -> 192.168.248.134 TCP 60 http > 28983 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
3 0 192.168.248.134 -> 14.215.177.39 TCP 54 28983 > http [ACK] Seq=1 Ack=1 Win=29200 Len=0
4 0 192.168.248.134 -> 14.215.177.39 HTTP 518 GET / HTTP/1.1
5 0 14.215.177.39 -> 192.168.248.134 TCP 60 http > 28983 [ACK] Seq=1 Ack=465 Win=64240 Len=0
6 0 14.215.177.39 -> 192.168.248.134 HTTP 558 HTTP/1.1 302 Found (text/html)
7 0 192.168.248.134 -> 14.215.177.39 TCP 54 28983 > http [ACK] Seq=465 Ack=505 Win=30016 Len=0
8 0 192.168.248.134 -> 14.215.177.39 TCP 74 37906 > https [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=652342 TSecr=0 WS=128
9 0 14.215.177.39 -> 192.168.248.134 TCP 60 https > 37906 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
10 0 192.168.248.134 -> 14.215.177.39 TCP 54 37906 > https [ACK] Seq=1 Ack=1 Win=29200 Len=0
例二:下面的例子启用传输层和Mac解析
下面的例子会将传输层的端口和Mac地址解析成名称。
[root@localhost sunft]# tshark -r packets.pcap -Ntm
结论
-N选项在Windows 10和CentOS 7都起了作用。
参考材料:
http://yenolam.com/writings/tshark.pdf
Practical Packet analysis, 3rd edition