靈活而強(qiáng)大的命令行工具可以幫助減輕排除網(wǎng)絡(luò)問題的痛苦。
根據(jù)我作為系統(tǒng)管理員的經(jīng)驗(yàn),我經(jīng)常發(fā)現(xiàn)很難解決網(wǎng)絡(luò)連接問題。Tcpdump是這些情況下的好朋友。
Tcpdump是一個(gè)命令行實(shí)用程序,允許捕獲和分析通過系統(tǒng)的網(wǎng)絡(luò)流量。它通常用于幫助解決網(wǎng)絡(luò)問題,以及安全工具。
Tcpdump是一個(gè)功能強(qiáng)大、用途廣泛的工具,有許多選項(xiàng)和過濾器,可以在各種情況下使用。由于它是一個(gè)命令行工具,所以最好在遠(yuǎn)程服務(wù)器或圖形用戶界面不可用的設(shè)備上運(yùn)行,以收集稍后可以分析的數(shù)據(jù)。它也可以在后臺(tái)啟動(dòng),或者使用cron等工具作為計(jì)劃作業(yè)啟動(dòng)。
在本文中,我們將介紹tcpdump的一些最常見的功能。
1.在Linux上安裝
Tcpdump包含在幾個(gè)Linux發(fā)行版中,所以很可能已經(jīng)安裝好了。使用以下命令檢查系統(tǒng)上是否安裝了tcpdump:
$ whichtcpdump
/usr/sbin/tcpdump
如果沒有安裝tcpdump,您可以使用分發(fā)包管理器安裝它。例如,在CentOS或紅帽企業(yè)版Linux上,如下所示:
$ sudoyum install-ytcpdump
Tcpdump需要libpcap,這是一個(gè)用于網(wǎng)絡(luò)數(shù)據(jù)包捕獲的庫。如果沒有安裝,它將作為依賴項(xiàng)自動(dòng)添加。
現(xiàn)在你準(zhǔn)備好開始抓包了。
2.使用tcpdump抓取數(shù)據(jù)包
為了獲取用于故障排除或分析的數(shù)據(jù)包,tcpdump需要提升其權(quán)限,因此在下面的示例中,大多數(shù)命令都以sudo作為前綴。
首先,使用命令tcpdump -D查看哪些接口可用于捕獲:
$ sudotcpdump -D
1.eth0
2.virbr0
3.etp
4 .任意(在所有接口上捕獲的偽設(shè)備)
5 . lo[環(huán)回]
在上面的例子中,您可以看到計(jì)算機(jī)中所有可用的接口。特殊界面允許在任何活動(dòng)界面中捕捉。
讓我們開始捕獲一些數(shù)據(jù)包。通過運(yùn)行以下命令捕獲任何接口上的所有數(shù)據(jù)包:
$ sudotcpdump -iany
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
09:56:18 . 293641 IP rhel 75 . local domain . ssh & gt;192.168.64.1.56322: Flags [P.],seq3770820720:3770820916,ack 3503648727,win 309,options [nop,nop,TS val 76577898ecr 510770929],length 196
09:56:18 . 293794 IP 192 . 168 . 64 . 1 . 56322 >rhel75.localdomain.ssh: Flags [。],ack 196,win 391,選項(xiàng)[nop,nop,TS val 510771017ecr 76577898],長(zhǎng)度0
09:56:18.295058IP rhel75.59883 >gateway.domain: 2486+ PTR?1 . 64 . 168 . 192 . in-addr . arpa(43)
09:56:18.310225 IP gateway . domain >rhel 75.59883:2486 Nxdomain * 0/1/0(102)
09:56:18 . 312482 IP rhel 75 . 49685 & gt;gateway.domain: 34242+ PTR?28 . 64 . 168 . 192 . in-addr . arpa(44)
09:56:18.322425 IP gateway . domain >rhel 75.49685:34242 Nxdomain * 0/1/0(103)
09:56:18 . 323164 IP rhel 75 . 56631 & gt;gateway.domain: 29904+ PTR?1 . 122 . 168 . 192 . in-addr . arpa(44)
09:56:18.323342 IP rhel 75 . local domain . ssh & gt;192.168.64.1.56322: Flags [P.],seq196:584,ack 1,win 309,options [nop,nop,TS val 76577928ecr 510771017],length 388
09:56:18 . 323563 IP 192 . 168 . 64 . 1 . 56322 >rhel75.localdomain.ssh: Flags [。],ack 584,win 411,選項(xiàng)[nop,nop,TS val 510771047ecr 76577928],長(zhǎng)度0
09:56:18.335569 IP gateway . domain >rhel 75.56631:29904 Nxdomain * 0/1/0(103)
09:56:18 . 336429 IP rhel 75 . 44007 & gt;gateway.domain: 61677+ PTR?98 . 122 . 168 . 192 . in-addr . arpa(45)
09:56:18 . 336655 IP gateway . domain >rhel 75.44007:61677 * 1/0/0PTR rhel 75。(65)
09:56:18 . 337177 IP rhel 75 . local domain . ssh & gt;192.168.64.1.56322:標(biāo)志[P.],seq584:1644,ack 1,win 309,選項(xiàng)[nop,nop,TS val 76577942ecr 510771047],長(zhǎng)度1060
-跳過長(zhǎng)輸出-
09:56:19 . 342939 IP 192 . 168 . 64 . 1 . 56322 >rhel75.localdomain.ssh: Flags [。],ack 1752016,win 1444,選項(xiàng)[nop,nop,TS val 510772067ecr 76578948],長(zhǎng)度0
C
9003捕獲的數(shù)據(jù)包
過濾器接收到9010數(shù)據(jù)包
7內(nèi)核丟棄的數(shù)據(jù)包
$
Tcpdump繼續(xù)捕獲數(shù)據(jù)包,直到收到中斷信號(hào)??梢园碈trl+C中斷捕捉。如您在本例中所見,tcpdump捕獲了9000多個(gè)數(shù)據(jù)包。在這種情況下,由于我使用ssh連接到這個(gè)服務(wù)器,tcpdump捕獲了所有這些包。要限制捕獲的數(shù)據(jù)包數(shù)量并停止tcpdump,請(qǐng)使用-c選項(xiàng):
$ sudotcpdump -iany -c5
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
11:21:30.242740 IP rhel 75 . local domain . ssh & gt;192.168.64.1.56322: Flags [P.],seq3772575680:3772575876,ack 3503651743,win 309,options [nop,nop,TS val 81689848ecr 515883153],length 196
11:21:30 . 242906 IP 192 . 168 . 64 . 1 . 56322 >rhel75.localdomain.ssh: Flags [。],ack 196,win 1443,選項(xiàng)[nop,nop,TS val 515883235ecr 81689848],長(zhǎng)度0
11:21:30.244442IP rhel75.43634 >gateway.domain: 57680+ PTR?1 . 64 . 168 . 192 . in-addr . arpa(43)
11:21:30.244829 IP gateway . domain >rhel 75.43634:57680 nxdomain 0/0/0(43)
11:21:30.247048IP rhel75.33696 >gateway.domain: 37429+ PTR?28 . 64 . 168 . 192 . in-addr . arpa(44)
5捕獲的數(shù)據(jù)包
過濾器收到12個(gè)數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
$
在這種情況下,tcpdump會(huì)在捕獲五個(gè)數(shù)據(jù)包后自動(dòng)停止捕獲。這在不同的場(chǎng)景中很有用,例如,如果您排除連接并捕獲一些初始包。當(dāng)我們應(yīng)用過濾器來捕獲特定的數(shù)據(jù)包時(shí),這就更有用了(如下所示)。
默認(rèn)情況下,tcpdump將IP地址和端口解析為名稱,如上例所示。排除網(wǎng)絡(luò)故障時(shí),通常更容易使用IP地址和端口號(hào)。使用選項(xiàng)-n和端口解析以及-nn禁用名稱解析:
$ sudotcpdump -iany -c5-nn
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
23:56:24 . 292206 IP 192 . 168 . 64 . 28 . 22 >192.168.64.1.35110: Flags [P.],seq166198580:166198776,ack 2414541257,win 309,options [nop,nop,TS val 615664ecr 540031155],length 196
23:56:24 . 292357 IP 192 . 168 . 64 . 1 . 35110 >192.168.64.28.22:標(biāo)志[。],ack 196,win 1377,選項(xiàng)[nop,nop,TS val 540031229ecr 615664],長(zhǎng)度0
23:56:24 . 292570 IP 192 . 168 . 64 . 28 . 22 >192.168.64.1.35110: Flags [P.],seq196:568,ack 1,win 309,options [nop,nop,TS val 615664ecr 540031229],length 372
23:56:24 . 292655 IP 192 . 168 . 64 . 1 . 35110 >192.168.64.28.22:標(biāo)志[。],ack 568,win 1400,選項(xiàng)[nop,nop,TS val 540031229ecr 615664],長(zhǎng)度0
23:56:24 . 292752 IP 192 . 168 . 64 . 28 . 22 >192.168.64.1.35110:標(biāo)志[P.],seq568:908,ack 1,win 309,選項(xiàng)[nop,nop,TS val 615664ecr 540031229],長(zhǎng)度340
5捕獲的數(shù)據(jù)包
6過濾器接收的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
如上所示,捕獲輸出現(xiàn)在顯示了IP地址和端口號(hào)。它還防止tcpdump發(fā)布DNS查找,這有助于在排除網(wǎng)絡(luò)問題時(shí)減少網(wǎng)絡(luò)流量。
現(xiàn)在我們可以捕獲網(wǎng)絡(luò)數(shù)據(jù)包了,讓我們探索一下這些輸出意味著什么。
3.理解輸出格式
Tcpdump可以捕獲和解碼很多不同的協(xié)議,比如TCP、UDP、ICMP等等。雖然這里不能一一介紹,但是為了幫助入門,我們來探索一下TCP包。您可以在tcpdump的手冊(cè)頁中找到關(guān)于不同協(xié)議格式的更多詳細(xì)信息。tcpdump捕獲的典型TCP數(shù)據(jù)包如下:
08:41:13 . 729687 IP 192 . 168 . 64 . 28 . 22 >192.168.64.1.41916: Flags [P.],seq 196:568,ack 1,win 309,options [nop,nop,TS val 117964079 ecr 816509256],length 372
這些字段可能因發(fā)送的數(shù)據(jù)包類型而異,但這是一種通用格式。
第一個(gè)字段08: 41: 13.729687表示根據(jù)本地時(shí)鐘接收的數(shù)據(jù)包的時(shí)間戳。
接下來,IP代表網(wǎng)絡(luò)層協(xié)議——在本例中是IPv4。對(duì)于IPv6數(shù)據(jù)包,該值為IP6。
下一個(gè)字段192.168.64.28.22是源IP地址和端口。接下來是目的IP地址和端口,用192.168.64.1.41916表示。
TCP標(biāo)簽[P.]可以在源和目的之后找到。該字段的典型值包括:
值標(biāo)記類型描述SSYN連接開始FFIN連接結(jié)束PPUSH數(shù)據(jù) pushRRST連接重置.ACK確認(rèn)該字段也可以是這些值的組合,例如同步確認(rèn)包的[s]。
接下來是數(shù)據(jù)包中包含的數(shù)據(jù)的序列號(hào)。對(duì)于捕獲的第一個(gè)數(shù)據(jù)包,這是一個(gè)絕對(duì)數(shù)字。隨后的數(shù)據(jù)包使用相對(duì)編號(hào),以便于遵從。在這個(gè)例子中,序列是seq 196:568,這意味著包包含流的字節(jié)196到568。
接下來是Ack號(hào):ack 1。這種情況下是1,因?yàn)檫@是發(fā)送數(shù)據(jù)的一方。對(duì)于接收數(shù)據(jù)的一方,該字段指示流上的下一個(gè)預(yù)期字節(jié)(數(shù)據(jù))。例如,這個(gè)過程中下一個(gè)數(shù)據(jù)包的Ack號(hào)是568。
下一個(gè)字段是窗口大小win 309,它指示接收緩沖區(qū)中可用的字節(jié)數(shù),后跟TCP選項(xiàng),如MSS(最大段大小)或窗口比率。有關(guān)傳輸控制協(xié)議選項(xiàng)的更多信息,請(qǐng)參見傳輸控制協(xié)議參數(shù)。
最后,我們有包長(zhǎng)度,長(zhǎng)度372,它表示有效載荷數(shù)據(jù)的長(zhǎng)度(以字節(jié)為單位)。長(zhǎng)度是序列號(hào)中最后一個(gè)字節(jié)和第一個(gè)字節(jié)之間的差值。
現(xiàn)在讓我們學(xué)習(xí)如何過濾包來縮小結(jié)果,更容易地解決具體問題。
4.過濾數(shù)據(jù)包
如上所述,tcpdump可以捕獲太多的軟件包,其中一些甚至與正在排除故障的問題無關(guān)。例如,如果您正在解決一個(gè)與網(wǎng)絡(luò)服務(wù)器的連接問題,您對(duì)SSH流量不感興趣,因此從輸出中刪除SSH數(shù)據(jù)包可以更容易地處理真正的問題。
tcpdump最強(qiáng)大的功能之一,就是可以用各種參數(shù)過濾捕獲的數(shù)據(jù)包,比如源和目的IP地址、端口、協(xié)議等等。讓我們來看看一些最常見的參數(shù)。
協(xié)議
要根據(jù)協(xié)議過濾數(shù)據(jù)包,請(qǐng)?jiān)诿钚兄兄付▍f(xié)議。例如,僅使用以下命令捕獲互聯(lián)網(wǎng)控制消息協(xié)議:
$ sudotcpdump -iany -c5icmp
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
在另一臺(tái)終端上,嘗試ping另一臺(tái)機(jī)器:
$ pingopensource.com
PING opensource.com(54 . 204 . 39 . 132)56(84)字節(jié)的數(shù)據(jù)。
來自ec2-54-204-39-132.compute-1.amazonaws.com的64字節(jié)(54 . 204 . 39 . 132):icmp _ seq = 1ttl = 47 time = 39.6毫秒
回到tcpdump捕獲,注意tcpdump只捕獲和顯示與ICMP相關(guān)的數(shù)據(jù)包。在這種情況下,tcpdump不顯示解析opensource.com名稱時(shí)生成的名稱解析包:
09:34:20.136766IP rhel75 >ec2-54-204-39-132 . compute-1 . Amazon AWS . com:ICMP echo request,id20361,seq1,length 64
09:34:20.176402 ec2-54-204-39-132.compute-1.amazonaws.com;rhel75: ICMP echoreply,id20361,seq1,長(zhǎng)度64
09:34:21.140230IP rhel75 >ec2-54-204-39-132 . compute-1 . Amazon AWS . com:ICMP echo request,id20361,seq2,length 64
ec2-54-204-39-132.compute-1.amazonaws.com時(shí)間09:34:21.180020;rhel75: ICMP echoreply,id20361,seq2,長(zhǎng)度64
09:34:22.141777IP rhel75 >ec2-54-204-39-132 . compute-1 . Amazon AWS . com:ICMP echo request,id20361,seq3,length 64
5捕獲的數(shù)據(jù)包
5過濾器接收的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
主機(jī)
使用主機(jī)過濾器將捕獲限制為與特定主機(jī)相關(guān)的數(shù)據(jù)包:
$ sudotcpdump-iany-C5-nnhost 54.204.39.132
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
09:54:20 . 042023 IP 192 . 168 . 122 . 98 . 39326 >54.204.39.132.80:標(biāo)志[S],seq1375157070,win 29200,選項(xiàng)[mss 1460,sackOK,TS val 122350391ecr 0,nop,wscale 7],長(zhǎng)度0
09:54:20 . 088127 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39326: Flags [S.],seq1935542841,ack 1375157071,win 28960,options [mss 1460,sackOK,TS val 522713542ecr 122350391,nop,wscale 9],length 0
09:54:20 . 088204 IP 192 . 168 . 122 . 98 . 39326 >54.204.39.132.80:標(biāo)志[。],ack 1,win 229,選項(xiàng)[nop,nop,TS val 122350437ecr 522713542],長(zhǎng)度0
09:54:20 . 088734 IP 192 . 168 . 122 . 98 . 39326 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 122350438ecr 522713542],length 112: HTTP: GET /HTTP/1.1
09:54:20 . 129733 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39326:旗幟[。],ack 113,win 57,選項(xiàng)[nop,nop,TS val 522713552ecr 122350438],長(zhǎng)度0
5捕獲的數(shù)據(jù)包
5過濾器接收的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
在本例中,tcpdump僅捕獲和顯示進(jìn)出主機(jī)54.204.39.132的數(shù)據(jù)包。
港市
要根據(jù)所需的服務(wù)或端口過濾數(shù)據(jù)包,請(qǐng)使用端口過濾器。例如,使用以下命令捕獲與網(wǎng)絡(luò)服務(wù)相關(guān)的數(shù)據(jù)包:
$ sudotcpdump -iany -c5-nnport 80
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
09:58:28 . 790548 IP 192 . 168 . 122 . 98 . 39330 >54.204.39.132.80:標(biāo)志[S],seq1745665159,win 29200,選項(xiàng)[mss 1460,sackOK,TS val 122599140ecr 0,nop,wscale 7],長(zhǎng)度0
09:58:28 . 834026 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39330: Flags [S.],seq4063583040,ack 1745665160,win 28960,options [mss 1460,sackOK,TS val 522775728ecr 122599140,nop,wscale 9],長(zhǎng)度0
09:58:28 . 834093 IP 192 . 168 . 122 . 98 . 39330 >54.204.39.132.80:標(biāo)志[。],ack 1,win 229,選項(xiàng)[nop,nop,TS val 122599183ecr 522775728],長(zhǎng)度0
09:58:28 . 834588 IP 192 . 168 . 122 . 98 . 39330 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 122599184ecr 522775728],length 112: HTTP: GET /HTTP/1.1
09:58:28 . 878445 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39330:旗幟[。],ack 113,win 57,選項(xiàng)[nop,nop,TS val 522775739ecr 122599184],長(zhǎng)度0
5捕獲的數(shù)據(jù)包
5過濾器接收的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
跟蹤IP/主機(jī)名
您還可以根據(jù)源或目標(biāo)IP地址或主機(jī)名過濾數(shù)據(jù)包。例如,要從主機(jī)192.168.122.98捕獲數(shù)據(jù)包:
$ sudotcpdump-iany-C5-nns RC 192 . 168 . 122 . 98
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
10:02:15 . 220824 IP 192 . 168 . 122 . 98 . 39436 & gt;192.168.122.1.53: 59332+ A?opensource.com。(32)
10:02:15 . 220862 IP 192 . 168 . 122 . 98 . 39436 >192.168.122.1.53: 20749+ AAAA?opensource.com。(32)
10:02:15 . 364062 IP 192 . 168 . 122 . 98 . 39334 >54.204.39.132.80:標(biāo)志[S],seq1108640533,win 29200,選項(xiàng)[mss 1460,sackOK,TS val 122825713ecr 0,nop,wscale 7],長(zhǎng)度0
10:02:15 . 409229 IP 192 . 168 . 122 . 98 . 39334 >54.204.39.132.80:標(biāo)志[。],ack 669337581,win 229,選項(xiàng)[nop,nop,TS val 122825758ecr 522832372],長(zhǎng)度0
10:02:15 . 409667 IP 192 . 168 . 122 . 98 . 39334 >54.204.39.132.80: Flags [P.],seq0:112,ack 1,win 229,options [nop,nop,TS val 122825759ecr 522832372],length 112: HTTP: GET /HTTP/1.1
5捕獲的數(shù)據(jù)包
5過濾器接收的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
請(qǐng)注意,tcpdumps捕獲源IP地址為192.168.122.98的數(shù)據(jù)包,這些數(shù)據(jù)包用于各種服務(wù),如名稱解析(端口53)和HTTP(端口80)。由于源IP不同,因此不會(huì)顯示響應(yīng)數(shù)據(jù)包。
相反,您可以使用dst篩選器按目標(biāo)IP/主機(jī)名進(jìn)行篩選:
$ sudotcpdump-iany-C5-nndst 192 . 168 . 122 . 98
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
10:05:03 . 572931 IP 192 . 168 . 122 . 1 . 53 >192 . 168 . 122 . 98 . 47049:22481/0/0A 54.204.39.132(48)
10:05:03 . 572944 IP 192 . 168 . 122 . 1 . 53 >192.168.122.98.47049: 337700/0/0(32)
10:05:03 . 621833 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39338: Flags [S.],seq3474204576,ack 3256851264,win 28960,options [mss 1460,sackOK,TS val 522874425ecr 122993922,nop,wscale 9],長(zhǎng)度0
10:05:03 . 667767 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39338:旗幟[。],ack 113,win 57,選項(xiàng)[nop,nop,TS val 522874436ecr 122993972],長(zhǎng)度0
10:05:03 . 672221 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39338: Flags [P.],seq1:643,ack 113,win 57,options [nop,nop,TS val 522874437ecr 122993972],length 642:HTTP:HTTP/1.1302 found
5捕獲的數(shù)據(jù)包
5過濾器接收的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
復(fù)雜過濾
您也可以使用邏輯運(yùn)算符來組合篩選器或創(chuàng)建更復(fù)雜的表達(dá)式。例如,要從源IP地址192.168.122.98和僅支持HTTP的服務(wù)中過濾數(shù)據(jù)包,請(qǐng)使用以下命令:
$ sudotcpdump-iany-C5-nns RC 192 . 168 . 122 . 98和端口80
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
10:08:00 . 472696 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80:標(biāo)志[S],seq2712685325,win 29200,選項(xiàng)[mss 1460,sackOK,TS val 123170822ecr 0,nop,wscale 7],長(zhǎng)度0
10:08:00 . 516118 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80:標(biāo)志[。],ack 268723504,win 229,選項(xiàng)[nop,nop,TS val 123170865ecr 522918648],長(zhǎng)度0
10:08:00 . 516583 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80: Flags [P.],seq0:112,ack 1,win 229,options [nop,nop,TS val 123170866ecr 522918648],length 112: HTTP: GET /HTTP/1.1
10:08:00 . 567044 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80:標(biāo)志[。],ack 643,win 239,選項(xiàng)[nop,nop,TS val 123170916ecr 522918661],長(zhǎng)度0
10:08:00 . 788153 IP 192 . 168 . 122 . 98 . 39342 >54.204.39.132.80:標(biāo)志[F.],seq112,ack 643,win 239,選項(xiàng)[nop,nop,TS val 123171137ecr 522918661],長(zhǎng)度0
5捕獲的數(shù)據(jù)包
5過濾器接收的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
您可以通過用括號(hào)將篩選器分組來創(chuàng)建更復(fù)雜的表達(dá)式。在這種情況下,請(qǐng)用引號(hào)將整個(gè)篩選器表達(dá)式括起來,以防shell將它們與shell表達(dá)式混淆:
$ sudotcdump-iany-C5-nn“端口80和(src 192.168.122.98或src 54.204.39.132)”
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
10:10:37 . 602214 IP 192 . 168 . 122 . 98 . 39346 >54.204.39.132.80:標(biāo)志[S],seq871108679,win 29200,選項(xiàng)[mss 1460,sackOK,TS val 123327951ecr 0,nop,wscale 7],長(zhǎng)度0
10:10:37 . 650651 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39346: Flags [S.],seq854753193,ack 871108680,win 28960,options [mss 1460,sackOK,TS val 522957932ecr 123327951,nop,wscale 9],長(zhǎng)度0
10:10:37 . 650708 IP 192 . 168 . 122 . 98 . 39346 >54.204.39.132.80:標(biāo)志[。],ack 1,win 229,選項(xiàng)[nop,nop,TS val 123328000ecr 522957932],長(zhǎng)度0
10:10:37 . 651097 IP 192 . 168 . 122 . 98 . 39346 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 123328000ecr 522957932],length 112: HTTP: GET /HTTP/1.1
10:10:37 . 692900 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39346:旗幟[。],ack 113,win 57,選項(xiàng)[nop,nop,TS val 522957942ecr 123328000],長(zhǎng)度0
5捕獲的數(shù)據(jù)包
5過濾器接收的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
在這個(gè)例子中,我們只過濾HTTP服務(wù)(端口80)和源IP地址192.168.122.98或54.204.39.132的數(shù)據(jù)包。這是一種快速檢查同一流程兩端的方法。
5.檢查包裝內(nèi)容
在前面的例子中,我們只檢查數(shù)據(jù)包的報(bào)頭,以獲取源、目的地和端口等信息。有時(shí),這就是解決網(wǎng)絡(luò)連接問題所需要的全部。然而,有時(shí)我們需要檢查數(shù)據(jù)包的內(nèi)容,以確保我們發(fā)送的消息包含我們需要的消息或我們收到的預(yù)期響應(yīng)。為了查看數(shù)據(jù)包內(nèi)容,tcpdump提供了兩個(gè)附加標(biāo)志:-X以十六進(jìn)制格式打印內(nèi)容,而ASCII或-A以ASCII格式打印內(nèi)容。
例如,檢查網(wǎng)頁請(qǐng)求的HTTP內(nèi)容,如下所示:
$ sudotcpdump-iany-C10-nn-Aport 80
tcpdump:抑制詳細(xì)輸出,使用-vor-vvffull協(xié)議解碼
監(jiān)聽任何鏈接類型的LINUX_SLL (Linux熟),捕獲大小262144字節(jié)
13:02:14 . 871803 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:標(biāo)志[S],seq2546602048,win 29200,選項(xiàng)[mss 1460,sackOK,TS val 133625221ecr 0,nop,wscale 7],長(zhǎng)度0
E..& lt..@.因特網(wǎng)網(wǎng)址中.....zb6。'....P...因特網(wǎng)網(wǎng)址中......r............
............................
13:02:14 . 910734 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39366: Flags [S.],seq 1877348646,ack 2546602049,win 28960,options [mss 1460,sackOK,TS val 525532247 ecr 133625221,nop,wscale 9],長(zhǎng)度0
E..& lt..@./..a6。'...zb。P..o..& amp...A..q a..........
. R.W.......................
13:02:14 . 910832 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:標(biāo)志[。],ack 1,win 229,選項(xiàng)[nop,nop,TS val 133625260ecr 525532247],長(zhǎng)度0
E..四..@.因特網(wǎng)網(wǎng)址中.....zb6。'....P...嗷..”...........
.....R.W................
13:02:14 . 911808 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 133625261ecr 525532247],length 112: HTTP: GET /HTTP/1.1
E.....@.因特網(wǎng)網(wǎng)址中..一..zb6。'....P...嗷..”...........
.....WGET共和國(guó)
用戶代理:Wget/1.14(linux-gnu)
接受:*/*
主持人:opensource.com
連接:保持活力
................
13:02:14 . 951199 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39366:旗幟[。],ack 113,win 57,選項(xiàng)[nop,nop,TS val 525532257ecr 133625261],長(zhǎng)度0
E..4.F@。/.."6.'...zb。P..“哦…”.......9.2 .....
. R.a....................
13:02:14 . 955030 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39366:標(biāo)志[P.],seq 1:643,ack 113,win 57,選項(xiàng)[nop,nop,TS val 525532258 ecr 133625261],長(zhǎng)度642: HTTP: HTTP/1.1 302 Found
E....G@。/...6.'...zb。P..“哦…”.......9 .......
. R.b....HTTP/1.1 302找到
服務(wù)器:nginx
日期:孫2018年9月23日格林尼治時(shí)間17:02:14
內(nèi)容——類型:文本/html;charset=iso-8859-1
內(nèi)容-長(zhǎng)度:207
X-內(nèi)容-類型-選項(xiàng):否
地點(diǎn):https://opensource.com/
緩存控制:最大年齡=1209600
到期日:孫,2018年10月7日17:02:14格林尼治時(shí)間
x-Request-ID:v-6 baa 3a cc-bf52-11e 8-9195-22000 ab 8 cf 2d
x-清漆:632951979
年齡:0
過孔:1.1清漆(清漆/5.2)
超高速緩存:缺失
連接:保持活動(dòng)
& lt!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN " >;
& lthtml>。& lthead>。
& lttitle>。302找到& lt/title>。
& lt/head>。& ltbody>。
& ltp>。已找到<。/p>。
& ltp>。文檔已移動(dòng)& lta href = " https://open source . com/" gt。這里& lt/a>。。& lt/p>。
& lt/body>。& lt/html>。
................
13:02:14 . 955083 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:標(biāo)志[。],ack 643,win 239,選項(xiàng)[nop,nop,TS val 133625304 ecr 525532258],長(zhǎng)度0
E..四..@.因特網(wǎng)網(wǎng)址中.....zb6。'....P....o..............
.....R.b................
13:02:15 . 195524 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:標(biāo)志[F .,seq 113,ack 643,win 239,選項(xiàng)[nop,nop,TS val 133625545 ecr 525532258],長(zhǎng)度0
E..四..@.因特網(wǎng)網(wǎng)址中.....zb6。'....P....o..............
.....R.b................
13:02:15 . 236592 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39366:標(biāo)志[F.],seq 643,ack 114,win 57,選項(xiàng)[nop,nop,TS val 525532329 ecr 133625545],長(zhǎng)度0
E..4.H@。/..6.'...zb。P..o..........9.我.....
。稀有......................
13:02:15 . 236656 IP 192 . 168 . 122 . 98 . 39366 >54.204.39.132.80:標(biāo)志[。],ack 644,win 239,選項(xiàng)[nop,nop,TS val 133625586 ecr 525532329],長(zhǎng)度0
E..四..@.因特網(wǎng)網(wǎng)址中.....zb6。'....P....o..............
.....稀有..................
捕獲10個(gè)數(shù)據(jù)包
過濾器收到10個(gè)數(shù)據(jù)包
0個(gè)數(shù)據(jù)包被內(nèi)核丟棄
這有助于解決API調(diào)用問題,假設(shè)調(diào)用使用普通的HTTP。該輸出對(duì)于加密連接不是很有用。
6.將捕獲保存到文件中
tcpdump提供的另一個(gè)有用的特性是能夠?qū)⒉东@保存到一個(gè)文件中,以便以后對(duì)結(jié)果進(jìn)行分析。例如,這允許您以批處理模式捕獲數(shù)據(jù)包,并在早上驗(yàn)證結(jié)果。當(dāng)有太多數(shù)據(jù)包需要分析時(shí),這也很有幫助,因?yàn)閷?shí)時(shí)捕獲可能發(fā)生得太快。
要將包保存到文件而不是顯示在屏幕上,請(qǐng)使用選項(xiàng)-w:
$ sudotcpdump-iany-C10-nn-wweb server . pcap端口80
[sudo]recordo的密碼:
偵聽任何鏈接類型的LINUX_SLL (Linux烹飪),捕獲大小262144字節(jié)
捕獲了10個(gè)數(shù)據(jù)包
10過濾器收到的數(shù)據(jù)包
0內(nèi)核丟棄的數(shù)據(jù)包
此命令將輸出保存在名為webserver.pcap的文件中。pcap擴(kuò)展名代表“數(shù)據(jù)包捕獲”,這是這種文件格式的約定。
如本例所示,屏幕上不顯示任何內(nèi)容,根據(jù)選項(xiàng)-c10捕獲10個(gè)數(shù)據(jù)包后完成捕獲。如果您需要一些反饋來確保數(shù)據(jù)包被捕獲,請(qǐng)使用-v選項(xiàng)。
Tcpdump以二進(jìn)制格式創(chuàng)建一個(gè)文件,所以不能簡(jiǎn)單地用文本編輯器打開它。要讀取文件的內(nèi)容,請(qǐng)使用-r選項(xiàng)執(zhí)行tcpdump:
$ tcpdump -nn-rwebserver.pcap
從filewebserver.pcap讀取,鏈接類型LINUX_SLL (Linux熟)
13:36:57 . 679494 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:標(biāo)志[S],seq3709732619,win 29200,選項(xiàng)[mss 1460,sackOK,TS val 135708029ecr 0,nop,wscale 7],長(zhǎng)度0
13:36:57 . 718932 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378: Flags [S.],seq1999298316,ack 3709732620,win 28960,options [mss 1460,sackOK,TS val 526052949ecr 135708029,nop,wscale 9],長(zhǎng)度0
13:36:57 . 719005 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:標(biāo)志[。],ack 1,win 229,選項(xiàng)[nop,nop,TS val 135708068ecr 526052949],長(zhǎng)度0
13:36:57 . 719186 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80: Flags [P.],seq1:113,ack 1,win 229,options [nop,nop,TS val 135708068ecr 526052949],length 112: HTTP: GET /HTTP/1.1
13:36:57 . 756979 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378:旗幟[。],ack 113,win 57,選項(xiàng)[nop,nop,TS val 526052959ecr 135708068],長(zhǎng)度0
13:36:57 . 760122 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378: Flags [P.],seq1:643,ack 113,win 57,options [nop,nop,TS val 526052959ecr 135708068],length 642:HTTP:HTTP/1.1302 found
13:36:57 . 760182 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:標(biāo)志[。],ack 643,win 239,選項(xiàng)[nop,nop,TS val 135708109ecr 526052959],長(zhǎng)度0
13:36:57 . 977602 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:標(biāo)志[F.],seq113,ack 643,win 239,選項(xiàng)[nop,nop,TS val 135708327ecr 526052959],長(zhǎng)度0
13:36:58 . 022089 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378:標(biāo)志[F.],seq643,ack 114,win 57,選項(xiàng)[nop,nop,TS val 526053025ecr 135708327],長(zhǎng)度0
13:36:58 . 022132 IP 192 . 168 . 122 . 98 . 39378 >54.204.39.132.80:標(biāo)志[。],ack 644,win 239,選項(xiàng)[nop,nop,TS val 135708371ecr 526053025],長(zhǎng)度0
$
因?yàn)椴辉僦苯訌木W(wǎng)絡(luò)接口捕獲數(shù)據(jù)包,所以不需要sudo來讀取文件。
您也可以使用我們討論過的任何過濾器來過濾文件的內(nèi)容,就像使用實(shí)時(shí)數(shù)據(jù)一樣。例如,通過執(zhí)行以下命令,從源IP地址54.204.39.132檢查捕獲文件中的數(shù)據(jù)包:
$ tcpdump-nn-rwebserver . pcap src 54.204.39.132
從filewebserver.pcap讀取,鏈接類型LINUX_SLL (Linux熟)
13:36:57 . 718932 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378: Flags [S.],seq1999298316,ack 3709732620,win 28960,options [mss 1460,sackOK,TS val 526052949ecr 135708029,nop,wscale 9],length 0
13:36:57 . 756979 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378:旗幟[。],ack 113,win 57,選項(xiàng)[nop,nop,TS val 526052959ecr 135708068],長(zhǎng)度0
13:36:57 . 760122 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378: Flags [P.],seq1:643,ack 113,win 57,options [nop,nop,TS val 526052959ecr 135708068],length 642:HTTP:HTTP/1.1302 found
13:36:58 . 022089 IP 54 . 204 . 39 . 132 . 80 >192.168.122.98.39378:標(biāo)志[F.],seq643,ack 114,win 57,選項(xiàng)[nop,nop,TS val 526053025ecr 135708327],長(zhǎng)度0
下一步是什么?
tcpdump的這些基本技能會(huì)幫助你開始使用這個(gè)強(qiáng)大的多功能工具。有關(guān)更多信息,請(qǐng)參見tcpdump網(wǎng)站和手冊(cè)頁。
Tcpdump命令行界面為捕獲和分析網(wǎng)絡(luò)流量提供了極大的靈活性。如果您需要圖形工具來理解更復(fù)雜的過程,請(qǐng)查看Wireshark。
Wireshark的一個(gè)優(yōu)點(diǎn)是可以閱讀。tcpdump捕獲的pcap文件??梢杂胻cpdump在沒有GUI的遠(yuǎn)程計(jì)算機(jī)上捕獲數(shù)據(jù)包,用Wireshark分析結(jié)果文件,不過這是另外一個(gè)話題。
原始鏈接:
https://opensource.com/article/18/10/introduction-tcpdump
1.《tcpdump 在Linux命令行中使用tcpdump「超詳細(xì)」》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。
2.《tcpdump 在Linux命令行中使用tcpdump「超詳細(xì)」》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/guonei/987892.html