1. 程式人生 > >Linux下tcpdump命令

Linux下tcpdump命令

//系統
# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)
# uname -r
3.10.0-862.el7.x86_64
//如果沒有安裝tcpdump命令,可以yum安裝
# yum -y install tcpdump
//命令格式:
# traceroute [引數] [選項]
//使用示例
//監聽來自ens33網絡卡且通訊協議為ssh(預設22埠)來源於172.16.30.90的資料包資料
# tcpdump -i ens33 -nn 'port 22 and src host 172.16.30.90'

//截獲主機172.16.30.72和主機172.16.30.90或172.16.30.55的通訊
//centos7版本需指定-i引數
# tcpdump -i ens33 host 172.16.30.72 and \(172.16.30.90 or 192.168.1.2\)

//擷取本機的udp協議的ntp(預設123埠)
# tcpdump -i ens33 udp port 123
//使用示例2
//-i 指定網絡卡名稱 -c指定抓包數量 -nn指定以數字形式顯示ip和port
# tcpdump -nn -i ens33 -c 100
//-w 把tcpdump抓到的資料儲存到/tmp/text.cap檔案內(檔案為二進位制檔案,可以用wireshark檢視)
# tcpdump -nn -i ens33 -c 100 -w /tmp/text.cap
//使用tcpdump檢視的命令為
# tcpdump -r /tmp/text.cap
tcpdump 常用選項引數如下:
       -A     資料包內容以ASCII顯示,通常用來抓取網頁的資料包資料.
       -a     試著 把 網路和廣播地址轉換成名稱.
       -c     監聽資料包數,如果沒有帶這個引數tcpdump會不斷的監聽,當收到count報文後退出.
       -d     把編譯過的資料包編碼轉換成可閱讀的格式,並傾倒到標準輸出.
       -dd    把編譯過的資料包編碼轉換成C語言的格式,並傾倒到標準輸出.
       -ddd   把編譯過的資料包編碼轉換成十進位制數字的格式,並傾倒到標準輸出.
       -e     顯示資料鏈路層的資料包.
       -f     用數字顯示網際網路地址.
       -F     指定內含表達方式的檔案.
       -i     監聽的網路介面.
       -l     使用標準輸出列的緩衝區.
       -n     不把主機的網路地址轉換成ip
       -N     不列出域名.
       -O     不將資料包編碼最佳化,這個選項只有當你懷疑優化器有bug時才有用.
       -p     不讓網路介面進入混雜模式.
       -q     快速輸出,僅列出少數的傳輸協議資訊.
       -r     從指定的檔案讀取資料包資料.
       -s     設定每個資料包的大小.
       -T     強制將表達方式所指定的資料包轉譯成設定的資料包型別.目前已知的型別有: rpc (遠端過程呼叫 Remote Procedure Call), rtp
              (實時應用協議 Real-Time Applications protocol), rtcp (實時應用控制協議 Real-Time Applications control  protocol),  vat  (可視音訊工具
              Visual Audio Tool), 和 wb (分散式白板 distributed White Board).
       -S     用絕對而非相對數值列出TCP關聯數.
       -t     禁止顯示時戳標誌.
       -tt    顯示未格式化的時戳標誌.
       -v     詳細顯示指令執行過程. 例如, 顯示IP資料報中的生存週期和服務型別.
       -vv    更詳細顯示指令執行過程. 例如,顯示NFS應答報文的附加域.
       -w     把資料包資料寫入指定的檔案.
       -x     以 16進位制數形式顯示每一個報文(去掉鏈路層報頭後).可以顯示較小的完整報文,否則只顯示snaplen個位元組.
expression表示式:
              用來選擇要轉儲的資料報.如果沒有指定expression , 就轉儲網路的全部報文.否則, 只轉儲相對expression為邏輯為真的資料包報文.
  
              expression 由一個或多個原語(primitive)組成.原語通常由一個標識(id,名稱或數字),和標識前面的一個或多個修飾子(qualifier)組成.修飾子有三種不同的型別:
  
              type   型別修飾子指出標識名稱或標識數字代表什麼型別的東西.可以使用的型別有host,net和port.例如,`host foo', `net128.3', `port 20'.如果不指定型別修飾子, 就使用預設的host . 
              dir    方向修飾子 指出 相對於 標識 的 傳輸方向 (資料是 傳入還是傳出 標識).  可以使用的 方向 有 src, dst, src or dst 和 src  and  dst.
                     例如, `src foo', `dst net 128.3', `src or dst port ftp-data'.  如果 不指定 方向修飾子, 就使用 預設的 src or dst .  對於 `null'
                     鏈路層 (就是說 象 slip 之類的 點到點 協議), 用 inbound 和 outbound 修飾子 指定 所需的 傳輸方向. 
              proto  協議修飾子 要求 匹配 指定的協議. 可以使用的 協議 有: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp  和  udp.
                     例如, `ether src foo', `arp net 128.3', `tcp port 21'.  如果 不指定 協議修飾子, 就使用 所有 符合 型別 的 協議. 例如, `src foo'
                     指 `(ip 或 arp 或 rarp) src foo' (注意後者不符合語法), `net bar' 指 `(ip 或 arp 或 rarp) net bar',  `port 53' 指 `(tcp 或 udp)
                     port 53'. 
              更復雜的過濾器表示式可以通過 and, or 和 not 連線原語來組建. 例如, `host  foo  and  not  port  ftp  and  not  port  ftp-data'.
              允許的 原語 有:
              dst host host
                     如果報文中IP的目的地址域是host, 則邏輯為真.host既可以是地址,也可以是主機名.
  
              src host host
                     如果報文中IP的源地址域是host,則邏輯為真.
  
              host host
                     如果報文中IP的源地址域或者目的地址域是host,則邏輯為真.上面所有的host表示式都可以加上ip,arp,或rarp關鍵字做字首,就象:ip host host
                     它等價於:
                          ether proto \ip and host host
                     如果host是擁有多個IP地址的主機名,它的每個地址都會被查驗.
  
              ether dst ehost
                     如果報文的以太目的地址是ehost,則邏輯為真. Ehost既可以是名字 (/etc/ethers 裡有), 也可以是數字
  
              ether src ehost
                     如果報文的以太源地址是ehost,則邏輯為真.
  
              ether host ehost
                     如果報文的以太源地址或以太目的地址是ehost,則邏輯為真.
  
              gateway host
                     如果報文把host當做閘道器, 則邏輯為真.
                      
              dst net net
                     如果報文的IP目的地址屬於網路號net,則邏輯為真. 
  
              src net net
                     如果報文的IP源地址屬於網路號net,則邏輯為真.
  
              net net
                     如果報文的IP源地址或目的地址屬於網路號net, 則邏輯為真.
  
              net net mask mask
                     如果IP地址匹配指定網路掩碼(netmask)的net,則邏輯為真.本原語可以用src或dst修飾.
  
              net net/len
                     如果IP地址匹配指定網路掩碼的net, 則邏輯為真.
  
              dst port port
                     如果報文是ip/tcp或ip/udp, 並且目的埠是port, 則邏輯為真.
  
              src port port
                     如果報文的源埠號是port,則邏輯為真.
  
              port port
                     如果報文的源埠或目的埠是port,則邏輯為真.
  
              less length
                     如果報文的長度小於等於length,則邏輯為真. 它等同於:len <= length.
  
              greater length
                     如果報文的長度大於等於length,則邏輯為真. 它等同於:len >= length.
  
              ip proto protocol
                     如果報文是IP資料報, 其內容的協議型別是protocol,則邏輯為真.
  
              ether broadcast
                     如果報文是以太廣播報文,則邏輯為真.關鍵字ether是可選的.
  
              ip broadcast
                     如果報文是IP廣播報文,則邏輯為真.Tcpdump檢查全0和全1廣播約定,並且檢查本地的子網掩碼.
  
              ether multicast
                     如果報文是以太多目傳送報文(multicast),則邏輯為真. 關鍵字ether是可選的.
  
              ip multicast
                     如果報文是IP多目傳送報文,則邏輯為真.

☞轉載來源