什麼是命令行抓包過程中的名稱解析(二)

引言

這是有關網絡協議的第二篇文章。

前一篇文章中,分享了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


歡迎關注我的技術公衆號,一起學習技術!
個人技術微信公衆號

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