【協議分析】Wireshark 過濾表達式實例

Wireshark 過濾表達式實例

 
一、wireshark基本的語法
字符
\d          0-9的數字
\D          \d的補集(以因此字符爲全集,下同),即全部非數字的字符
\w          單詞字符,指大小寫字母、0-9的數字、下劃線
\W          \w的補集
\s          空白字符,包括換行符 \n、回車符\r、製表符\t、垂直製表符\v、換頁符\f
\S          \s的補集 .   除換行符\n外的任意字符。
在Perl中,
「.」能夠匹配新行符的模式被稱做「單行模式」
.*       匹配任意文本,不包括回車(\n)? 。
而,[0x00-0xff]*        匹配任意文本,包括\n
[…]          匹配[]內所列出的全部字符
[^…]          匹配非[]內所列出的字符
----------------------------------------------------------------------------------------
 
二、定位字符  
所表明的是一個虛的字符,它表明一個位置,你也能夠直觀地認爲「定位字符」所表明的是某個字符與字符間的那個微小間隙。
^          表示其後的字符必須位於字符串的開始處
$          表示其前面的字符必須位於字符串的結束處
\b          匹配一個單詞的邊界
\B          匹配一個非單詞的邊界
----------------------------------------------------------------------------------------
 
 
三、重複描述字符
{n}          匹配前面的字符n次
{n,}          匹配前面的字符n次或多於n次
{n,m}          匹配前面的字符n到m次
?          匹配前面的字符0或1次
+          匹配前面的字符1次或多於1次
*          匹配前面的字符0次或式於0次
----------------------------------------------------------------------------------------
 
 
四、and or 匹配
and 符號 並
or  符號 或
例如: tcp and tcp.port==80 tcp or udp
----------------------------------------------------------------------------------------
 
 
五、wireshark過濾匹配表達式實例
5.一、搜索按條件過濾udp的數據段payload(數字8是表示udp頭部有8個字節,數據部分從第9個字節開始udp[8:])
udp[8]==14        (14是十六進制0x14)匹配payload第一個字節0x14的UDP數據包 udp[8:2]==14:05 能夠udp[8:2]==1405,且只支持2個字節連續,三個以上須使用冒號:分隔表示十六進制。 (至關於 udp[8]==14 and udp[9]==05,1405是0x1405) udp[8:3]==22:00:f7 可是不能夠udp[8:3]==2200f7 udp[8:4]==00:04:00:2a,匹配payload的前4個字節0x0004002a 而udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP數據包,不必定是從第一字節匹配。 udp[8:4] matches "\\x14\\x05\\x07\\x18" udp[8:] matches "^\\x14\\x05\\x07\\x18\\x14"
 
 
5.二、搜索按條件過濾tcp的數據段payload(數字20是表示tcp頭部有20個字節,數據部分從第21個字節開始tcp[20:])
tcp[20:] matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a" 等同http matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a" tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a" tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*Host: (.*?)pplive(.*?)\\x0d\\x0a" tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*Host: " tcp[20:] matches "^POST / HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*\\x0d\\x0aConnection: Keep-Alive\\x0d\\x0a\\x0d\\x0a" 檢測SMB頭的smb標記,指明smb標記從tcp頭部第24byte的位置開始匹配。 tcp[24:4] == ff:53:4d:42 檢測SMB頭的smb標記,tcp的數據包含十六進制ff:53:4d:42,從tcp頭部開始搜索此數據。 tcp contains ff:53:4d:42 tcp matches "\\xff\\x53\\x4d\\x42" 檢測tcp含有十六進制01:bd,從tcp頭部開始搜索此數據。 tcp matches "\\x01\\xbd" 檢測MS08067的RPC請求路徑 tcp[179:13] == 00:5c:00:2e:00:2e:00:5c:00:2e:00:2e:00                   \      .     .     \     .     .
 
 
5.三、其餘
http.request.uri matches ".gif$" 匹配過濾HTTP的請求URI中含有".gif"字符串,而且以.gif結尾(4個字節)的http請求數據包($是正則表達式中的結尾表示符) 注意區別:http.request.uri contains ".gif$" 與此不一樣,contains是包含字符串".gif$"(5個字節)。匹配過濾HTTP的請求URI中含有".gif$"字符串的http請求數據包(這裏$是字符,不是結尾符) eth.addr[0:3]==00:1e:4f 搜索過濾MAC地址前3個字節是0x001e4f的數據包。
相關文章
相關標籤/搜索