Linux - Tcpdump命令

襲冷發表於2018-05-30
一、說明
   
是一個用於抓取網路資料包並輸出的工具,命令格式如下:
       tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
               [ -C file_size ] [ -F expr_file ]
               [ -i interface ] [ -m module ] [ -M secret ]
               [ -r read_file ] [ -s snaplen ] [ -T type ] [ -w save_file ]
               [ -W file_count ]
               [ -E spi@ipaddr algo:secret,...  ]
               [ -y datalinktype ] [ -Z user ]
               [ expression ]

二、選項
    -A     以ASCII格式列印出所有資訊包並將鏈路層的頭最小化。 
    -c     在收到指定的數量的資料包後退出
    -C     將資料包以一百萬位元組為單位的file_size指定的大小寫入連續的多個檔案中
    -d     將匹配的資料包的程式碼以可讀的形式輸出到標準輸出
    -dd    將匹配的資料包的程式碼以c語言程式段的格式給出 
    -ddd   將匹配的資料包的程式碼以十進位制的形式給出 
    -D     列印出系統中所有tcpdump可以抓取包的網路介面列表 
    -e     在輸出行列印出資料鏈路層的頭部資訊 
    -E     用 spi@ipaddr algo:secret 解密那些以addr作為地址並且包含了安全引數索引值spi的IPsec ESP包 
    -f     以數字而非符號方式顯示外來 IPv4 地址
    -F     從指定的檔案中讀取過濾表示式,忽略命令列中給出的表示式 
    -i     指定監聽的網路介面,可以通過-D檢視 
    -l     使標準輸出變為緩衝行形式,可以把資料匯出到檔案 
    -L     列出網路介面的已知資料鏈路 
    -m     從其指定的Module檔案中匯入SMI MIB模組定義
    -M     如果TCP報文中存在TCP-MD5選項,使用secret作為用於驗證TCP分段中籤名的共享金鑰
    -n     不把網路地址轉換成名稱
    -nn    不把協議和埠號轉換成名稱
    -N     不輸出主機名中的域名部分
    -O     不執行資料包匹配的程式碼優化器 
    -p     不將網路介面設定成混雜模式。 
    -q     只輸出較少的協議資訊一遍快速輸出 
    -r     從指定的檔案中讀取包(這些包一般通過-w選項產生) 
    -S     將Tcp的序列號以絕對值而非相對值的形式輸出
    -s     從每個資料包中讀取最開始的snaplen個位元組,而不是預設的68個位元組
    -T     將監聽到的包直接解釋為type指定型別的報文,常見的型別有rpc和snmp等
    -t     不在每一行中輸出時間戳
    -tt    在每一行中輸出非格式化的時間戳 
    -ttt   在本行和前面一行之間輸出一個時間差
    -tttt  在每一行中輸出由date處理的預設格式的時間戳
    -u     輸出未解碼的NFS控制程式碼 
    -v     輸出一個稍微詳細的資訊,例如在Ip包中可以包括ttl和服務型別的資訊
    -vv    輸出更為詳細的報文資訊
    -w     直接將資料包寫入save_file檔案中,而不是不解析並列印出來
    -W     與-C一起使用以限制建立檔案的數量,達到file_count則開始覆蓋
    -x     以十六進位制顯示每個資訊包,減去其連結級別標題
    -xx    以十六進位制顯示每個資訊包,包括其連結級別標題
    -X     以十六進位制和ASCII顯示每個資訊包,減去其連結級別標題
    -y     設定在將資訊包捕獲到datalinktype時要使用的資料鏈路型別


三、表示式
    表示式用於過濾報文的條件,如果沒有則抓取所有的資料包,表示式有三種型別的關鍵字:
    第一種是關於型別的關鍵字,主要的型別包括 host、net、port,預設為host
    第二種是傳輸方向的關鍵字,主要的方向包括 src、dst、src or dst、src and dst,預設為 src or dst
    第三種是通訊協議的關鍵字,主要的協議包括 wlan、ip、ip6、arp、rarp、decnet、tcp、udp,預設時監聽所有協議


四、輸出內容

[root@xl usr]# tcpdump -e -nn -S -X host 192.168.2.231 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:18:40.804021 00:22:64:2d:35:1c > 00:0c:29:85:0b:14, ethertype IPv4 (0x0800), 
length 74: 192.168.3.43.57889 > 192.168.2.222.8080: S 1808454045:1808454045(0) 
win 5840 <mss 1460,sackOK,timestamp 113878982 0,nop,wscale 7>
        0x0000:  4510 003c 765b 4000 4006 3d3b c0a8 02e7  E..<v[@.@.=;....
        0x0010:  c0a8 02de e221 1f90 6bca d19d 0000 0000  .....!..k.......
        0x0020:  a002 16d0 bc70 0000 0204 05b4 0402 080a  .....p..........
        0x0030:  06c9 a7c6 0000 0000 0103 0307            ............
    第一行:執行tcpdump命令,指定顯示資料鏈路層頭部、不轉換協議和埠號、以絕對值顯示包的INS序列號、以十六進位制和ASCII顯示資料包  
    第二行:提示使用選項-v和-vv,可以看到更全的輸出內容
    第三行:監聽通過eth0這個NIC裝置的網路包,且它的鏈路層是基於乙太網的,要抓的包大小限制是96位元組
    第四行:11:18:40.804021 表示抓包的時、分、秒、微秒;00:22:64:2d:35:1c > 00:0c:29:85:0b:14 表示從mac地址傳送到mac地址的主機;ethertype IPv4 (0x0800) 表示Ethernet幀的協議型別為ipv4(即程式碼為0x0800)
    第五行:length 74 表示以太幀長度為66;192.168.3.43.57889 > 192.168.2.222.8080 表示從ip的埠傳送到ip的埠,>標識傳輸方向; S 建立連線的連線標識;1808454045:1808454045(0) 表示包的順序號是768512且沒有資料,格式為 first:last(n bytes),即包中資料的是從順序號first開始直到last結束的不包括last的n個位元組的使用者資料;
    第六行:win 5840 表示視窗大小為5840位元組;mss 1460 表示由傳送端指明的最大報文段長度,傳送端將不接收超過這個長度的TCP報文段;sackOK 表示傳送端支援並同意使用SACK選擇性確認技術;nop是一個空操作選項, wscale 7 表示傳送端使用的視窗擴大因子為7 

    注:TCP連線標識有 SYN(建立連線)、FIN(關閉連線)、ACK(響應確認)、PSH(資料推送)、RST(連線重置)、URG(緊急置位),當出現SYN和SYN+ACK包時表示客戶端與伺服器端建立了一個連線,當出現PSH包時表示有DATA資料包被傳遞,當出現FIN包或RST包時表示客戶端與伺服器端斷開了連線


五、使用舉例

# 抓取所有和主機192.168.3.43通訊的包含傳送給和接收到的資料包
[root@xl usr]# tcpdump host 192.168.3.43
# 抓取所有與本機的tcp 80埠通訊的資料包
[root@xl usr]# tcpdump udp port 80
# 抓取所有在eth0網路介面上傳送給主機192.168.3.43的資料包
[root@xl usr]# tcpdump -i eth0 dst host 192.168.3.43
# 抓取與主機192.168.3.43的80埠通訊的資料包
[root@xl usr]# tcpdump -i eth0 host 192.168.3.43 and port 80
# 抓取主機192.168.2.222和主機192.168.3.43之外的所有主機通訊的ip包並寫入檔案
[root@xl usr]# tcpdump ip host 192.168.2.222 and ! 192.168.3.43 -w ./target.cap



相關文章