天天看點

Linux常用指令筆記整理之tcpdump

強大的抓包工具, 博大精深内容太多, 是以這篇部落格整理得隻說常用, 具體的參考tcpdump使用者手冊,

tcpdump需要root權限, 是以記得加上sudo

常用參數

  • -nn選項:

    意思是說當tcpdump遇到協定号或端口号時,不要将這些号碼轉換成對應的協定名稱或端口名稱。比如,大家都知道80是http端口,tcpdump就不會将它顯示成http了

  • -c選項:

    是Count的含義,這設定了我們希望tcpdump幫我們抓幾個包。

  • -i : 指定哪一張網卡
  • -l : 使得輸出變為行緩沖
  • -t : 輸出時不列印時間戳
  • -v : 輸出更詳細的資訊
  • -F : 指定過濾表達式所在的檔案, 可以建立了一個filter.txt文本檔案來存儲過濾表達式,然後通過-F來指定filter.txt
  • -w : 将流量儲存到檔案中
  • -r : 讀取raw packets檔案

常用過濾規則

  • 隻看到目的機器dst(比如是qq.com)之間的網絡包

    sudo tcpdump -i eth0 ‘dst qq.com’ 也可以寫成 sudo tcpdump -i eth0 ‘dst host qq.com’

注 : 上述的那個host可以省略

tcpdump支援如下的類型:

1. host:指定主機名或IP位址,例如’host roclinux.cn’或’host 202.112.18.34′

2. net :指定網絡段,例如’arp net 128.3’或’dst net 128.3′

3. portrange:指定端口區域,例如’src or dst portrange 6000-6008′

4. port : 端口

如果我們沒有設定過濾類型,那麼預設是host。

  • 隻抓udp的包

    sudo tcpdump -i eth0 ‘udp’

tcpdump具有根據網絡包的協定來進行過濾的能力,我們還可以把udp改為ether、ip、ip6、arp、tcp、rarp等
  • 隻抓目的機器的某個端口的包(比如隻抓baidu.com的53或者80端口的包)

    sudo tcpdump -i eth0 ‘dst baidu.com and (dst port 53 or dst port 80)’

  • 通過eth0網卡的,且來源是qq.com伺服器或者目标是qq.com伺服器的網絡包

    sudo tcpdump -i eth0 ‘host qq.com’

  • 通過eth0網卡的,且qq.com和baidu.com之間通訊的網絡包,或者qq.com和sina.cn之間通訊的網絡包

    tcpdump -i eth0 ‘host qq.com and (baidu.com or sina.cn)’

  • 擷取和baidu.com之間建立TCP三向交握中第一個網絡包,即帶有SYN标記位的網絡包

    sudo tcpdump -i eth0 ‘tcp[tcpflags] & tcp-syn != 0 and dst host baidu.com’

注 :

因為用proto [ expr : size]文法在寫過濾表達式時,你需要把協定格式完全背在腦子裡,才能把表達式寫對。可這對大多數人來說,可能有些困難。為了讓tcpdump工具更人性化一些,有一些常用的偏移量,可以通過一些名稱來代替,比如icmptype表示ICMP協定的類型域、icmpcode表示ICMP的code域,tcpflags則表示TCP協定的标志字段域。

更進一步的,對于ICMP的類型域,可以用這些名稱具體指代:icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply。

而對于TCP協定的标志字段域,則可以細分為tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg。

輸出内容解釋

[email protected]:~$ sudo tcpdump -i eth0 'host baidu.com'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
:: IP  > .http: Flags [S], seq , win , options [mss ,sackOK,TS val  ecr ,nop,wscale ], length 
:: IP .http > : Flags [S.], seq , ack , win , options [mss ,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale ], length 
:: IP  > .http: Flags [.], ack , win , length 
:: IP  > .http: Flags [P.], seq :, ack , win , length 
:: IP .http > : Flags [.], ack , win , length 
:: IP .http > : Flags [P.], seq :, ack , win , length 
:: IP  > .http: Flags [.], ack , win , length 
:: IP .http > : Flags [P.], seq :, ack , win , length 
:: IP  > .http: Flags [.], ack , win , length 
:: IP .http > : Flags [P.], seq :, ack , win , length 
:: IP  > .http: Flags [.], ack , win , options [nop,nop,sack  {:}], length 
:: IP  > .http: Flags [.], ack , win , length 
:: IP .http > : Flags [.], ack , win , length 
:: IP  > .http: Flags [.], ack , win , length 
           
Linux常用指令筆記整理之tcpdump

繼續閱讀