<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • tcpdump抓包命令

    目錄:

    • 命令格式
    • 選項
    • expression表達式
    • 示例

     

    【命令格式】

    man手冊顯示如下

     1 tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
     2                [ -c count ]
     3                [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
     4                [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
     5                [ --number ] [ -Q|-P in|out|inout ]
     6                [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
     7                [ -W filecount ]
     8                [ -E spi@ipaddr algo:secret,...  ]
     9                [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
    10                [ --time-stamp-precision=tstamp_precision ]
    11                [ --immediate-mode ] [ --version ]
    12                [ expression ]

     

    【選項】

    -A        以ASCII碼打印報文(不包括鏈路層的頭),方便分析網頁
    -c        抓取多少數據包后退出
    -C        用于判斷-w選項寫入將報文寫入的文件大小是否超過此值,如果超過就新建文件(文件名后綴1、2、3遞增)
    -d        將匹配信息包的編譯代碼以人類易讀的方式輸出至stdout
    -dd       將匹配信息包的代碼作為C語言程序段格式給出
    -ddd      將匹配信息包的代碼以十進制格式給出
    -D        列出當前可用于抓包的網卡名稱和對應編號。網卡名稱和對應編號可用于-i選項
    -e        打印鏈路層的頭部信息,如MAC地址
    -f        以數字形式打印外部ip地址
    -F        從文件中讀取過濾表達式,忽略命令行上的其它表達式
    -G        每隔多少秒重新存儲數據包至文件(-w選項指定的文件,需帶時間),用法如tcpdump  -i ens35 -G 3 -w  packets_%H%M%S.pcap
    -i        抓取指定網卡的數據流。若不指定,則使用最小編號(-D)的網卡;any參數抓取所有網卡的數據流
    -K        不嘗試計算IP、TCP、UDP校驗和
    -l        使標準輸出變為緩沖形式(小寫L);tcpdump -l | tee dat或者tcpdump -l > dat & tail -f dat,實現邊寫入文件邊標準輸出
    -L        列出數據連接類型
    -n        顯示ip而不是主機名
    -nn       顯示端口號,而不是端口名
    -N        不列出全域名
    -#        打印數據包的行號
    -p        非混雜模式,不能與host或broadcast一起使用
    -q        快速輸出,顯示較少信息
    -Q|-P     選擇抓取某個方向的數據包,參數可以是in、out、inout(默認)
    -r        從文件中讀取數據包
    -S        使用絕對值,而非相對值,打印tcp序列號
    -s        抓到每一個數據包的截取字節數,默認68字節。參數0表示不截斷,抓取完整數據包。
    -T        將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網絡管理協議)
    -t        不打印時間戳
    -tt       打印時間戳秒數,自1970/0/0 00:00:00開始
    -ttt      打印當前行和上一行的時間差
    -tttt     打印標準時間戳格式,如2019-06-21 14:10:49.314665
    -ttttt    打印當前行和第一行的時間差
    -v        打印比較詳細的信息
    -vv       打印更加詳細的信息
    -vvv      打印非常詳細的信息
    -w        將數據包寫入文件中,同時能使用-r選項恢復打印
    -X        輸出包的頭部信息,以16進制和ASCII兩種方式同時輸出
    -XX       詳細輸出包的頭部信息,以16進制和ASCII兩種方式同時輸出
    expression    過濾表達式,篩選輸出的數據包

     

    【expression表達式】

    tcpdump表達式由一個或多個"單元"組成,每個單元一般包含ID的修飾符和一個ID(數字或名稱)
     
    基本格式為:proto    dir    type
     
    三種修飾符:
    proto:協議類型
    常用的協議有tcp/udp/arp/ip/ether/icmp等。
    若未給定協議類型,則匹配所有可能的類型。例如"tcp port 21","udp portrange 7000-7009";
     
    dir:指定ID的方向
    可以給定的值包括src/dst/src or dst/src and dst,默認為src or dst。
    例如,"src foo"表示源主機為foo的數據包,"dst net 128.3"表示目標網絡為128.3的數據包,"src or dst port 22"表示源或目的端口為22的數據包;
     
    type:指定ID的類型
    可以給定的值有host/net/port/portrange。例如"host foo","net 128.3","port 20","portrange 6000-6008"。默認的type為host;
     
    除了修飾符和ID組成表達式單元,還有關鍵字表達式單元(gateway,broadcast,less,greater)和算術表達式
     
    表達式單元之間可以使用操作符" and / && / or / || / not / ! "進行連接,如"host foo and not port ftp and not port ftp-data"
     
    同樣的修飾符可省略,"tcp dst port ftp or ftp-data or domain"與"tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain"意義相同
     
    使用括號"()"可以改變表達式的優先級,但需要注意的是括號會被shell解釋,所以應該使用反斜線"\"轉義為"\(\)",在需要的時候,還需要包圍在引號中。
     
    常用端口和名字的對應關系可在linux系統中的/etc/services文件中找到

     

    【示例】

    查詢端口ens32的數據包

    # tcpdump -i ens32 -w ens32.pcap

    查詢所有端口數據包,并寫入文件

    # tcpdump -i any -w any.pcap

    邊顯示邊寫入文件

    # tcpdump -i ens32 -l |tee ens32.pcap

    抓取與132服務器交互的數據包

    # tcpdump -i ens35 -q -n -nn net 192.168.237.132

    抓取來自132的數據包(默認會抓取src or dst)

    # tcpdump -i ens35 -q -n -nn src host 192.168.237.132
    # tcpdump -i ens35 -q -n -nn src net 192.168.237.132

    抓取與132服務器交互的數據包,但排除22端口

    # tcpdump -i ens35 -q -n -nn net 192.168.237.132  and not port 22

    抓取端口80上與132服務器交互的數據包

    # tcpdump -i ens35 -q -n -nn -tttt net 192.168.237.132 and tcp port 80

    抓取端口范圍10-80上來自132的數據包,同時排除22端口

    # tcpdump -i ens35 -q -n -nn src net 192.168.237.132 and tcp portrange 10-80 and not port 22

    Tips:proto協議不能修飾host和net,只能修飾port或portrange

     

    posted @ 2019-06-23 16:13  wuenwuen  閱讀(1534)  評論(0編輯  收藏  舉報
    国产美女a做受大片观看