一直不想動這個東西,是源於心理的惰性。
當沒有退路可言時,我在研究。
因為一直與伺服器端調整不順暢,讓現在的項目總是卡在一個地方。靠別人無法解決問題,只能自己研究。
所以拿出這個東西來玩。
解關於過濾器的問題:(以下文檔來自於網路)
過濾器文法
-------------------------------------------------------------
最簡單的過濾允許你檢查一個協議或者欄位的存在。如果你想查看所有的使用IP協議的資料包,過濾器為“ip”(不帶引號)。想看所有包含Token-ring
RIF欄位的資料包,使用“tr.rif”。
可以使用“exist”操作符來看一個協議或者欄位是否存在。
注意:所有的協議和欄位的名字可以在過濾器的參考中獲得。
比較操作符
-------------------------------------------------------------
欄位可以與值進行比較。比較操作符可以使用類似英語的簡寫,也可以使用c語言的字元。
eq,== 等於
ne,!= 不等於
gt,> 比...大
lt,< 比...小
ge,>= 大於等於
le,<= 小於等於
搜尋比較操作符
--------------------------------------------------------------
另外還有一些操作符只能使用類英語簡寫,不能使用類c語言簡寫。
contains 判斷一個協議,欄位或者分區包含一個值
matches 判斷一個協議或者字串匹配一個給定的Perl運算式
“contains”操作符允許一個過濾器搜尋一串字元,其形式為字串,或者位元組,或者位元組組。例如在搜尋一個HTTP
URL地址,可以使用下面的過濾器:
http contains “http://www.wireshark.org”;
“contains”操作符不能被用於原子型的欄位,比如數字和ip地址。
“matches
”操作符允許一個過濾器使用與Perl相容的Regex(PCRE)。“matches”
操作符只能應用於協議或者字串類型的協議欄位。例如:搜尋一個給定的wAP WSP User-Agent,你可以這樣寫過濾器:
wsp.user_agent matches "(?i)cldc"
函數
-------------------------------------------------------------
過濾器的語言還有下面幾個函數:
upper(string-field)-把字串轉換成大寫
lower(string-field)-把字串轉換成小寫
upper((和lower((在處理大小寫敏感的字串比較時很有用。例如:
upper(ncp.nds_stream_name) contains "MACRO"
lower(mount.dump.hostname) =="angel"
協議欄位類型
---------------------------------------------------------------
每個協議的欄位都有規定的類型。這些類型是:
unsigned integer 不帶正負號的整數(8位元、16位元、24位元、32位元)
signed integer 有符號整數(8位元、16位元、24位元、32位元)
Boolean 布爾值
Ethernet address 乙太網路地址(6位元組)
Byte array 位元組數組
IPv4 address IPv4地址
IPv6 address IPv6地址
IPX network number IPX網路地址
Text string 文本串
Double-precision floating point number 雙精確度浮點值
一個整數可以有三種表示方法,十進位、八進位和十六進位。下面三個例子是相同的:
frame.pkt_len>10
frame.pkt_len>012
frame.pkt_len>0xa
布爾值不是true就是false.在測試一個布爾類型欄位的顯示過濾器中,"true"的值相當於1或者其它的非0值,"false"就是0。
例如:令牌環資料包中一個源路由欄位是布爾型的.找到源路由的資料包,可以這樣寫顯示過濾器:
tr.sr==1
非源路由資料包可以使用這樣的過濾器:
tr.sr==0
乙太網路地址和位元組數組使用十六進位表示.十六進位的數字可以被 ":" "." "-"
分隔。例如:
eth.dst eq ff:ff:ff:ff:ff:ff
aim.data == 0.1.0.d
fddi.src == aa-aa-aa-aa-aa-aa
echo.data == 7a
IPv4 地址可以被表示成點分十進位或者使用主機名稱表示。例如:
ip.dst eq www.mit.edu
ip.src == 192.168.1.1
IPv4地址之間可以和數字之間一樣,使用關係符號比較:eq,ne,gt,ge,lt和le。IPv4地址按照主機順序儲存,這樣當你在使用顯示
過濾器的時候就不用擔心IPv4地址的結束了。
當使用IPv4子網劃分的時候,CIDR標記法也可以使用。例如:以下的過濾器可以找到所有129.111的資料包:
ip.addr==129.111.0.0/16
記住,斜線後面的數字用於表示子網佔用的位元數。CIDR標記法也用於尋找主機名稱,例如C類網路中主機“sneezy”的IP地址。
ip.addr eq sneezy/24