在linux中使用tcpdump抓包的方法:


在linux中使用tcpdump抓包的方法:

1,運行下面命令來從所有網卡中捕獲數據包:

tcpdump -i any

2,從指定網卡中捕獲數據包

tcpdump -i eth0

3,指定網卡,IP地址,寫入文件

tcpdump -i eth0 host 10.19.150.242 -w ./datdump.cap

4,指定網卡,源ip 且 目的ip,寫入文件

tcpdump -i eth0 src host 10.10.100.19 and dst host 10.10.100.153 -w ./datdump1.cap

5,指定網卡,源ip 或 目的ip,寫入文件

tcpdump -i eth0 src host 10.10.100.19 or dst host 10.10.100.153 -w ./datdump1.cap

6,指定網卡,tcp端口 且 源ip 且 目的ip,寫入文件

tcpdump -i eth0 tcp port 52312 and src host 10.10.100.19 and dst host 10.10.100.153 -w ./datdump3.cap

7,指定網卡,tcp端口 且 源ip 且 目的ip,寫入文件

tcpdump -i eth0 host ! 10.10.100.19 and ! 10.10.100.153 -w ./datdump4.cap

8,只抓取sync的數據包 具體什么意思,詳見

tcpdump -i eth0 tcp[13] == 2 -w ./datdump5.cap

9,只抓取HTTP包

tcpdump -i eth0 'tcp[(tcp[12]>>2):4] = 0x48545450' -w ./datdump5.cap

10,只抓取ip數據幀中沒有數據的包,詳見

tcpdump -i eth0 '((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0' -w ./datdump6.cap

tcpdump [ 選項 ] [ -c 數量 ] [ -i 網絡接口 ] [ -w 文件名 ] [ 表達式 ]

man tcpdump


tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]

​    [ -c count ]

​    [ -C file_size ] [ -G rotate_seconds ] [ -F file ]

​    [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]

​    [ --number ] [ -Q in|out|inout ]

​    [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]

​    [ -W filecount ]

​    [ -E spi@ipaddr algo:secret,... ]

​    [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]

​    [ --time-stamp-precision=tstamp_precision ]

​    [ --immediate-mode ] [ --version ]

​    [ expression ]



選項翻譯如下: 

-l:使標准輸出變為緩沖行形式;

-c:抓包次數;

-nn:直接以 IP 及 Port Number 顯示,而非主機名與服務名稱;

-s :<數據包大小> 設置每個數據包的大小;

-i:指定監聽的網絡接口;

-r:從指定的文件中讀取包;

-w:輸出信息保存到指定文件;

-a:將網絡地址和廣播地址轉變成名字;

-d:將匹配信息包的代碼以人們能夠理解的匯編格式給出;

-e:在輸出行打印出數據鏈路層的頭部信息;

-f:將外部的Internet地址以數字的形式打印出來;

-t:在輸出的每一行不打印時間戳;

-v :輸出稍微詳細的報文信息;--vv則輸出更詳細信息。

抓取帶有特殊標記的數據包

https://www.jb51.net/LINUXjishu/118388.html?pc

示例:抓取只包含SYN位的數據包

1.客戶端發送SYN

2.服務端回應SYN和ACK

3.客戶端發送ACK

現在我們僅捕獲包含SYN位的數據包。 注意,不希望步驟2(SYN-ACK)的數據包,只是一個普通的初始SYN。

tcp頭的結構

TCP頭包含20個字節固定長度的數據(上圖中的前4行),而控制位位於第13個字節(字節計算從0開始)

只看我們感興趣的控制位:

這些是我們感興趣的TCP控制位。我們對這個八位組中的位進行了編號,從0到7,從右到左,所以PSH位是位編號3,而URG位是編號5,SYN位是2。

如果只包含 SYN 位,那就是 tcp頭的第13個字節(0開始)的值為2,即tcp[13] == 2。

tcpdump -i eth0 tcp[13] == 2 -w ./datdump5.cap

如果抓取包含SYN位的數據包

tcpdump -i eth0 'tcp[13] & 2 == 2' -w ./datdump5.cap

示例:只抓取ip數據包沒有數據的包

tcpdump -i eth0 '((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) == 0' -w ./datdump6.cap

ip[2:2]

表示整個ip數據包總長度,即ip頭的第2個字節(0開始)開始的兩個字節(2,3)的值。

(ip[0]&0xf)<<2

ip頭的第0個字節取低4位,然后左移兩位(乘4),即ip頭的長度。乘4的原因是首部長度表示有多少個32位的數據。

(tcp[12]&0xf0)>>2)

表示tcp頭的長度。

示例:只抓取http數據包

tcpdump -i eth0 'tcp[(tcp[12]>>2):4] = 0x47455420' -w ./datdump5.cap

tcp[(tcp[12]>>2):4] 表示tcp頭部之后的4個字節的值,0x47455420 就是HTTP的16進制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM