1. 程式人生 > >linux命令之tcpdump

linux命令之tcpdump

網路抓包,我們肯定不會陌生。

常見的(我用過的)抓包工具有:
Chrome控制檯Network面板, Fiddler, Wireshark.
然而都是windows下的工具, 在伺服器上工作, 我們還需要一些命令列的抓包工具, 比如tcpdump.

tcpdump簡單來說就是一個命令列抓包工具, 可以指定網絡卡, 埠, IP等, 功能非常強大.
如果沒有安裝,可以通過yum install -y tcpdump執行安裝(Redhat系列)

實驗環境:

  • Linux: CentOS release 6.10 (Final)
    IP: 192.168.31.42

  • Windows:
    IP: 192.168.31.106

在 Linux上的8080埠開了一個http服務,Windows中發起請求

下面是一些常用選項及使用截圖.

  • -D 列出哪些網絡卡可以抓包

    [[email protected] dev-scripts]# tcpdump -D
    1.eth0
    2.docker0
    3.nflog (Linux netfilter log (NFLOG) interface)
    4.nfqueue (Linux netfilter queue (NFQUEUE) interface)
    5.usbmon1 (USB bus number 1)
    6.any (Pseudo-device that captures on all interfaces)
    7.lo
  • -i xx 抓取經過網絡卡xx的資料包
    如 抓取經過eth0的資料包:
    tcpdump -i eth0

  • -c num 最多抓取幾個包就停止
    上面的tcpdump -i eth0包實在太多了,已經“刷屏”了,加上-c 5指定最多抓取5個包就停止
    tcpdump -i eth0 -c 5

  • -n Don’t convert host addresses to names. This can be used to avoid DNS lookups.
    不把主機地址轉換成名字. 就是可以避免DNS查詢。

  • -nn Don’t convert protocol and port numbers etc. to names either
    不會將協議和埠號轉換為名字
    比如上面有個tcpdump -i eth0 -c 5

    , ssh連線埠顯示的是ssh, 加上-nn就會顯示成22.
    如下圖(注意標紅位置):
    tcpdump -i eth0 -c 5 -nn

  • 只抓取指定協議的資料包, 如tcpdump -i eth0 icmp 只抓取icmp的資料包
    icmp最著名的兩個應用pingtraceroute
    以traceroute為例子看看:
    tcpdump -i eth0 icmp
    tcpdump -i eth0 icmp

    traceroute www.yandex.ru
    traceroute www.yandex.ru

  • port 8080 指定埠

  • host 192.168.31.42 指定IP(只抓取和顯示與192.168.31.42有關的包)

  • port 8080 and host 192.168.31.42 同時指定埠和IP

  • src 192.168.31.42 只抓取源IP為192.168.31.42的包

  • dst 192.168.31.42 只抓取目標IP為192.168.31.42的包

  • 多條件 tcpdump -i eth0 'port 8080 and (src 192.168.31.106 or src 192.168.31.42)' (注意要加單引號,否則語法有錯)

  • -A Print each packet (minus its link level header) in ASCII. Handy for capturing web pages.
    以ACSII形式打印出每一個包,對抓web頁面非常方便

  • -X 以十六進位制打印出包內容

  • -w test.pcap 儲存成檔案

  • tcpdump -nn -r test.pcap (從檔案讀取, src等過濾規則同樣適用)
    tcpdump -nn -c 5 -r test.pcap port 8080 (port 8080這種表示式要寫在後面,寫在-r前面會報錯)

儲存下來的 test.pcap 檔案用wiresharek也可以開啟觀察.
如:

# 抓包將資訊儲存到test.cap
tcpdump -i eth0 -nn 'port 8080' -w test.cap

在windows請求"http://192.168.31.42:8080/", 也就是linux上的8080埠http服務
Ctrl+C停止tcpdump抓包

用Wireshark開啟test.cap:
用Wireshark開啟test.cap

這樣觀看是不是感覺特別直觀呢?

總結:
命令選項非常多,但是掌握常用的就可以勝任大部分工作了,不要看見一大堆選項就不想學了。

歡迎補充指正!