上一篇介紹了Mac下Charles的使用电抚,之前都是使用青花瓶截取的數(shù)據(jù)匈勋,今天在新的公司用的時候發(fā)現(xiàn)電腦打開charles若皱,手機設(shè)置電腦IP及端口以后出現(xiàn)不能上網(wǎng)的問題兔毙,可能是WIFI安全驗證的問題运吓,今天又不得不拿起以前用的WireShark渴邦。
Charles是一個非常輕量的軟件,它不是監(jiān)控網(wǎng)卡上所有的網(wǎng)絡(luò)連接拘哨,而只監(jiān)控特定端口(默認是8888端口)的網(wǎng)絡(luò)連接谋梭,而且一般只能監(jiān)控GET/POST之類的http請求,而Wireshark是一個更加全面的數(shù)據(jù)流截取工具倦青,它不僅能監(jiān)測到http請求瓮床,還能監(jiān)控TCP和UDP請求,基本所有的接口都都能監(jiān)控到。感覺它的缺點也在于數(shù)據(jù)量龐大隘庄,如果不進行篩選踢步,很難定位到需要的信息。
一丑掺、下載WireShark
直接在網(wǎng)頁或應(yīng)用市場下載安裝即可
二获印、終端操作,添加監(jiān)控
想抓iphone的數(shù)據(jù)街州,首先需要讓iphone數(shù)據(jù)通過mac才行兼丰。看到網(wǎng)上很多設(shè)代理什么的方法菇肃,比較復(fù)雜地粪,有的還要越獄。其實沒必要琐谤。只要鏈上數(shù)據(jù)線蟆技,然后在mac的終端執(zhí)行:
rvictl -s iphone 設(shè)備id
這時,所有iphone網(wǎng)絡(luò)流量都會經(jīng)過iphone所鏈接的mac斗忌,并且iphone數(shù)據(jù)還是走自己的網(wǎng)絡(luò)质礼,比如iphone鏈接在3g網(wǎng)絡(luò),數(shù)據(jù)還是會通過3G收發(fā)织阳,而不是通過mac的網(wǎng)絡(luò)眶蕉。斷開連接:
rvictl -x iphone 設(shè)備id
設(shè)備連接后,mac會出現(xiàn)一個對應(yīng)的虛擬網(wǎng)絡(luò)接口唧躲,名字是rvi0(如果有多個iphone則累加造挽,rvi1,rvi2…)
只要啟動Wireshark弄痹,監(jiān)聽rvi接口就能抓到iPhone數(shù)據(jù)了饭入,當然,也可以使用Wireshark以外的工具抓取或分析肛真。
關(guān)于獲取iphone設(shè)備ID谐丢,可以使用xcode-windows-devices,選擇相應(yīng)設(shè)備蚓让,右面設(shè)備信息的identifier里就是了乾忱。
三、打開WireShark
打開WireShark历极,我們可以看到捕獲選項中多了一條rvi0
點擊rvi0進入后窄瘟,如下所示:
我們可以在應(yīng)用顯示過濾器中對截取數(shù)據(jù)進行篩選,比如輸入http趟卸,我們就可以截取到所有的http請求寞肖。
四纲酗、相關(guān)的過濾條件
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
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
當命令編號為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]+”
-----------------------------------
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
12. wireshark字符串過慮語法字符
如下內(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ù)销凑,三個以上須使用冒號:分隔表示十六進制丛晌。?(相當于?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ù)包誓沸。