wireshark 表示式備忘錄

2022-01-17 01:23:20 字數 3530 閱讀 6347

wireshark分兩種表示式,一種是捕獲表示式,這個是在捕獲時用的,根據表示式判斷是否捕獲;

另一種是顯示表示式,是針對捕獲後的包進行過濾。

二者支援的語法不完全一致。

1、埠號為8080或9080,或ip為a或b

tcp port 8080 or tcp port 9080 or host 10.45.4.46 or host 192.168.19.120
2、tcp包,主機為a

src or dst  host 10.15.4.46 and tcp
3、捕獲兩個ip主機間的通訊

一開始我是這麼寫的,分別捕獲兩個方向上的流量,後面感覺這也太冗餘了:

(src host 192.168.17.1  and dst host 192.168.17.128) and (dst host 192.168.17.1  and src host 192.168.17.128 and tcp port 6379) and tcp port 6379
於是嘗試了以下的表示式,證明是沒問題的:

host 192.168.17.1  and  host 192.168.17.128 and tcp port 6379
4、乙個重要發現

在本地虛擬機器搭建redis-sentinel集群後,想抓取三颱linux主機間的流量,想著 wireshark 只能抓本機的包,沒想到其實可以用下面的方法來抓包:

抓虛擬機器虛擬出來的網絡卡上的流量即可。

3、抓http post包

tcp[20:2]=0x504f
其實,捕獲表示式預設支援的協議裡,是不支援http這種應用層協議的。

好了,如果說,我想抓post請求的http,應該怎麼辦呢,只要捕獲表示式裡面指定tcp頭結束後的前兩個位元組為50 4f(對應「po」)

則可以知道,這個就是post請求。

那這個怎麼用表示式來表達呢?

interesting parts of a tcp header

******************************===

tcp[0:2] source port

tcp[2:2] destination port

tcp[4:4] sequence number

tcp[8:4] acknowledgement number

tcp[12] header length

tcp[13] tcp flags

tcp[14:2] window size

tcp[16:2] checksum

tcp[18:2] urgent pointer

tcp[20..60] options or data

我對照著抓包理解了下,

tcp[startindex:length],應該就是startindex表示tcp頭的第幾個位元組,從0開始。

後面冒號後面的是長度。

比如tcp[2:2] destination port 意思是從陣列索引2開始,長度為2個位元組的部分,就對應了目的埠。

所以,抓http的post,就應該是:

tcp[20:2]=0x504f
4、抓http get請求

tcp[20:2]=0x4745
5、http響應

發現個問題。上面的只能抓請求,卻不能抓響應內容。

只能看看響應包的特徵了:

原來,響應包的頭兩個位元組為ht啊,(0x4854)。

那麼,表示式看來可以這樣寫:

tcp[20:2]=0x4854
6、抓取http請求和響應(get和post方法)

tcp[20:2]=0x4745   or tcp[20:2]=0x504f or tcp[20:2]=0x4854
表示式這個,可以參考:

以上第二章,3,4,5,6點,都是假設tcp的首部固定為20位元組。那麼20位元組以後,肯定就是資料部分了。

但是,請看下圖:

看完上面,再看下面,首部欄位只佔了高4位,從下圖看出來,整個位元組的十六進製制為「50」,換成二進位制為01010000:

01010000,我們將其右移4位,變成0101.(換成十進位制為5)。

因為該處記錄的是tcp報名頭的長度,是乙個偏移量,單位為4位元組(1段),所以我們用長度×4,就能計數出整個個tcp頭的位元組了。

所以就是5*4=20位元組。

那麼,我們表示式可以這麼寫:

( tcp[12] >> 4 ) << 2,左移四位,右移兩位,最後就是左移兩位。就獲取到資料開始的位置。

彙總下,

tcp[(tcp[12]>>2)]= 0x4745

tcp[(tcp[12]>>2)]= 0x504f
tcp[(tcp[12]>>2):2]=0x4745 or tcp[(tcp[12]>>2):2]=0x504f or tcp[(tcp[12]>>2):2]=0x4854

如果你和我一樣,拿著上面第三點的表示式去抓包,可能會發現下面的情況:

先說我們期待的正確的結果是什麼樣的:

但是,我發現結果是下面這樣的:

意思就是,第7個包,即上圖,雖然顯示為tcp,但是實際上,它的tcp首部後,跟著的內容就是http的內容。

這又是怎麼回事?

這裡長話短說,因為這裡,http協議採用了chunk傳輸。

具體的內容可以參考:

1、http請求且ip位址為a或者b

http &&( ip.addr == 10.15.4.46 or ip.addr == 192.168.19.120)
1.1 請求源位址為a

ip.src == 10.15.4.46
2、http請求且埠號為9080

備忘錄 cron表示式詳解

乙個cron表示式有至少6個 也可能7個 有空格分隔的時間元素。按順序依次為 秒 0 59 分鐘 0 59 小時 0 23 天 0 31 月 0 11 星期 1 7 1 sun 或 sun,mon,tue,wed,thu,fri,sat 年份 1970 2099 其中每個元素可以是乙個值 如6 乙個...

正規表示式備忘錄

1 匹配除換行符以外的任意字元 w 匹配字母或數字或下劃線或漢字 s 匹配任意的空白符 d 匹配任意的數字,例如 d表示前面的數字連續出現2次,即2個數字。b 匹配單詞的開始或結束,也就是單詞的分界處,它只匹配乙個字元位置。匹配字串的開始 匹配字串的結束 2 表匹配次數的符號。重複零次或更多次 它代...

正規表示式備忘錄

說明 匹配除換行符以外的任意字元 w 匹配字母或數字或下劃線或漢字 s 匹配任意的空白符 d 匹配數字 b 匹配單詞的開始或結束 匹配字串的開始 匹配字串的結束 重複零次或更多次 重複一次或更多次 重複零次或一次 重複n次 重複n次或更多次 重複n到m次 語法 說明 w 匹配任意不是字母,數字,下劃...