Wireshark 基本語法凭疮,基本使用方法退子,及包過慮規(guī)則:
1.過濾IP吃嘿,如來源IP或者目標IP等于某個IP
例子:
ip.src?eq?192.168.1.107?or?ip.dst?eq?192.168.1.107
或者
ip.addr?eq?192.168.1.107?//?都能顯示來源IP和目標IP
linux上運行的wireshark圖形窗口截圖示例,其他過慮規(guī)則操作類似姨拥,不再截圖润歉。
ip.src eq 10.175.168.182
截圖示例:
提示: 在Filter編輯框中模狭,收入過慮規(guī)則時,如果語法有誤踩衩,框會顯紅色嚼鹉,如正確,會是綠色驱富。
2.過濾端口
例子:
tcp.port?eq?80?//?不管端口是來源的還是目標的都顯示
tcp.port?==?80
tcp.port?eq?2722
tcp.port?eq?80?or?udp.port?eq?80
tcp.dstport?==?80?//?只顯tcp協(xié)議的目標端口80
tcp.srcport?==?80?//?只顯tcp協(xié)議的來源端口80
udp.port?eq?15000
過濾端口范圍
tcp.port?>=?1?and?tcp.port?<=?80
3.過濾協(xié)議
例子:
tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
oicq
bootp
等等
排除arp包锚赤,如!arp???或者???not?arp
4.過濾MAC
太以網(wǎng)頭過濾
eth.dst?==?A0:00:00:04:C5:84?//?過濾目標mac
eth.src?eq?A0:00:00:04:C5:84?//?過濾來源mac
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
eth.addr?eq?A0:00:00:04:C5:84?//?過濾來源MAC和目標MAC都等于A0:00:00:04:C5:84的
less?than?小于?<?lt
小于等于?le
等于?eq
大于?gt
大于等于?ge
不等?ne
5.包長度過濾
例子:
udp.length?==?26?這個長度是指udp本身固定長度8加上udp下面那塊數(shù)據(jù)包之和
tcp.len?>=?7???指的是ip數(shù)據(jù)包(tcp下面那塊數(shù)據(jù)),不包括tcp本身
ip.len?==?94?除了以太網(wǎng)頭固定長度14,其它都算是ip.len,即從ip本身到最后
frame.len?==?119?整個數(shù)據(jù)包長度,從eth開始到最后
eth?—>?ip?or?arp?—>?tcp?or?udp?—>?data
6.http模式過濾
例子:
http.request.method?==?“GET”
http.request.method?==?“POST”
http.request.uri?==?“/img/logo-edu.gif”
http?contains?“GET”
http?contains?“HTTP/1.”
//?GET包
http.request.method?==?“GET”?&&?http?contains?“Host:?“
http.request.method?==?“GET”?&&?http?contains?“User-Agent:?“
//?POST包
http.request.method?==?“POST”?&&?http?contains?“Host:?“
http.request.method?==?“POST”?&&?http?contains?“User-Agent:?“
//?響應(yīng)包
http?contains?“HTTP/1.1?200?OK”?&&?http?contains?“Content-Type:?“
http?contains?“HTTP/1.0?200?OK”?&&?http?contains?“Content-Type:?“
一定包含如下
Content-Type:
7.TCP參數(shù)過濾
tcp.flags?顯示包含TCP標志的封包。
tcp.flags.syn?==?0x02?????顯示包含TCP?SYN標志的封包褐鸥。
tcp.window_size?==?0?&&?tcp.flags.reset?!=?1
8.包內(nèi)容過濾
-----------------------------------------------
tcp[20]表示從20開始线脚,取1個字符
tcp[20:]表示從20開始,取1個字符以上
注: 些兩虛線中的內(nèi)容在我的wireshark(linux)上測試未通過叫榕。
--------------------------------------------------
tcp[20:8]表示從20開始浑侥,取8個字符
tcp[offset,n]
udp[8:3]==81:60:03?//?偏移8個bytes,再取3個數(shù),是否與==后面的數(shù)據(jù)相等晰绎?
udp[8:1]==32???如果我猜的沒有錯的話锭吨,應(yīng)該是udp[offset:截取個數(shù)]=nValue
eth.addr[0:3]==00:06:5B
例子:
判斷upd下面那塊數(shù)據(jù)包前三個是否等于0x20?0x21?0x22
我們都知道udp固定長度為8
udp[8:3]==20:21:22
判斷tcp那塊數(shù)據(jù)包前三個是否等于0x20?0x21?0x22
tcp一般情況下,長度為20,但也有不是20的時候
tcp[8:3]==20:21:22
如果想得到最準確的寒匙,應(yīng)該先知道tcp長度
matches(匹配)和contains(包含某字符串)語法
ip.src==192.168.1.107?and?udp[8:5]matches“\\x02\\x12\\x21\\x00\\x22″------???--------
ip.src==192.168.1.107?and?udpcontains02:12:21:00:22
ip.src==192.168.1.107?and?tcp?contains?“GET”
udp?contains?7c:7c:7d:7d?匹配payload中含有0x7c7c7d7d的UDP數(shù)據(jù)包,不一定是從第一字節(jié)匹配。
--------------------------------------不理解Begin------------------------------------------------------------------------------------
例子:
得到本地qq登陸數(shù)據(jù)包(判斷條件是第一個包==0x02,第四和第五個包等于0x00x22,最后一個包等于0x03)
0x02?xx?xx?0x00?0x22?…?0x03
如何拼寫過慮條件锄弱?考蕾??
udp[11:2]==00:00?表示命令編號為00:00
udp[11:2]==00:80?表示命令編號為00:80
當(dāng)命令編號為00:80時会宪,QQ號碼為00:00:00:00
得到msn登陸成功賬號(判斷條件是”USR?7?OK?“,即前三個等于USR肖卧,再通過兩個0x20,就到OK,OK后面是一個字符0x20,后面就是mail了)
USR?xx?OK?mail@hotmail.com
正確
msnms?and?tcp?and?ip.addr==192.168.1.107?and?tcp[20:]?matches?“^USR\\x20[\\x30-\\x39]+\\x20OK\\x20[\\x00-\\xff]+”
-------------------------------------不理解End---------------------------------------------------------------------------------------
9.dns模式過濾
10.DHCP
注意:DHCP協(xié)議的檢索規(guī)則不是dhcp/DHCP掸鹅, 而是bootp
以尋找偽造DHCP服務(wù)器為例塞帐,介紹Wireshark的用法。在顯示過濾器中加入過濾規(guī)則巍沙,
顯示所有非來自DHCP服務(wù)器并且bootp.type==0x02(Offer/Ack/NAK)的信息:
bootp.type==0x02?and?not?ip.src==192.168.1.1
11.msn
msnms?&&?tcp[23:1]?==?20?//?第四個是0x20的msn數(shù)據(jù)包
msnms?&&?tcp[20:1]?>=?41?&&?tcp[20:1]?<=?5A?&&?tcp[21:1]?>=?41?&&?tcp[21:1]?<=?5A?&&?tcp[22:1]?>=?41?&&?tcp[22:1]?<=?5A
msnms?&&?tcp[20:3]==”USR”?//?找到命令編碼是USR的數(shù)據(jù)包
msnms?&&?tcp[20:3]==”MSG”?//?找到命令編碼是MSG的數(shù)據(jù)包
tcp.port?==?1863?||?tcp.port?==?80
如何判斷數(shù)據(jù)包是含有命令編碼的MSN數(shù)據(jù)包?
1)端口為1863或者80,如:tcp.port?==?1863?||?tcp.port?==?80
2)數(shù)據(jù)這段前三個是大寫字母,如:
tcp[20:1]?>=?41?&&?tcp[20:1]?<=?5A?&&?tcp[21:1]?>=?41?&&?tcp[21:1]?<=?5A?&&?tcp[22:1]?>=?41?&&?tcp[22:1]?<=?5A
3)第四個為0x20,如:tcp[23:1]?==?20
4)msn是屬于TCP協(xié)議的,如tcp
MSN?Messenger?協(xié)議分析
http://blog.csdn.net/Hopping/archive/2008/11/13/3292257.aspx
MSN?協(xié)議分析
http://blog.csdn.net/lzyzuixin/archive/2009/03/13/3986597.aspx
更詳細的說明
<>
http://www.csna.cn/viewthread.php?tid=14614
Wireshark?主界面的操作菜單中英對比
http://www.csna.cn/viewthread.php?tid=9645&extra=page=1
如下內(nèi)容轉(zhuǎn)自:http://www.csna.cn/viewthread.php?tid=14614
類似正則表達式的規(guī)則葵姥。
1、wireshark基本的語法字符
\d??????????0-9的數(shù)字
\D??????????\d的補集(以所以字符為全集句携,下同)榔幸,即所有非數(shù)字的字符
\w??????????單詞字符,指大小寫字母矮嫉、0-9的數(shù)字削咆、下劃線
\W??????????\w的補集
\s??????????空白字符,包括換行符\n蠢笋、回車符\r拨齐、制表符\t、垂直制表符\v昨寞、換頁符\f
\S??????????\s的補集
.??????????除換行符\n外的任意字符瞻惋。?在Perl中,“.”可以匹配新行符的模式被稱作“單行模式”
.*???????匹配任意文本编矾,不包括回車(\n)??熟史。?而,[0x00-0xff]*????????匹配任意文本,包括\n
[…]??????????匹配[]內(nèi)所列出的所有字符
[^…]??????????匹配非[]內(nèi)所列出的字符
—————————————————————————————-
2窄俏、定位字符??所代表的是一個虛的字符蹂匹,它代表一個位置,你也可以直觀地認為“定位字符”所代表的是某個字符與字符間的那個微小間隙凹蜈。
^??????????表示其后的字符必須位于字符串的開始處
$??????????表示其前面的字符必須位于字符串的結(jié)束處
\b??????????匹配一個單詞的邊界
\B??????????匹配一個非單詞的邊界
—————————————————————————————-
3限寞、重復(fù)描述字符
{n}??????????匹配前面的字符n次
{n,}??????????匹配前面的字符n次或多于n次
{n,m}??????????匹配前面的字符n到m次
???????????匹配前面的字符0或1次
+??????????匹配前面的字符1次或多于1次
*??????????匹配前面的字符0次或式于0次
—————————————————————————————-
4、and?or?匹配
and?符號?并
or??符號?或
例如:
tcp?and?tcp.port==80
tcp?or?udp
—————————————————————————————-
5仰坦、wireshark過濾匹配表達式實例
5.1履植、搜索按條件過濾udp的數(shù)據(jù)段payload(數(shù)字8是表示udp頭部有8個字節(jié),數(shù)據(jù)部分從第9個字節(jié)開始udp[8:])
udp[8]==14????????(14是十六進制0x14)匹配payload第一個字節(jié)0x14的UDP數(shù)據(jù)包
udp[8:2]==14:05?可以udp[8:2]==1405悄晃,且只支持2個字節(jié)連續(xù)玫霎,三個以上須使用冒號:分隔表示十六進制凿滤。?(相當(dāng)于?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個字節(jié)0x0004002a
而udp?contains?7c:7c:7d:7d?匹配payload中含有0x7c7c7d7d的UDP數(shù)據(jù)包庶近,不一定是從第一字節(jié)匹配翁脆。
udp[8:4]?matches?“\\x14\\x05\\x07\\x18″
udp[8:]?matches?“^\\x14\\x05\\x07\\x18\\x14″
5.2、搜索按條件過濾tcp的數(shù)據(jù)段payload(數(shù)字20是表示tcp頭部有20個字節(jié)鼻种,數(shù)據(jù)部分從第21個字節(jié)開始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的數(shù)據(jù)包含十六進制ff:53:4d:42罢缸,從tcp頭部開始搜索此數(shù)據(jù)。
tcp?contains?ff:53:4d:42
tcp?matches?“\\xff\\x53\\x4d\\x42″
檢測tcp含有十六進制01:bd,從tcp頭部開始搜索此數(shù)據(jù)投队。
tcp?matches?“\\x01\\xbd”
檢測MS08067的RPC請求路徑
tcp[179:13]?==?00:5c:00:2e:00:2e:00:5c:00:2e:00:2e:00
\??????.?????.?????\?????.?????.
5.3枫疆、其他
http.request.uri?matches?“.gif$”?匹配過濾HTTP的請求URI中含有”.gif”字符串,并且以.gif結(jié)尾(4個字節(jié))的http請求數(shù)據(jù)包($是正則表達式中的結(jié)尾表示符)
注意區(qū)別:http.request.uri?contains?“.gif$”?與此不同蛾洛,contains是包含字符串”.gif$”(5個字節(jié))养铸。匹配過濾HTTP的請求URI中含有”.gif$”字符串的http請求數(shù)據(jù)包(這里$是字符,不是結(jié)尾符)
eth.addr[0:3]==00:1e:4f?搜索過濾MAC地址前3個字節(jié)是0x001e4f的數(shù)據(jù)包轧膘。
視頻鏈接:http://edu.aqniu.com/course/317