抓包分析工具tcpdump和wireshark


1,安裝使用tcpdumphtml

yum install -y tcpdumpmysql


1.1 tcpdump 參數解析sql

tcpdump簡明用法

    -A 以ASCII格式打印出全部分組,並將鏈路層的頭最小化。 

    -c 在收到指定的數量的分組後,tcpdump就會中止。 

    -C 在將一個原始分組寫入文件以前,檢查文件當前的大小是否超過了參數file_size 中指定的大小。若是超過了指定大小,則關閉當前文件,而後在打開一個新的文件。參數 file_size 的單位是兆字節(是1,000,000字節,而不是1,048,576字節)。 

    -d 將匹配信息包的代碼以人們可以理解的彙編格式給出。 

    -dd 將匹配信息包的代碼以C語言程序段的格式給出。 

    -ddd 將匹配信息包的代碼以十進制的形式給出。 

    -D 打印出系統中全部能夠用tcpdump截包的網絡接口。 

    -e 在輸出行打印出數據鏈路層的頭部信息。 

    -E 用spi@ipaddr algo:secret解密那些以addr做爲地址,而且包含了安全參數索引值spi的IPsec ESP分組。 

    -f 將外部的Internet地址以數字的形式打印出來。 

    -F 從指定的文件中讀取表達式,忽略命令行中給出的表達式。 

    -i 指定監聽的網絡接口。 

    -l 使標準輸出變爲緩衝行形式,能夠把數據導出到文件。 

    -L 列出網絡接口的已知數據鏈路。 

    -m 從文件module中導入SMI MIB模塊定義。該參數能夠被使用屢次,以導入多個MIB模塊。 

    -M 若是tcp報文中存在TCP-MD5選項,則須要用secret做爲共享的驗證碼用於驗證TCP-MD5選選項摘要(詳情可參考RFC 2385)。 

    -b 在數據-鏈路層上選擇協議,包括ip、arp、rarp、ipx都是這一層的。 

    -n 不把網絡地址轉換成名字。 

    -nn 不進行端口名稱的轉換。 

    -N 不輸出主機名中的域名部分。例如,‘nic.ddn.mil‘只輸出’nic‘。 

    -t 在輸出的每一行不打印時間戳。 

    -O 不運行分組分組匹配(packet-matching)代碼優化程序。 

    -P 不將網絡接口設置成混雜模式。 

    -q 快速輸出。只輸出較少的協議信息。 

    -r 從指定的文件中讀取包(這些包通常經過-w選項產生)。 

    -S 將tcp的序列號以絕對值形式輸出,而不是相對值。 

    -s 從每一個分組中讀取最開始的snaplen個字節,而不是默認的68個字節。 

    -T 將監聽到的包直接解釋爲指定的類型的報文,常見的類型有rpc遠程過程調用)和snmp(簡單網絡管理協議;)。 

    -t 不在每一行中輸出時間戳。 

    -tt 在每一行中輸出非格式化的時間戳。 

    -ttt 輸出本行和前面一行之間的時間差。 

    -tttt 在每一行中輸出由date處理的默認格式的時間戳。 

    -u 輸出未解碼的NFS句柄。 

    -v 輸出一個稍微詳細的信息,例如在ip包中能夠包括ttl和服務類型的信息。 

    -vv 輸出詳細的報文信息。 

    -w 直接將分組寫入文件中,而不是不分析並打印出來。

1.2 詳細解讀windows

tcpdump詳細用法

第一種是關於類型的關鍵字,主要包括host,net,port, 例如 host 192.168.0.2,指明 192.168.0.2是一臺主機,
net 10.0.0.0 指明 10.0.0.0是一個網絡地址,port 23 指明端口號是23。若是沒有指定類型,缺省的類型是host.

第二種是肯定傳輸方向的關鍵字,主要包括src , dst ,dst orsrc, dst and src ,這些關鍵字指明瞭傳輸的方向。
舉例說明,src 192.168.0.2 ,指明ip包中源地址是192.168.0.2 , dst net10.0.0.0 指明目的網絡地址是10.0.0.0 。
若是沒有指明方向關鍵字,則缺省是src or dst關鍵字。

第三種是協議的關鍵字,主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分佈式光纖數據接口網上
的特定的網絡協議,實際上它是"ether" 的別名,fddi和ether具備相似的源地址和目的地址,因此能夠將fddi協議
包看成ether的包進行處理和分析。其餘的幾個關鍵字就是指明瞭監聽的包的協議內容。若是沒有指定任何協議,則
tcpdump將會監聽全部協議的信息包。

除了這三種類型的關鍵字以外,其餘重要的關鍵字以下:gateway, broadcast,less,greater,還有三種邏輯運算,取
非運算是 'not ' '! ', 與運算是'and','&&';或運算是'or' ,'││';這些關鍵字能夠組合起來構成強大的組合條件
來知足人們的須要,下面用幾個例子來講明。

1.3 示例緩存

一、默認啓動
    
tcpdump -vv -i eno16777736

普通狀況下,直接啓動tcpdump將監視第一個網絡接口上全部流過的數據包。

二、過濾主機

tcpdump -i eno16777736 host 192.168.1.1                #抓取全部通過eno16777736,目的或源地址是192.168.1.1的網絡數據
tcpdump -i eno16777736 src host 192.168.1.1            #指定源地址,192.168.1.1
tcpdump -i eno16777736 dst host 192.168.1.1            #指定目的地址,192.168.1.1

三、過濾端口

tcpdump -i eno16777736 port 25
tcpdump -i eno16777736 src port 25
tcpdump -i eno16777736 dst port 25

抓取全部通過eno16777736,目的或源端口是25的網絡數據

四、網絡過濾
    
tcpdump -i eno16777736 net 192.168
tcpdump -i eno16777736 src net 192.168
tcpdump -i eno16777736 dst net 192.168

五、協議過濾

tcpdump -i eno16777736 arp
tcpdump -i eno16777736 ip
tcpdump -i eno16777736 tcp
tcpdump -i eno16777736 udp
tcpdump -i eno16777736 icmp

六、經常使用表達式
    
非 : ! or "not" (去掉雙引號) 
且 : && or "and" 
或 : || or "or"


抓取全部通過eno16777736,目的地址是192.168.1.254或192.168.1.200端口是80的TCP數
    
tcpdump -i eno16777736 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

抓取全部通過eno16777736,目標MAC地址是00:01:02:03:04:05的ICMP數據
    
tcpdump -i eno16777736 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

抓取全部通過eno16777736,目的網絡是192.168,但目的主機不是192.168.1.200的TCP數據
    
tcpdump -i eno16777736 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'


tcpdump 的抓包保存到文件的命令參數是-w xxx.cap

    抓eno16777736的包
    tcpdump -i eno16777736 -w /tmp/xxx.cap
    查看抓包文件
    tcpdump -r /tmp/xxx.cap
    
    抓 192.168.0.203的包
    tcpdump -i eno16777736 host 192.168.0.203 -w /tmp/xxx.cap
    抓192.168.0.203的80端口的包
    tcpdump -i eno16777736 host 192.168.0.203 and port 80 -w /tmp/xxx.cap
    抓192.168.0.203的icmp的包
    tcpdump -i eno16777736 host 192.168.0.203 and icmp -w /tmp/xxx.cap
    抓192.168.0.203的80端口和110和25之外的其餘端口的包
    tcpdump -i eno16777736 host 192.168.0.203 and ! port 80 and ! port 25 and ! port 110 -w /tmp/xxx.cap
    抓vlan 1的包
    tcpdump -i eno16777736 port 80 and vlan 1 -w /tmp/xxx.cap
    抓pppoe的密碼
    tcpdump -i eno16777736 pppoes -w /tmp/xxx.cap
    以100m大小分割保存文件, 超過100m另開一個文件
    -C 100m
    抓10000個包後退出
    -c 10000
    後臺抓包, 控制檯退出也不會影響
    nohup tcpdump -i eno16777736 port 110 -w /tmp/xxx.cap &

1.4 實例安全

[root@localhost ~]# tcpdump -i eno16777736  dst host 192.168.0.203  -w /tmp/xxx.cap
tcpdump: listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes

^C21 packets captured

[root@localhost ~]# ll /tmp/xxx.cap 
-rw-r--r-- 1 tcpdump tcpdump 1760 7月  13 14:33 /tmp/xxx.cap
[root@localhost ~]# tcpdump -r /tmp/xxx.cap 
reading from file /tmp/xxx.cap, link-type EN10MB (Ethernet)
14:32:58.145798 IP 192.168.0.201.46824 > 192.168.0.203.http: Flags [R], seq 3390683954, win 0, length 0
14:32:58.945777 IP 192.168.0.201.46828 > 192.168.0.203.http: Flags [S], seq 3069531638, win 29200, options [mss 1460,sackOK,TS val 246238969 ecr 0,nop,wscale 7], length 0
14:32:58.946461 IP 192.168.0.201.46828 > 192.168.0.203.http: Flags [R.], seq 3069531639, ack 3707664099, win 229, options [nop,nop,TS val 0 ecr 246266476], length 0
14:32:59.948016 IP 192.168.0.201.46828 > 192.168.0.203.http: Flags [R], seq 3069531639, win 0, length 0
14:33:00.949073 IP 192.168.0.201.46832 > 192.168.0.203.http: Flags [S], seq 11760599, win 29200, options [mss 1460,sackOK,TS val 246240972 ecr 0,nop,wscale 7], length 0
14:33:00.950145 IP 192.168.0.201.46832 > 192.168.0.203.http: Flags [R.], seq 11760600, ack 2581657852, win 229, options [nop,nop,TS val 0 ecr 246268480], length 0
14:33:02.152084 IP 192.168.0.201.46832 > 192.168.0.203.http: Flags [R], seq 11760600, win 0, length 0
14:33:02.953212 IP 192.168.0.201.46836 > 192.168.0.203.http: Flags [S], seq 3987661143, win 29200, options [mss 1460,sackOK,TS val 246242976 ecr 0,nop,wscale 7], length 0
14:33:02.953731 IP 192.168.0.201.46836 > 192.168.0.203.http: Flags [R.], seq 3987661144, ack 1117892437, win 229, options [nop,nop,TS val 0 ecr 246270483], length 0


2 Wireshark

yum install wireshark* -y
bash

參考 https://www.cnblogs.com/liun1994/p/6142505.html
網絡

2.1 tshark 參數選項:session

捕獲接口:
  -i: -i <interface> 指定捕獲接口,默認是第一個非本地循環接口;
  -f: -f <capture filter> 設置抓包過濾表達式,遵循libpcap過濾語法,這個實在抓包的過程當中過濾,若是是分析本地文件則用不到。
  -s: -s <snaplen> 設置快照長度,用來讀取完整的數據包,由於網絡中傳輸有65535的限制,值0表明快照長度65535,默認也是這個值;
  -p: 以非混合模式工做,即只關心和本機有關的流量。
  -B: -B <buffer size> 設置緩衝區的大小,只對windows生效,默認是2M;
  -y: -y<link type> 設置抓包的數據鏈路層協議,不設置則默認爲-L找到的第一個協議,局域網通常是EN10MB等;
  -D: 打印接口的列表並退出;
  -L 列出本機支持的數據鏈路層協議,供-y參數使用。

捕獲中止選項:
  -c: -c <packet count> 捕獲n個包以後結束,默認捕獲無限個;
  -a: -a <autostop cond.> ... duration:NUM,在num秒以後中止捕獲;
                   filesize:NUM,在numKB以後中止捕獲;
                    files:NUM,在捕獲num個文件以後中止捕獲;
捕獲輸出選項:
  -b <ringbuffer opt.> ... ring buffer的文件名由-w參數決定,-b參數採用test:value的形式書寫;
                 duration:NUM - 在NUM秒以後切換到下一個文件;
                 filesize:NUM - 在NUM KB以後切換到下一個文件;
                 files:NUM - 造成環形緩衝,在NUM文件達到以後;

RPCAP選項:
  remote packet capture protocol,遠程抓包協議進行抓包;
  -A:  -A <user>:<password>,使用RPCAP密碼進行認證;

輸入文件:
  -r: -r <infile> 設置讀取本地文件

處理選項:
  -2: 執行兩次分析
  -R: -R <read filter>,包的讀取過濾器,能夠在wireshark的filter語法上查看;在wireshark的視圖->過濾器視圖,在這一欄點擊表達式,就會列出來對全部協議的支持。
  -Y: -Y <display filter>,使用讀取過濾器的語法,在單次分析中能夠代替-R選項;
  -n: 禁止全部地址名字解析(默認爲容許全部)
  -N: 啓用某一層的地址名字解析。「m」表明MAC層,「n」表明網絡層,「t」表明傳輸層,「C」表明當前異步DNS查找。若是-n和-N參數同時存在,-n將被忽略。若是-n和-N參數都不寫,則默認打開全部地址名字解析。
  -d: 將指定的數據按有關協議解包輸出,如要將tcp 8888端口的流量按http解包,應該寫爲「-d tcp.port==8888,http」;tshark -d. 能夠列出全部支持的有效選擇器。
  
輸出選項:
  -w: -w <outfile|-> 設置raw數據的輸出文件。這個參數不設置,tshark將會把解碼結果輸出到stdout,「-w -」表示把raw輸出到stdout。若是要把解碼結果輸出到文件,使用重定向「>」而不要-w參數。
  -F: -F <output file type>,設置輸出的文件格式,默認是.pcapng,使用tshark -F可列出全部支持的輸出文件類型。
  -V: 增長細節輸出;
  -O: -O <protocols>,只顯示此選項指定的協議的詳細信息。
  -P: 即便將解碼結果寫入文件中,也打印包的概要信息;
  -S: -S <separator> 行分割符
  -x: 設置在解碼輸出結果中,每一個packet後面以HEX dump的方式顯示具體數據。
  -T: -T pdml|ps|text|fields|psml,設置解碼結果輸出的格式,包括text,ps,psml和pdml,默認爲text
  -e: 若是-T fields選項指定,-e用來指定輸出哪些字段;
  -E: -E <fieldsoption>=<value>若是-T fields選項指定,使用-E來設置一些屬性,好比
    header=y|n
    separator=/t|/s|<char>
    occurrence=f|l|a
    aggregator=,|/s|<char>
  -t: -t a|ad|d|dd|e|r|u|ud 設置解碼結果的時間格式。「ad」表示帶日期的絕對時間,「a」表示不帶日期的絕對時間,「r」表示從第一個包到如今的相對時間,「d」表示兩個相鄰包之間的增量時間(delta)。
  -u: s|hms 格式化輸出秒;
  -l: 在輸出每一個包以後flush標準輸出
  -q: 結合-z選項進行使用,來進行統計分析;
  -X: <key>:<value> 擴展項,lua_script、read_format,具體參見 man pages;
  -z:統計選項,具體的參考文檔;tshark -z help,能夠列出,-z選項支持的統計方式。
  
其餘選項:
  -h: 顯示命令行幫助;
  -v: 顯示tshark 的版本信息;

2.2 示例app

//打印http協議流相關信息
tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'
  註釋:
    -s: 只抓取前512字節;
    -i: 捕獲eth0網卡;
    -n: 禁止網絡對象名稱解析;
    -f: 只捕獲協議爲tcp,目的端口爲80;
    -R: 過濾出http.host和http.request.uri;
    -T,-e: 指的是打印這兩個字段;
    -I: 輸出到命令行界面; 
//實時打印當前mysql查詢語句
tshark -s 512 -i eth0 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query
   註釋:
    -R: 過濾出mysql的查詢語句;
//導出smpp協議header和value的例子
tshark -r test.cap -R '(smpp.command_id==0x80000004) and (smpp.command_status==0x0)' -e smpp.message_id -e frame.time -T fields -E header=y >test.txt
   註釋:
    -r: 讀取本地文件,能夠先抓包存下來以後再進行分析;
    -R: smpp...能夠在wireshark的過濾表達式裏面找到,後面會詳細介紹;
    -E: 當-T字段指定時,設置輸出選項,header=y意思是頭部要打印;
    -e: 當-T字段指定時,設置輸出哪些字段;
     >: 重定向;
//統計http狀態
tshark -n -q -z http,stat, -z http,tree
   註釋:
    -q: 只在結束捕獲時輸出數據,針對於統計類的命令很是有用;
    -z: 各種統計選項,具體的參考文檔,後面會介紹,可使用tshark -z help命令來查看全部支持的字段;
       http,stat: 計算HTTP統計信息,顯示的值是HTTP狀態代碼和HTTP請求方法。
       http,tree: 計算HTTP包分佈。 顯示的值是HTTP請求模式和HTTP狀態代碼。
//抓取500個包提取訪問的網址打印出來
tshark -s 0 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l -c 500
   註釋: 
    -f: 抓包前過濾;
    -R: 抓包後過濾;
    -l: 在打印結果以前清空緩存;
    -c: 在抓500個包以後結束;
//顯示ssl data數據
tshark -n -t a -R ssl -T fields -e "ip.src" -e "ssl.app_data"

//讀取指定報文,按照ssl過濾顯示內容
tshark -r temp.cap -R "ssl" -V -T text
  註釋: 
    -T text: 格式化輸出,默認就是text;
    -V: 增長包的輸出;//-q 過濾tcp流13,獲取data內容
tshark -r temp.cap -z "follow,tcp,ascii,13"

//按照指定格式顯示-e
tshark -r temp.cap -R ssl -Tfields -e "ip.src" -e tcp.srcport -e ip.dst -e tcp.dstport

//輸出數據
tshark -r vmx.cap -q -n -t ad -z follow,tcp,ascii,10.1.8.130:56087,10.195.4.41:446 | more
  註釋:
    -t ad: 輸出格式化時間戳;
//過濾包的時間和rtp.seq
tshark  -i eth0 -f "udp port 5004"  -T fields -e frame.time_epoch -e rtp.seq -o rtp.heuristic_rtp:true 1>test.txt
  註釋:
    -o: 覆蓋屬性文件設置的一些值;

//提取各協議數據部分
tshark -r H:/httpsession.pcap -q -n -t ad -z follow,tcp,ascii,71.6.167.142:27017,101.201.42.120:59381 | more
相關文章
相關標籤/搜索