中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux系統中tcpdump怎么用

發布時間:2022-01-30 16:27:47 來源:億速云 閱讀:203 作者:小新 欄目:開發技術

小編給大家分享一下Linux系統中tcpdump怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。

Linux系統中tcpdump怎么用

1、在 Linux 中安裝 tcpdump

tcpdump 支持多種 Linux 發行版,所以你的系統中很有可能已經安裝了它。用下面的命令檢查一下是否已經安裝了 tcpdump:

 $ which tcpdump
 /usr/sbin/tcpdump

如果還沒有安裝 tcpdump,你可以用軟件包管理器安裝它。 例如,在 CentOS 或者 Red Hat Enterprise 系統中,用如下命令安裝 tcpdump:

 $ sudo yum install -y tcpdump

tcpdump 依賴于 libpcap,該庫文件用于捕獲網絡數據包。如果該庫文件也沒有安裝,系統會根據依賴關系自動安裝它。

現在你可以開始抓包了。

2、用 tcpdump 抓包

使用 tcpdump 抓包,需要管理員權限,因此下面的示例中絕大多數命令都是以 sudo 開頭。

首先,先用 tcpdump -D 命令列出可以抓包的網絡接口:

 $ sudo tcpdump -D
 1.eth0
 2.virbr0
 3.eth2
 4.any (Pseudo-device that captures on all interfaces)
 5.lo [Loopback]

如上所示,可以看到我的機器中所有可以抓包的網絡接口。其中特殊接口 any 可用于抓取所有活動的網絡接口的數據包。

我們就用如下命令先對 any 接口進行抓包:

 $ sudo tcpdump -i any
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 09:56:18.293641 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3770820720:3770820916, ack 3503648727, win 309, options [nop,nop,TS val 76577898 ecr 510770929], length 196
 09:56:18.293794 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 391, options [nop,nop,TS val 510771017 ecr 76577898], length 0
 09:56:18.295058 IP rhel75.59883 > gateway.domain: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43)
 09:56:18.310225 IP gateway.domain > rhel75.59883: 2486 NXDomain* 0/1/0 (102)
 09:56:18.312482 IP rhel75.49685 > gateway.domain: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44)
 09:56:18.322425 IP gateway.domain > rhel75.49685: 34242 NXDomain* 0/1/0 (103)
 09:56:18.323164 IP rhel75.56631 > gateway.domain: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44)
 09:56:18.323342 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 196:584, ack 1, win 309, options [nop,nop,TS val 76577928 ecr 510771017], length 388
 09:56:18.323563 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 584, win 411, options [nop,nop,TS val 510771047 ecr 76577928], length 0
 09:56:18.335569 IP gateway.domain > rhel75.56631: 29904 NXDomain* 0/1/0 (103)
 09:56:18.336429 IP rhel75.44007 > gateway.domain: 61677+ PTR? 98.122.168.192.in-addr.arpa. (45)
 09:56:18.336655 IP gateway.domain > rhel75.44007: 61677* 1/0/0 PTR rhel75. (65)
 09:56:18.337177 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 584:1644, ack 1, win 309, options [nop,nop,TS val 76577942 ecr 510771047], length 1060
 ---- SKIPPING LONG OUTPUT -----
 09:56:19.342939 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 1752016, win 1444, options [nop,nop,TS val 510772067 ecr 76578948], length 0
 ^C
 9003 packets captured
 9010 packets received by filter
 7 packets dropped by kernel
 $

tcpdump 會持續抓包直到收到中斷信號。你可以按 Ctrl+C 來停止抓包。正如上面示例所示,tcpdump 抓取了超過 9000 個數據包。在這個示例中,由于我是通過 ssh 連接到服務器,所以 tcpdump 也捕獲了所有這類數據包。-c 選項可以用于限制 tcpdump 抓包的數量:

 $ sudo tcpdump -i any -c 5
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 11:21:30.242740 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3772575680:3772575876, ack 3503651743, win 309, options [nop,nop,TS val 81689848 ecr 515883153], length 196
 11:21:30.242906 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 1443, options [nop,nop,TS val 515883235 ecr 81689848], length 0
 11:21:30.244442 IP rhel75.43634 > gateway.domain: 57680+ PTR? 1.64.168.192.in-addr.arpa. (43)
 11:21:30.244829 IP gateway.domain > rhel75.43634: 57680 NXDomain 0/0/0 (43)
 11:21:30.247048 IP rhel75.33696 > gateway.domain: 37429+ PTR? 28.64.168.192.in-addr.arpa. (44)
 5 packets captured
 12 packets received by filter
 0 packets dropped by kernel
 $

如上所示,tcpdump 在抓取 5 個數據包后自動停止了抓包。這在有些場景中十分有用 —— 比如你只需要抓取少量的數據包用于分析。當我們需要使用過濾規則抓取特定的數據包(如下所示)時,-c 的作用就十分突出了。

在上面示例中,tcpdump 默認是將 IP 地址和端口號解析為對應的接口名以及服務協議名稱。而通常在網絡故障排查中,使用 IP 地址和端口號更便于分析問題;用 -n 選項顯示 IP 地址,-nn 選項顯示端口號:

 $ sudo tcpdump -i any -c5 -nn
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 23:56:24.292206 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 166198580:166198776, ack 2414541257, win 309, options [nop,nop,TS val 615664 ecr 540031155], length 196
 23:56:24.292357 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 196, win 1377, options [nop,nop,TS val 540031229 ecr 615664], length 0
 23:56:24.292570 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 372
 23:56:24.292655 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 568, win 1400, options [nop,nop,TS val 540031229 ecr 615664], length 0
 23:56:24.292752 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 568:908, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 340
 5 packets captured
 6 packets received by filter
 0 packets dropped by kernel

如上所示,抓取的數據包中顯示 IP 地址和端口號。這樣還可以阻止 tcpdump 發出 DNS 查找,有助于在網絡故障排查中減少數據流量。

現在你已經會抓包了,讓我們來分析一下這些抓包輸出的含義吧。

3、理解抓取的報文

tcpdump 能夠抓取并解碼多種協議類型的數據報文,如 TCP、UDP、ICMP 等等。雖然這里我們不可能介紹所有的數據報文類型,但可以分析下 TCP 類型的數據報文,來幫助你入門。更多有關 tcpdump 的詳細介紹可以參考其 幫助手冊。tcpdump 抓取的 TCP 報文看起來如下:

 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

具體的字段根據不同的報文類型會有不同,但上面這個例子是一般的格式形式。

第一個字段 08:41:13.729687 是該數據報文被抓取的系統本地時間戳。

然后,IP 是網絡層協議類型,這里是 IPv4,如果是 IPv6 協議,該字段值是 IP6。

192.168.64.28.22 是源 ip 地址和端口號,緊跟其后的是目的 ip 地址和其端口號,這里是 192.168.64.1.41916。

在源 IP 和目的 IP 之后,可以看到是 TCP 報文標記段 Flags [P.]。該字段通常取值如下:

標志類型描述
SSYNConnection Start
FFINConnection Finish
PPUSHData push
RRSTConnection reset
.ACKAcknowledgment

該字段也可以是這些值的組合,例如 [S.] 代表 SYN-ACK 數據包。

接下來是該數據包中數據的序列號。對于抓取的第一個數據包,該字段值是一個絕對數字,后續包使用相對數值,以便更容易查詢跟蹤。例如此處 seq 196:568 代表該數據包包含該數據流的第 196 到 568 字節。

接下來是 ack 值:ack 1。該數據包是數據發送方,ack 值為 1。在數據接收方,該字段代表數據流上的下一個預期字節數據,例如,該數據流中下一個數據包的 ack 值應該是 568。

接下來字段是接收窗口大小 win 309,它表示接收緩沖區中可用的字節數,后跟 TCP 選項如 MSS(最大段大小)或者窗口比例值。更詳盡的 TCP 協議內容請參考 Transmission Control Protocol(TCP) Parameters

最后,length 372 代表數據包有效載荷字節長度。這個長度和 seq 序列號中字節數值長度是不一樣的。

現在讓我們學習如何過濾數據報文以便更容易的分析定位問題。

4、過濾數據包

正如上面所提,tcpdump 可以抓取很多種類型的數據報文,其中很多可能和我們需要查找的問題并沒有關系。舉個例子,假設你正在定位一個與 web 服務器連接的網絡問題,就不必關系 SSH 數據報文,因此在抓包結果中過濾掉 SSH 報文可能更便于你分析問題。

tcpdump 有很多參數選項可以設置數據包過濾規則,例如根據源 IP 以及目的 IP 地址,端口號,協議等等規則來過濾數據包。下面就介紹一些最常用的過濾方法。

協議

在命令中指定協議便可以按照協議類型來篩選數據包。比方說用如下命令只要抓取 ICMP 報文:

 $ sudo tcpdump -i any -c5 icmp
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

然后再打開一個終端,去 ping 另一臺機器:

 $ ping opensource.com
 PING opensource.com (54.204.39.132) 56(84) bytes of data.
 64 bytes from ec2-54-204-39-132.compute-1.amazonaws.com (54.204.39.132): icmp_seq=1 ttl=47 time=39.6 ms

回到運行 tcpdump 命令的終端中,可以看到它篩選出了 ICMP 報文。這里 tcpdump 并沒有顯示有關 opensource.com 的域名解析數據包:

 09:34:20.136766 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 1, length 64
 09:34:20.176402 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP echo reply, id 20361, seq 1, length 64
 09:34:21.140230 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 2, length 64
 09:34:21.180020 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP echo reply, id 20361, seq 2, length 64
 09:34:22.141777 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 3, length 64
 5 packets captured
 5 packets received by filter
 0 packets dropped by kernel
主機

用 host 參數只抓取和特定主機相關的數據包:

 $ sudo tcpdump -i any -c5 -nn host 54.204.39.132
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 09:54:20.042023 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [S], seq 1375157070, win 29200, options [mss 1460,sackOK,TS val 122350391 ecr 0,nop,wscale 7], length 0
 09:54:20.088127 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [S.], seq 1935542841, ack 1375157071, win 28960, options [mss 1460,sackOK,TS val 522713542 ecr 122350391,nop,wscale 9], length 0
 09:54:20.088204 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122350437 ecr 522713542], length 0
 09:54:20.088734 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122350438 ecr 522713542], length 112: HTTP: GET / HTTP/1.1
 09:54:20.129733 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [.], ack 113, win 57, options [nop,nop,TS val 522713552 ecr 122350438], length 0
 5 packets captured
 5 packets received by filter
 0 packets dropped by kernel

如上所示,只抓取和顯示與 54.204.39.132 有關的數據包。

端口號

tcpdump 可以根據服務類型或者端口號來篩選數據包。例如,抓取和 HTTP 服務相關的數據包:

 $ sudo tcpdump -i any -c5 -nn port 80tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes09:58:28.790548 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [S], seq 1745665159, win 29200, options [mss 1460,sackOK,TS val 122599140 ecr 0,nop,wscale 7], length 009:58:28.834026 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [S.], seq 4063583040, ack 1745665160, win 28960, options [mss 1460,sackOK,TS val 522775728 ecr 122599140,nop,wscale 9], length 009:58:28.834093 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122599183 ecr 522775728], length 009:58:28.834588 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122599184 ecr 522775728], length 112: HTTP: GET / HTTP/1.109:58:28.878445 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [.], ack 113, win 57, options [nop,nop,TS val 522775739 ecr 122599184], length 05 packets captured5 packets received by filter0 packets dropped by kernel
IP 地址/主機名

同樣,你也可以根據源 IP 地址或者目的 IP 地址或者主機名來篩選數據包。例如抓取源 IP 地址為 192.168.122.98 的數據包:

 $ sudo tcpdump -i any -c5 -nn port 80
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 09:58:28.790548 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [S], seq 1745665159, win 29200, options [mss 1460,sackOK,TS val 122599140 ecr 0,nop,wscale 7], length 0
 09:58:28.834026 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [S.], seq 4063583040, ack 1745665160, win 28960, options [mss 1460,sackOK,TS val 522775728 ecr 122599140,nop,wscale 9], length 0
 09:58:28.834093 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122599183 ecr 522775728], length 0
 09:58:28.834588 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122599184 ecr 522775728], length 112: HTTP: GET / HTTP/1.1
 09:58:28.878445 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [.], ack 113, win 57, options [nop,nop,TS val 522775739 ecr 122599184], length 0
 5 packets captured
 5 packets received by filter
 0 packets dropped by kernel

注意此處示例中抓取了來自源 IP 地址 192.168.122.98 的 53 端口以及 80 端口的數據包,它們的應答包沒有顯示出來因為那些包的源 IP 地址已經變了。

相對的,使用 dst 就是按目的 IP/主機名來篩選數據包。

 $ sudo tcpdump -i any -c5 -nn src 192.168.122.98
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 10:02:15.220824 IP 192.168.122.98.39436 > 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: Flags [S], seq 1108640533, win 29200, options [mss 1460,sackOK,TS val 122825713 ecr 0,nop,wscale 7], length 0
 10:02:15.409229 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [.], ack 669337581, win 229, options [nop,nop,TS val 122825758 ecr 522832372], length 0
 10:02:15.409667 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [P.], seq 0:112, ack 1, win 229, options [nop,nop,TS val 122825759 ecr 522832372], length 112: HTTP: GET / HTTP/1.1
 5 packets captured
 5 packets received by filter
 0 packets dropped by kernel
多條件篩選

當然,可以使用多條件組合來篩選數據包,使用 and 以及 or 邏輯操作符來創建過濾規則。例如,篩選來自源 IP 地址 192.168.122.98 的 HTTP 數據包:

 $ sudo tcpdump -i any -c5 -nn dst 192.168.122.98
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 10:05:03.572931 IP 192.168.122.1.53 > 192.168.122.98.47049: 2248 1/0/0 A 54.204.39.132 (48)
 10:05:03.572944 IP 192.168.122.1.53 > 192.168.122.98.47049: 33770 0/0/0 (32)
 10:05:03.621833 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [S.], seq 3474204576, ack 3256851264, win 28960, options [mss 1460,sackOK,TS val 522874425 ecr 122993922,nop,wscale 9], length 0
 10:05:03.667767 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [.], ack 113, win 57, options [nop,nop,TS val 522874436 ecr 122993972], length 0
 10:05:03.672221 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 522874437 ecr 122993972], length 642: HTTP: HTTP/1.1 302 Found
 5 packets captured
 5 packets received by filter
 0 packets dropped by kernel

你也可以使用括號來創建更為復雜的過濾規則,但在 shell 中請用引號包含你的過濾規則以防止被識別為 shell 表達式:

 $ sudo tcpdump -i any -c5 -nn "port 80 and (src 192.168.122.98 or src 54.204.39.132)"
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 10:10:37.602214 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [S], seq 871108679, win 29200, options [mss 1460,sackOK,TS val 123327951 ecr 0,nop,wscale 7], length 0
 10:10:37.650651 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [S.], seq 854753193, ack 871108680, win 28960, options [mss 1460,sackOK,TS val 522957932 ecr 123327951,nop,wscale 9], length 0
 10:10:37.650708 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 0
 10:10:37.651097 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 112: HTTP: GET / HTTP/1.1
 10:10:37.692900 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [.], ack 113, win 57, options [nop,nop,TS val 522957942 ecr 123328000], length 0
 5 packets captured
 5 packets received by filter
 0 packets dropped by kernel$ sudo tcpdump -i any -c5 -nn "port 80 and (src 192.168.122.98 or src 54.204.39.132)"
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 10:10:37.602214 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [S], seq 871108679, win 29200, options [mss 1460,sackOK,TS val 123327951 ecr 0,nop,wscale 7], length 0
 10:10:37.650651 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [S.], seq 854753193, ack 871108680, win 28960, options [mss 1460,sackOK,TS val 522957932 ecr 123327951,nop,wscale 9], length 0
 10:10:37.650708 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 0
 10:10:37.651097 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 112: HTTP: GET / HTTP/1.1
 10:10:37.692900 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [.], ack 113, win 57, options [nop,nop,TS val 522957942 ecr 123328000], length 0
 5 packets captured
 5 packets received by filter
 0 packets dropped by kernel

該例子中我們只抓取了來自源 IP 為 192.168.122.98 或者 54.204.39.132 的 HTTP (端口號80)的數據包。使用該方法就很容易抓取到數據流中交互雙方的數據包了。

5、檢查數據包內容

在以上的示例中,我們只按數據包頭部的信息來建立規則篩選數據包,例如源地址、目的地址、端口號等等。有時我們需要分析網絡連接問題,可能需要分析數據包中的內容來判斷什么內容需要被發送、什么內容需要被接收等。tcpdump 提供了兩個選項可以查看數據包內容,-X 以十六進制打印出數據報文內容,-A 打印數據報文的 ASCII 值。

例如,HTTP 請求報文內容如下:

 $ sudo tcpdump -i any -c10 -nn -A port 80
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 13:02:14.871803 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [S], seq 2546602048, win 29200, options [mss 1460,sackOK,TS val 133625221 ecr 0,nop,wscale 7], length 0
 E.. 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], length 0
 E.. 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 133625260 ecr 525532247], length 0
 E..4..@.@.....zb6.'....P...Ao..'...........
 .....R.W................
 13:02:14.911808 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 133625261 ecr 525532247], length 112: HTTP: GET / HTTP/1.1
 E.....@.@..1..zb6.'....P...Ao..'...........
 .....R.WGET / HTTP/1.1
 User-Agent: Wget/1.14 (linux-gnu)
 Accept: */*
 Host: opensource.com
 Connection: Keep-Alive
 ................
 13:02:14.951199 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [.], ack 113, win 57, options [nop,nop,TS val 525532257 ecr 133625261], length 0
 E..4.F@./.."6.'...zb.P..o..'.......9.2.....
 .R.a....................
 13:02:14.955030 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 525532258 ecr 133625261], length 642: HTTP: HTTP/1.1 302 Found
 E....G@./...6.'...zb.P..o..'.......9.......
 .R.b....HTTP/1.1 302 Found
 Server: nginx
 Date: Sun, 23 Sep 2018 17:02:14 GMT
 Content-Type: text/html; charset=iso-8859-1
 Content-Length: 207
 X-Content-Type-Options: nosniff
 Location: https://opensource.com/
 Cache-Control: max-age=1209600
 Expires: Sun, 07 Oct 2018 17:02:14 GMT
 X-Request-ID: v-6baa3acc-bf52-11e8-9195-22000ab8cf2d
 X-Varnish: 632951979
 Age: 0
 Via: 1.1 varnish (Varnish/5.2)
 X-Cache: MISS
 Connection: keep-alive
 
 
 302 Found 
 Found The document has moved here. 
 ................
 13:02:14.955083 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 133625304 ecr 525532258], length 0
 E..4..@.@.....zb6.'....P....o..............
 .....R.b................
 13:02:15.195524 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [F.], seq 113, ack 643, win 239, options [nop,nop,TS val 133625545 ecr 525532258], length 0
 E..4..@.@.....zb6.'....P....o..............
 .....R.b................
 13:02:15.236592 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 525532329 ecr 133625545], length 0
 E..4.H@./.. 6.'...zb.P..o..........9.I.....
 .R......................
 13:02:15.236656 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 644, win 239, options [nop,nop,TS val 133625586 ecr 525532329], length 0
 E..4..@.@.....zb6.'....P....o..............
 .....R..................
 10 packets captured
 10 packets received by filter
 0 packets dropped by kernel

這對定位一些普通 HTTP 調用 API 接口的問題很有用。當然如果是加密報文,這個輸出也就沒多大用了。

6、保存抓包數據

tcpdump 提供了保存抓包數據的功能以便后續分析數據包。例如,你可以夜里讓它在那里抓包,然后早上起來再去分析它。同樣當有很多數據包時,顯示過快也不利于分析,將數據包保存下來,更有利于分析問題。

使用 -w 選項來保存數據包而不是在屏幕上顯示出抓取的數據包:

 $ sudo tcpdump -i any -c10 -nn -w webserver.pcap port 80
 [sudo] password for ricardo:
 tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
 10 packets captured
 10 packets received by filter
 0 packets dropped by kernelxxxxxxxxxx6 1$ sudo tcpdump -i any -c10 -nn -w webserver.pcap port 802[sudo] password for ricardo:3tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes410 packets captured510 packets received by filter60 packets dropped by kernel$ sudo tcpdump -i any -c10 -nn -w webserver.pcap port 80[sudo] password for ricardo:tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes10 packets captured10 packets received by filter0 packets dropped by kernel

該命令將抓取的數據包保存到文件 webserver.pcap。后綴名 pcap 表示文件是抓取的數據包格式。

正如示例中所示,保存數據包到文件中時屏幕上就沒有任何有關數據報文的輸出,其中 -c10 表示抓取到 10 個數據包后就停止抓包。如果想有一些反饋來提示確實抓取到了數據包,可以使用 -v 選項。

tcpdump 將數據包保存在二進制文件中,所以不能簡單的用文本編輯器去打開它。使用 -r 選項參數來閱讀該文件中的報文內容:

 $ tcpdump -nn -r webserver.pcap
 reading from file webserver.pcap, link-type LINUX_SLL (Linux cooked)
 13:36:57.679494 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [S], seq 3709732619, win 29200, options [mss 1460,sackOK,TS val 135708029 ecr 0,nop,wscale 7], length 0
 13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], seq 1999298316, ack 3709732620, win 28960, options [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], length 0
 13:36:57.719005 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 135708068 ecr 526052949], length 0
 13:36:57.719186 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 135708068 ecr 526052949], length 112: HTTP: GET / HTTP/1.1
 13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 0
 13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 642: HTTP: HTTP/1.1 302 Found
 13:36:57.760182 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 135708109 ecr 526052959], length 0
 13:36:57.977602 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [F.], seq 113, ack 643, win 239, options [nop,nop,TS val 135708327 ecr 526052959], length 0
 13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 526053025 ecr 135708327], length 0
 13:36:58.022132 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 644, win 239, options [nop,nop,TS val 135708371 ecr 526053025], length 0
 $

這里不需要管理員權限 sudo 了,因為此刻并不是在網絡接口處抓包。

你還可以使用我們討論過的任何過濾規則來過濾文件中的內容,就像使用實時數據一樣。 例如,通過執行以下命令從源 IP 地址 54.204.39.132 檢查文件中的數據包:

 $ tcpdump -nn -r webserver.pcap src 54.204.39.132
 reading from file webserver.pcap, link-type LINUX_SLL (Linux cooked)
 13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], seq 1999298316, ack 3709732620, win 28960, options [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], length 0
 13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 0
 13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 642: HTTP: HTTP/1.1 302 Found
 13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 526053025 ecr 135708327], length 0

以上是“Linux系統中tcpdump怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南投县| 响水县| 宜良县| 田阳县| 常山县| 仁布县| 托克托县| 全州县| 富顺县| 手机| 邮箱| 靖州| 曲水县| 永和县| 财经| 岚皋县| 栖霞市| 凌源市| 宜宾县| 高淳县| 仁化县| 惠水县| 贡山| 西乌珠穆沁旗| 沙坪坝区| 哈密市| 北辰区| 海兴县| 竹山县| 资阳市| 吉水县| 阳东县| 景德镇市| 湖南省| 周宁县| 福建省| 星子县| 江源县| 芷江| 应城市| 涿州市|