什么是命令行抓包过程中的名称解析(二)

引言

这是有关网络协议的第二篇文章。

前一篇文章中,分享了tcpdump和tshark最基本的抓包,读取包等命令的使用,这篇文章将分享tcpdump和tshark在抓包过程中的IP解析和端口名称解析,这里涉及了部分抓包过程中端口过滤的知识,将在后续的博客中分享IP、协议、端口过滤的知识。

何为IP和端口的名称解析?

TShark和tcpdump默认会尝试将以数字表示的IP地址和端口转化成名称,例如80端口解析成http,以此来提高可读性。如果无法解析,则IP地址和端口会议数字形式输出。

示例代码

1. tcpdump代码示例

在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和端口名称解析。

2. tshark代码示例

2.1 -n-N选项说明

与tcpdump不同,tshark禁用IP和端口解析的参数相对多一些,可以针对特定的网络层去禁用域名解析。

实际上windows和Linux平台都可以安装tshark,windows平台和Linux都需要安装Wireshark即可,Wireshark已经携带了tshark命令行工具,下面以windows 10和Linux来分析-n选项和-N选项的使用。

使用-n选项禁用所有名称解析。使用-N选项和相应的值,启用某层协议的名称解析,具体的例子请看下面的例子。

2.2 -n选项

请看下面的例子,先启动抓包命令,访问下百度。下面的例子返回114个包。

2.2.1 windows 10

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选项并不能禁用名称解析。

2.2.2 CentOS 7

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起作用,禁用了端口和地址名称解析。

2.3 -N选项

如果使用-N选项,所有的名称解析都会被禁用,除非使用相应的值显示指定启用某层协议的名称解析。

可以和-N选项搭配使用的参数如下:

参数 说明
d DNS包启用地址解析
m 启用MAC地址解析
n 启用网络地址解析
N 网络地址解析使用外部解析器(例如DNS)
t 传输层端口数值解析
v 启用VLAN id来命名解析
2.3.1 widows 10示例

例一:下面的例子只启用传输层的地址解析
下面的例子会将传输层的端口转换成协议的形式,例如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
2.3.2 CentOS 7示例

例一:下面的例子只启用传输层的地址解析
下面的例子会将传输层的端口转换成协议的形式,例如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


欢迎关注我的技术公众号,一起学习技术!
个人技术微信公众号

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章