linux下抓包--tcpdump的使用


例:tcpdump host 172.16.29.40 and port 4600 -X -s 500

tcpdump采用命令行方式,它的命令格式為:
  tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ]
          [ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ]
          [ -T 類型 ] [ -w 文件名 ] [表達式 ]

  1. tcpdump的選項介紹
   -a    將網絡地址和廣播地址轉變成名字;
   -d    將匹配信息包的代碼以人們能夠理解的匯編格式給出;
   -dd    將匹配信息包的代碼以c語言程序段的格式給出;
   -ddd    將匹配信息包的代碼以十進制的形式給出;
   -e    在輸出行打印出數據鏈路層的頭部信息;
   -f    將外部的Internet地址以數字的形式打印出來;
   -l    使標准輸出變為緩沖行形式;
   -n    不把網絡地址轉換成名字;
   -t    在輸出的每一行不打印時間戳;
   -v    輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息;
   -vv    輸出詳細的報文信息;
   -c    在收到指定的包的數目后,tcpdump就會停止;
   -F    從指定的文件中讀取表達式,忽略其它的表達式;
   -i    指定監聽的網絡接口;
   -r    從指定的文件中讀取包(這些包一般通過-w選項產生);
   -w    直接將包寫入文件中,並不分析和打印出來;
   -T    將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網絡管理協議)

1. 監控主機為192.9.200.59上8000端口的tcp協議:
  tcpdump host 192.9.200.59 and tcp port 8000

2. 如果想要顯示數據包的內容,需要使用-X參數,如,我想要顯示捕獲的http數據包http header的內容:
    tcpdump -X host 192.9.200.59 and tcp port 8000

顯示結果如下:
22:13:19.717472 IP testhost59.12535 > liujuan59.8000: . 1:330(329) ack 1 win 3278
0x0000: 4500 0171 e616 0000 8006 cb2b 0000 0000 E..q.......+....
0x0010: c009 c83b 30f7 1f40 0000 0002 0000 0002 ...;0..@........
0x0020: 5010 8000 b066 0000 504f 5354 202f 2048 P....f..POST./.H
0x0030: 5454 502f 312e 310d 0a43 6f6e 7465 6e74 TTP/1.1..Content
0x0040: 2d54 7970 653a 2074 6578 742f 786d 6c3b -Type:.text/xml;
0x0050: 2063 .c
3. 可以看到該結果只顯示了http頭的一部分,沒有顯示全,是因為tcpdump默認將顯示的數據長度截斷了,可以使用-s后面加數據長度,來設置數據顯示長度:
tcpdump -X -s 0 host 192.9.200.59 and tcp port 8000
以上的例子中,-s 0 表示自動設置長度使其能夠顯示所有數據。
4. 捕獲的數據太多,不斷刷屏,可能需要將數據內容記錄到文件里,需要使用-w參數:
tcpdump -X -s 0 -w aaa host 192.9.200.59 and tcp port 8000
則將之前顯示在屏幕中的內容,寫入tcpdump可執行文件同級目錄下的aaa文件中。
文件查看方式如下,需要使用-r參數:
tcpdump -X -s 0 -r aaa host 192.9.200.59 and tcp port 8000
如果這樣寫:
tcpdump -r aaa
則只能看到最簡單的數據傳輸交互過程,看不到數據包內容,查看時也需要使用相應的參數。


免責聲明!

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



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