WinDump使用提示
基本用法:
windump [ -aBdDeflnNOpqRStvxX ] [ -c count ] [ -F file ] [ -i interface ] [ -m module ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -E algo:secret ] [ expression ]
主要參數有選項和表達式兩類。下面說明幾個必要的選項和表達式:
-i 指定要監聽的網絡接口,可以使用windump -D 列出目前系統中所有的網絡裝置接口,不指定的話是裝置清單中找得的第一個。例如:
./WinDump.exe -D
1."Device"NPF_GenericNdisWanAdapter (Generic NdisWan adapter)
2."Device"NPF_{6AA36CF4-E4FD-49BF-93E5-DC29AB8A3AA5} (SiS NIC SISNIC (Microsoft' s Packet Scheduler) )
則
./WinDump.exe
./WinDump.exe -i 1
./WinDump.exe -i ""Device""NPF_GenericNdisWanAdapter
都是監聽第一個網絡接口裝置Generic NdisWan adapter。
./WinDump.exe -i 2
./WinDump.exe -i ""Device""NPF_{6AA36CF4-E4FD-49BF-93E5-DC29AB8A3AA5}
都是監聽第二個網絡接口裝置SiS NIC SISNIC (Microsoft' s Packet Scheduler)。
如果不指定表達式,所有通過指定接口的packet都輸出,否則隻把表達式expression為真的輸出。
最基本的表達式是這樣的:
[proto] [dir] [type] [id]
proto 協定,可以是ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp , udp中任一個或它們的表達式組合,如果不指定,所有和後面的type一緻的都考慮在内。
dir packet傳輸的方向,可以是src, dst中的任一個或它們的表達式組合。不指定的話,相當于src or dst 。
type 指定後面的id是網絡位址、主機位址還是端口号,可以是host, net ,port中任一個,如果不指定,預設為host。
id 就是希望監聽的網絡或主機或端口位址。
一個覆寫所有元素的表達式如下:
ether src host 00:11:D8:6A:33:22
./WinDump.exe -i 2 ether src host 00:11:D8:6A:33:22
監聽所有從本地網卡向外發的packet,其中00:11:D8:6A:33:22是本地網卡的mac位址。
./WinDump.exe -i 2 udp dst port 135
監聽所有發給本地135 udp端口的packet。
更複雜的表達式是以上基本的表達式的邏輯組合,可用于組合的關鍵字有and, or, not,同時構成基本表達式的四類運算都是可選,不是必須的,比如:“host foo and not port ftp and not port ftp-data”,其中foo代表主機名,其他都是關鍵字。
此外,有gateway, broadcast , multicast , mask , protochain , proto , less , greater 四個關鍵字和一些算術表達式、邏輯符合等。
gateway foo 其中,foo是主機名,如果某個packet以foo為gateway,表達式為真,也就是該packet的ether源或目的位址是foo,而ip源和目的位址都不是foo。
broadcast,multicast 跟在ether或者ip、ip6後面表示某個packet是廣播包、多點傳播包,比如“ether broadcast”,“ip multicast”。
mask 和net一起說明網絡位址,例如“net 192.168.0 mask 255.255.255.0”。
protochain 跟在ip、ip6後面說明更上層的協定字,比如“ip protochain 6”。
proto 跟在ether或者ip、ip6後面表示更上層的協定,跟在“ether proto”之後的可以是ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso,跟在“ip proto”或“ip6 proto”之後的可以是icmp, icmp6, igmp, igrp, pim, ah, esp, udp, tcp,注意對于有些本身就是關鍵字的要加“"”轉義,比如“ether proto "ip”。
其他表達式是這樣的格式:
expr relop expr
其中,relop 可以是 >, <, >=, <=, =, !=, 中任一個,expr是由C語言規範描述的整數常量、二進制運算符(+, -, *, /, &, |)、len(取長度的關鍵字)、包資料構成,包資料這樣通路:
proto [ offset : size ] proto是ether, fddi, tr, ip, arp, rarp, tcp, udp, icmp , ip6中任一個,表示要取的資料是該協定頭範圍内的,相對于PDU開始處的偏移由offset指定,size可選、說明要取資料的位元組數,可以是1~4, 預設是1。例如,
“ether[0] & 1 != 0”比對所有multicast資料包,因為01:00:5e:00:00:00到 01:00:5e:7f:ff:ff都是多點傳播位址。
“ip[0] & 0xf != 5”比對所有帶選項的ip包,根據ip協定,“ip[0] & 0xf”取到的是IP協定頭長度,而不帶選項的ip協定頭長度剛好是5。
“ip[6:2] & 0x1fff = 0”,“ip[6:2] & 0x1fff”取到該ip包的Fragment Offset,是以比對所有不分段的ip包或所有分段ip包中的第一段。
其它操作法有!(相當于not )、&&(相當于and )、||(相當于or)。
使用舉例:
./WinDump.exe -i 2 not arp and ether host not 02:01:00:00:00:00
抓取所有非arp協定、且源或目的主機的ether位址都不是02:01:00:00:00:00的packet。
windump.exe -i 2 -w cap ether host 00:11:D8:6A:33:22
抓取所有源或目的主機的ether位址是00:11:D8:6A:33:22(本地網卡的mac位址)的packet,但不知道螢幕上輸出,而是把所有抓獲的raw packet寫入檔案cap中。
windump.exe -r cap
讀取剛才的輸出檔案cap,對抓獲的所有packet進行解析輸出。
經粗略分析,windump輸出的raw packet檔案格式如下:
檔案頭24個位元組:“D4 C3 B2 A1 02 00 04 00 00 00 00 00 00 00 00 00 60 00 00 00 01 00 00 00 ”,具體含義不明确。
接下來是所有raw packet連續存放的資料,對于每個raw packet依次有:
8個位元組的timestamp(時間戳)
ether frame header(7 bytes Preamble,1 byte SOF,6 bytes DA, 6 bytes SA,2bytes length/type)
ether frame payload(更上層協定PDU)
windump.exe -r cap 隻是在螢幕上依次輸出每個packet對應的時間戳、ether frame payload 中PDU協定類型,再是與該協定相關的簡單資訊。
windump.exe -r cap -x 除了輸出基本的資訊之外,還把ether frame payload以十六進制輸出。
WinDump手冊
指令格式
windump [ -aBdDeflnNOpqRStvxX ] [ -c count ] [ -F file ] [ -i interface ] [ -m module ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -E algo:secret ] [ expression ]
描述 Tcpdump 輸出網卡資料包中比對布爾表達式的資料標頭。
SunOS 系統下使用nit或bpf:要運作tcpdump,你必須有對dev/nit或/dev/bpf*的權利。Solaris系統下使用dlpi:你必須有對 網絡假設定的權利。HP-UX系統下使用dlpi:你應該以超級使用者ROOT或安裝SETUID到ROOT下。IRIX下使用SNOOP:你應該以超級用 戶ROOT或安裝SETUID到ROOT下。
LINUX下:你應該以超級使用者ROOT或安裝SETUID到ROOT下。
在系統Ultrix和Digital UNIX:
指令參數
-a 将網絡和廣播位址轉化為名稱
-c 接收指定資料包後退出
-d 接收人可讀的包比對編譯代碼到标準輸出,然後停止
-dd 以C程式分段方式捕獲包比對代碼
-ddd 以十進制資料形式捕獲包比對代碼
-e 在每個捕獲行列印鍊路層頭标
-E algo:secret為解密IPSE ESP包使用算法。
算法可以是des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 或none。
預設值是desc-cbc。隻有當TCPDUMP編譯時使用激活加密選項時,才可以解密資料包。
Secret是ESP密匙是ASCII碼。目前還不能認為一定是二進制值。該選項是以RFC2406ESP為假設,而不是RFC1827 ESP。隻用于調試,不鼓勵用真正的密碼作為選項。當你在PS或其他場合,把IPSEC密碼寫在指令行上時,會被他人看到。
-f 不用符号而用數字方式輸出外部英特網位址 -F 使用檔案作為過濾表達式的輸入。指令行的其他部分會被忽略。
-i 在接口上監聽。如果沒有指定,TCPDUMP将搜尋系統接口清單中最小,被配置激活的接口(LOOPBACK接口除外)。可用最先比對替換這種關系。在 WINDOWS中接口可以是網卡的名稱,或是網卡的号碼(-D參數可顯示該号碼)。核心為2。2或其後的LINUX系統,參數“ANY”可以擷取所有接口 的資料。應注意的是在混亂模式下不能使用“ANY”參數。
-l 标準輸出行緩存。如果你想在捕獲資料時檢視的話,這個參數很有用。
例如:“tcpdump -l │ tee dat” or “tcpdump -l > dat & tail -f dat”.” n 不要将位址(如主機位址,端口号)轉換為名稱 -N 不要列印主機名稱的域名限定。如:如果你使用該參數,TCPDUMP會輸出“NIC”而不是“NIC。DDN。MIL”。
-m 從檔案子產品中載入SMI MIB 子產品定義。這個選項可以為TCPDUMP載入多個MIB子產品
-O 不要運作包比對代碼優化器。隻有在你懷疑優化器有問題時可以使用這個參數。
-p 不要讓接口處于“混亂”模式。注意接口可能由于其他原因處于“混亂”模式;是以“-p”不能用作以太網絡主機或廣播的縮寫。
-q 快速(安靜?)輸出。列印較少的協定資訊,是以輸出行更短。
-r 從檔案中讀取包(與參資料-W一起使用)。如果檔案是“-”就使用标準輸入。
-s 不使用預設的68個位元組,更改從每個包中擷取資料的位元組數量( SunOS系統實際最小為96)。對于IP,ICMP,TCP和UDP包68個位元組已足夠,但是對命名服務和NFS包,他們的協定會被截斷(見下面)。包 被截斷是因為在使用參數“[│proto]”輸出時指定受限制的快照,proto是被截斷協定層的名稱。注意如果使用大的快照會增加處理包的時間,并且明 顯地減少包的緩存數量。也許會導緻包的丢失。你應該将snaplen 設定成你感興趣協定的最小數。當snaplen 為0時接收整個包。
-T 根據表達式将選中的資料包表達成指定的類型。目前已有的類型有CNFP(Cisco的網絡流量協定),rpc(遠端程式調用),rtp(實時程式協定), rtcp(實時程式控制協定),snmp(簡單網絡管理協定),vat(可視單頻工具),和wb(分布式白闆)。 -R 假設ESP/AH包遵守舊的說明(RFC1825到RFC1829)。如果該參數被指定,TCPDUMP不打輸出域。因為在ESP/AH說明中沒有協定版 本,TCPDUMP就無法推斷出其版本号。 -S 輸出絕對TCP序列号,而不是相對号。
-t 每個捕獲行不要顯示時間戳。 -tt 每個捕獲行顯示非格式化的時間時間戳。
-v 詳細輸出。例如,顯示生存時間TTL,辨別符,總長度和IP資料包的選項。也進行額外的包完整性較驗,如驗證IP和ICMP的頭标較驗值。
-vv 更為詳細的輸出。例如,顯示NFS中繼包中的其他域。
-vvv 很詳細的輸出。如,完全輸出TELNET SB… SE選項。帶-X參數的TELNET,列印并以十六進制輸出。
-w 不對原始資料包解析列印而是轉到檔案中去。以後可用-r選項列印。當檔案名為“-”表示标準輸出。 -x 以十六進制(去除鍊路層頭标)輸出每個資料包。輸出整個包的小部分或snaplen 個位元組。
-X 輸出十六進制同時,輸出ASCII碼。如果-x也被設定,資料包會以十六制/ASCII碼顯示。這對于分析新協定非常友善。如果-x也沒有設定,一些資料包的部分會以十六制/ASCII碼顯示。 Win32特殊擴充
-B 以千位元組為機關設定驅動緩存。預設緩存為1M(即1000)。如果在擷取資料包時有資料丢失,建議使用該參數增大核心緩存大小,因為驅動緩存大小對資料捕獲性能有很大影響。
-D 顯示系統上可用的網卡清單。該參數将傳回每塊網卡的号碼,名稱和描述。
使用者可以輸入“WinDump –i 網卡名稱”或“WinDump –i 網卡号碼”。如果機器有多塊網卡,不帶參數的WINDUMP指令會從系統的第一塊可用網卡開始。表達式選擇哪些包被捕獲。如果沒有指定表達式,會捕獲所有 在網絡中的資料包。否則隻獲捕表達式為真的資料包。表達式由一個或多個原語組成。原語通常由一個 ID(名稱或号碼)前面加一個或多個限定詞組成。有三種不同的限定詞。類型限定詞指出id,名稱或号碼屬于哪種類型。可能的類型包括:host,net和 port。如’host foo’, `net 128.3′, `port 20′. 如果沒有指定類型,假設為host。 方向限定詞指出特定的傳輸方向,是從id傳來還是傳到id。可能方向是src, dst, src or dst 和 src and dst。例如`src foo’, `dst net 128.3′, `src or dst port ftp-data’。如果沒有方向限定詞将指定src or dst。對于‘空’鍊路層(像SLIP這樣的點到點協定),可以用inbound和outbound 限定詞指明需要的方向。協定限定詞限定比對某類特定的協定。可能的協定有:ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp和udp。如`ether src foo’, `arp net 128.3′, `tcp port 21′。如沒指定協定,則假設比對所有協定。如`src foo’ 指 `(ip or arp or rarp) src foo’ (但後面的表達式不合法法)(except the latter is not legal syntax), `net bar’ 指 `(ip or arp or rarp) net bar’ 和 `port 53′ 指 `(tcp or udp) port 53′。 `fddi’ 實際上是’ether’的别名;解析器會認為兩者都是指“指定接口中使用的資料鍊路層”FDDI頭标包括類似以太網的源和目的位址,經常包含類似以太網的 包類型,是以你可像對以太網字段一樣過濾FDDI域。FDDI頭标也包括其他域,但你不能在表達式中直接使用他們。同樣’tr’也是’ether’的别 名;前一段FDDI頭标的情況也适用于令牌環網頭标。除了以上所講的,還有一些特殊的原語關鍵字不使用這種方式:gateway, broadcast, less, greater 和算術表達式,都描述如下: 通過使用and, or和 not 結合原語,構成更複雜的過濾表達式。如`host foo and not port ftp and not port ftp-data’。為了減少輸入,可以忽略相同的限定詞清單。如`tcp dst port ftp or ftp-data or domain’ 實際等同于 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain’.
-------------
WinPcap過濾表達式文法
注:該文檔從tcpdump的首頁上獲得,在www.tcpdump.org能夠找到它的原始版本。
Wpcap過濾器基于已公開的斷言文法。一個過濾器是一串包括過濾表達式的ASCII字元串。Pcap_compile()接受表達式并利用一個程式将之轉化為核心層的包過濾器。
表達式選擇将要接受的資料包。若未給出表達式,網絡上的所有資料包将被核心層的過濾驅動所接受。否則,隻有滿足表達式為”ture”的資料包會被接受。
表達式可以包括一個或多個原子式。原子式通常由一個帶前置限定詞的id(名稱或數字)所組成。有三種不同的前置限定詞:
Type 限定詞指定名稱或數字所指向的類别。可能的類别有host、net和port。例如:’host foo’、’net 128.3’、’port 20’。若未指定類别限定詞,預設為host。
Dir 限定詞指定一個到和/或從id的特定的傳輸方向。可能的方向有src、dst、src or dst和src and dst。例如:’src foo’、’dst net 128.3’、’src or dst port ftp-data’。若沒有該限定詞,預設為src or dst。對于’null’鍊路層(例如像slip這種點對點的協定)inbound和outbound這兩上限定詞能夠指定想要的方向。
Proto 限定詞限定一個特殊的協定。可能的協定有:ether、fddi、tr、ip、ip6、arp、rarp、decnet、tcp和udp。例如: ’ether src foo’、’arp net 128.3’、’tcp port 21’。若沒有協定限定詞,則預設為所有與類别相一緻的協定。例如:’src foo’的意思是’(ip or arp or rarp) src foo’(除非後面的文法不合法),’net bar’的意思是’(ip or arp or rarp) net bar’,’port 53’的意思’(tcp or udp) port 53’。
[‘fddi’實際上是’ether’的一個别名;解析器将它們的意思處理為“在指定網絡接口下使用資料鍊路層。”FDDI首部包括類以太網的源和目的地 址,并且通常包括類以太網的包類型,是以你能夠像對以太網一樣在這些部分對FDDI進行過濾。FDDI首部還包括其他部分,但你無法在過濾表達式中精确命 名它們。
類似的,’tr’是’ether’的一個别名;之前對FDDI首部的解釋也适用于令牌環網的首部。]
做為對以上的補充,還有一些特殊的‘原子式’的關鍵字并不遵循這種模式:gateway、broadcast、less、greater和算術表達式。所有這些将在後面講到。
更複雜的過濾表達式由and、or和not将原子式組合而成。例如:’host foo and not port ftp and not port ftp-data’。簡略起見,樣同的限定試清單可以省略。例如:’tcp dst port ftp or ftp-data or domain’與’tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'完全一樣。
合法的原子式有:
dst host host
如果IPv4/v6資料包的目的位址是host則表達式值為true,host可以是IP位址或主機名。
src host host
如果IPv4/v6資料包的源位址是host則表達式值為true。
host host
如果IPv4/v6資料包的源或目的位址是host則表達式值為true。以上的任一主機表達式都能夠用關鍵字如ip、arp、rarp或ip6預先指定,就像以下所示:
Ip host host
等價于:
Ether proto "ip and host host
如果host是多個IP位址,每個位址都會被做比對檢查。
ether dst ehost
若以太網目的位址是ehost則值為true。ehost可以是/etc/ethers中的一個名稱或一個數字(請見ethers(3N)的數字格式)。
ether src ehost
若以太網源位址是ehost則值為true。
ether host ehost
若以太網源或目的位址是ehost則值為true。
gateway host
若資料包以host為網關則值為true。例如:以太網的源或目的位址是host但無論是IP位址的源還是目的位址都不是host。Host必須是一個名 稱并且能夠在機器的host-name-to-IP-address機制(如主機名檔案、DNS、NIS)和host-name-to-Ethernet -address機制(如/ect/ethers)中找到。(一個等價的表達式是:
ether host ehost and not host host
它能夠使用名稱或數字表示host / ehost。)目前來說,這種文法無法在能夠運作IPv6的結構下工作。
dst net net
若IPv4/v6的目的位址的網絡号是net,則值為true。Net可以是/etc/networks中的一個名稱或是一個網絡号(詳細内容請見networks(4))。
src net net
若IPv4/v6的源位址的網絡号是net,則值為true。
net net
若IPv4/v6的源位址或目的位址的網絡号是net,則值為true。
net net mask netmask
若IP位址根據指定的子網路遮罩netmask能與net比對。可以用限定詞src或dst限定。注意:這個文法在IPv6中是不合法的。
net net/len
若IPv4/v6位址根據指定的子網路遮罩長度能與net比對。可以用限定詞src或dst限定。
dst port port
若資料包是ip/tcp、ip/udp、ip6/tcp或ip6/udp并且目的端口為port,則值為true。端口可以是一個數字或一個在 /etc/services(詳見tcp(4P)和udp(4P))中的名稱。若使用名稱,則端口和協定都将被指定。若使用數字或不明确的名稱,則隻有端 口位址被指定(例如:dst port 513将顯示tcp/login和udp/who的資料流,port domain将顯示tcp/domain和udp/domain的資料流)。
src port port
若資料包的源端口的值是port,則值為true。
port port
若資料包的源或目的端口位址的值是port,則值為true。以上所有關于端口的表達式都可以用關鍵字,tcp或udp,預先指定,如:
tcp src port port
僅當tcp的資料包的源端口位址為port的時才比對。
less length
若資料包的長度小于等于length,則值為true。這相當于:
len <= length。
greater length
若資料包的長度大于等于length,則值為true。這相當于:
len >= length。
ip proto protocol
若資料包是協定類型為protocol的IP資料包(詳見ip(4P))。Protocol可以是一個數字或一個名稱:icmp、icmp6、igmp、 igrp、pim、ah、esp、vrrp、udp或tcp。注意辨別符tcp、udp、和icmp同時又是關鍵字并且必需經過反斜線(")過濾(在C- shell中是"")。注意這個原子式不對協定首部進行分析。(這段話了解不太清楚,原文如下:Note that the identifiers tcp, udp, and icmp are also keywords and must be escaped via backslash ("), which is "" in the C-shell. Note that this primitive does not chase the protocol header chain.)
ip6 proto protocol
若資料包是協定類型為protocol的IPv6資料包。注意這個原子式不對協定首部進行分析。
ip6 protochain protocol
若資料包是IPv6資料包,并且在它的協定首部串中包括類型為protocol的協定首部,則值為ture。例如:
ip6 protochain 6
與任何在協定首部串中包括TCP協定首部的IPv6資料包比對。資料包可能包括,例如:在IPv6首部和TCP首部之間包括authentication 首部,routing首部或hop-by-hop option首部。由該原子式發送的BPF編碼是很複雜的并且在tcpdump中不能被BPF編碼優化器所優化,是以它可能有點慢。
ip protochain protocol
等價于ip6 protochain protocol,但是它用于IPv4。
ether broadcast
若資料包是以太網廣播資料包,則值為true。關鍵字ether是可選的。
ip broadcast
若資料包是IP廣播資料包,則值為true。它會檢察所有全一和全零的廣播協定并查尋本地子網路遮罩。
ether multicast
若資料包是以太網多點傳播資料包,則值為true。Ether關鍵字是可選的。這是‘ether[0] & 1 != 0’的簡寫。
ip multicast
若資料包是IP多點傳播資料包,則值為true。
ip6 multicast
若資料包是IPv6多點傳播資料包,則值為true。
ether proto protocol
若資料包是protocol類型的以太協定,則值為true。Protocol可以是一個數字或以下中的一個名稱:ip、ip6、arp、rarp、 atalk、decnet、sca、lat、mopdl、moprc、iso、stp、ipx或netbeui。注意這些辨別符同時也是關鍵字并且必須用 反斜線(")過濾。
[在FDDI(如‘fddi protocol arp’)和令牌環(如‘tr protocol arp’)的例子中,對于大多數的協定來說,協定證明來自802.2的邏輯連結控制(LLC)首部,LLC通常在首部分層中處于FDDI或令牌環的頂層。
當過濾FDDI或令牌環網絡的大部分協定時,對于壓縮以太網tcpdump隻檢查在所謂的SNAP格式的組織單元辨別符(OUI)值為0x000000的 LLC首部的協定的ID字段;它并不檢查資料包是否在SNAP格式下擁有OUI值為0x000000。例外的是iso,它檢查的是LLC首部的DSAP (Destination Service Access Point)和SSAP(Source Service Access Point)字段;stp和netbeui檢查LLC首部的DSAP;還有atalk檢查擁有OUI為0x080007的SNAP格式資料包和 Appletalk etype(這個怎麼譯)。
在以太網的例子中,tcpdump檢查大部分協定的以太網類型字段;例外的是iso、sap和netbeui,對于這些它檢查802.3的幀,然後像它對 FDDI和令牌環網做的那樣檢查LLC首部;atalk,它檢查以太網幀中的Appletalk etype并且同時像在FDDI和令牌環網中那樣檢查SNAP格式的資料包;aarp,它在以太網幀或OUI值為0x000000的802.2 SNAP幀中檢查Appletalk ARP etype;還有ipx,它檢查以太網幀中的IPX etype,LLC首部的IPX DSAP,沒有LLC首部封裝的802.3的IPX和SNAP幀中的IPX etype。]
decnet src host
若DECNET的源位址是host,則值為true,它可能是一個格式為‘10.123’的位址或一個DECNET的主機名稱。[DECNET主機名稱支援隻有在配置成運作DECNET的Ultrix系統中可用。]
decnet dst host
若DECNET目的位址為host,則值為true。
decnet host host
若DECNET的源或目的位址為host,則值為true。
ip、ip6、arp、rarp、atalk、decnet、iso、stp、ipx、netbeui
縮寫為:
ether proto p
P是以上協定中的一個。
lat、moprc、mopdl
縮寫為:
ether proto p
p是以上協定中的一個。注意tcpdump目前還不知道如何解析這些協定。
vlan [vlan_id]
若資料包是IEEE 802.1Q VLAN資料包,則值為true。若[vlan_id]被指定,則僅當資料包為指定的vlan_id,值才為true。注意在表達式中遇到的第一個關鍵字vlan在假設資料包為VLAN資料包的前提下改變了剩下的表達式的解碼偏移量。
tcp、udp、icmp
縮寫為:
ip proto p or io6 proto p
p是以上協定中的一個。
iso proto protocol
若資料包是協定類型為protocol的OSI資料包,則值為true。Protocol可以是一個數字或以下名稱中的一個:clnp、esis或isis。
clnp、esis、isis
縮寫為:
iso proto p
p是以上協定中的一個。注意tcpdump在解析這些協定時所做的工作并不完全。
expr relop expr
若關系式如下:relop是 >、<、>=、<=、=、!= 中的一個,并且expr是一個由正整常數(用标準C的文法表達)、标準二進制操作[+、-、*、/、&、| ]和指定資料包存取,則值為true。要存取資料包内的資料,可以使用以下的文法:
proto [ expr : size ]
proto 是ether、fddi、tr、ip、arp、rarp、tcp、udp、icmp或ip6同的一個,并且用索引操場作指定協定層。注意tcp、udp和 其他上層協定類型僅應用于IPv4,而不能應用于IPv6(這在将來将會改進)。相對于指定的協定層,位元組偏移量是由expr給出。Size是可選的,它 指定感興趣的字段的位元組數;它可以是1、2或4,預設為1。由len指定的長度操作會給出資料包的長度。
例如:‘ether[0] & 1 != 0’捕獲所有多點傳播的資料流。表達式‘ip[0] & 0xf != 5’捕獲所有選中的IP資料包。表達式‘ip[6:2] & 0x1fff = 0’僅捕獲不分片的資料和分片資料的第0片資料。這些檢查将暗中的應用于tcp和udp的索引操作。例如:tcp[0]總是意味着TCP首部的第一個字 節,而決不會意味着一個中間片段的第一個位元組。
某些偏移量和字段值可能是用名稱來表達而不是數值。以下的協定首部字段偏移量可用:icmptype (ICMP類型字段)、icmpcode (ICMP代碼字段)和tcpflags (TCP辨別字段)。
以下的ICMP類型字段值可用:icmp-echoreply、icmp-unreach、icmp-sourcequench、icmp- redirect、icmp-echo、icmp-routeradvert、icmp-routersolicit、icmp-timxceed、 icmp-paramprob、icmp-tstamp、icmp-tstampreply、icmp-ireq、icmp-ireqreply、 icmp-maskreq、icmp-maskreply。
以下的TCP辨別字段值可用:tcp-fin、tcp-syn、tcp-rst、tcp-push、tcp-push、tcp-ack、tcp-urg。
原子式可以使用以下操作進行組合:
一個加上括号的原子式和操作的組(圓括号專用于Shell是以必須過濾掉)。
否(‘!’或‘not’)。
與(‘&&’或‘and’)。
或(‘||’或‘or’)。
否具有最高的優先級。與和或具有相同的優先級且是左連接配接的。注意外在的and記号不是并列的,而是要求串聯的。
如果一個辨別符給出時沒有關聯關鍵字,則假設為最近使用過的關鍵字。例如:
not host vs and ace
是以下表達式的簡寫:
not host vs and host ace
不要與以下的表達式混淆了:
not ( host vs or ace )
表達式參數可以以單個參數的形式也可以以多個參數的形式傳給tcpdump。一般的,若表達式包括Shell metacharacters,傳送單個引用參數更為容易。多個參數在解析前可用空格聯接起來。
-------
WinDump
最強有力和最廣泛使用的Unix指令列工具-Windows端口事實上相當普遍。我用過各種Windows版本搜尋工具,例如grep。其中最有用的就是 tcpdump-為進一步分析記錄、報告網絡傳輸中資料包頁眉的一種工具。Cace Technologies的從業人員已經編譯一Windows端口程式命名為WinDump,它具有基于Unix系列的所有特征。友善你編譯自定義界面, 該程式所有的源代碼也包括在内。
網絡流量的傾銷有許多可能的應用。我已經用其判斷惡性軟體是否已經安裝到已給的機器上,就是通過觀察無任何程式運作的計算機中資料包是否播散(它也可以識 别頁眉資訊和目的地)。除登記所有可用的流量外,該程式僅記錄、報告頁眉中有某些比對資訊的資訊包――如果你已經知道你在找什麼并僅僅要這些,那麼這個工 具很有用。
安裝和基本用途
WinDump分兩部分。第一部分是WinPcap一系列網絡記錄驅動,是WinDump用來獲得計算機中資訊包到網絡界面的資訊。第二部分是程式本身,windump,在安裝WinPcap library後從指令列中調用。
當你運作windump時你第一個想要使用的選項是-D,它會列出目前系統中所有可使用的網絡界面。預設情況下程式聽從第一可用界面,但是在Windows中,它是典型的軟體撥号配置器,不是實體網絡配置器。-D的結果通常如下:
1."Device"NPF_GenericDialupAdapter (Generic dialup adapter)
2."Device"NPF_{707E0236-BEE4-4097-93B1-56DEC35564AA} (Intel DC21140 PCI Fast Ethernet Adapter (Microsoft's Packet Scheduler) )
要使用專門的配置器,用-i指令和配置器号運作程式。例如,如果你想使用上述Ethernet配置器,用windump -i 2。這要比通過GUID向配置器送出簡單得多,但是要注意如果新硬體或軟體配置器增加,那麼配置器号不是保持固定不變的。
Windump具有通過詳細标準過濾已記錄資料的能力――詳細的網絡協定,主機或端口――通常在指令列中有詳細說明。其中的文法相當複雜。在程式檔案中有詳細解釋,這有一些例子:
windump -i 2 port 80
通過端口80從界面#2記錄所有流量
windump -i 2 host im-chat.com
記錄所有從the host im-chat.com.或來或到界面#2的流量
windump -i 1 net 127
這些參數也可以自由組合。
輸出記錄
預設情況下,程式的輸出記錄存在控制台。除非,你使用程式僅僅是為了觀察網絡流量,你都想用-w<filename> 指令将結果記錄到檔案。預設情況下,程式用這個名字記錄已存在的檔案,是以注意不要用這種方式擦掉已記錄的資料!
如果你打算在程式運作時檢視輸出檔案,用-U選項。它使得程式将每一已接收資訊包寫到輸出檔案中。預設情況下,程式為資料保留1MB的緩存空間。
預設情況下,windump隻記錄每個資訊包的标題,不是full payload。-s 0選項使程式為每個資訊包堆積整個raw payload。如果你和-A選項一起用,你可以以ASCII格式記錄結果。例如,用這種方式記錄網頁,伺服器會提供可讀形式,不會以 gzip/deflate形式發送記錄。
另一個有用的選項, -C <filesize>,将資料記錄到multiple files,每一個檔案的長度都不多過<filesize>。每一個連續檔案是遞增編碼的。<filesize>是以MB校對; 如果你用-C 5,每一個檔案的長度都将是5,000,000位元組。
當你停止程式(通過點選Ctrl-Break)時,程式向控制台送出一份報告列出所記錄、阻止、丢棄(由于缺少緩存空間)的資訊包數。如果程式開始丢棄信 息包,你可以向記錄緩沖器增加配置設定空間,通過-B <size>指令,其中<size>是配置設定的千位元組數。預設緩存大小是1MB。
高端性能
WinDump一個更強有力的用途就是它能通過IPsec将已加密的網絡資料流解密。這不是簡單的操作,她要求你有IPsec加密的ESP密匙,同時将tcpdump應用軟體與密碼使用法選項結合才能解密(一些本文以外的内容)。
如果你想将有濾鏡參數的外部檔案列入清單,你可以用-F <filename>選項。注意這會使程式忽略指令列中提供的任何濾鏡參數。
最後,如果你想使程式閱讀、過濾之前已标記的資料而不是網絡擴充卡上的現時資料,使用-r <filename>選項。
----------------
利用WinDump來探測HTTP網頁資料包
54powerman
[email protected]
http://blog.csdn.net/54powerman
windump是一個開源軟體,可以進行各種協定的網絡資料包探測,是一個不錯的免費、開源Net Sniffer軟體,目前最新版本是3.9.5,官方下載下傳網址:http://www.winpcap.org/windump/install/。
詳細的幫助檔案官方網址是:http://www.winpcap.org/windump/docs/manual.htm
常用的參數:
-w write的縮寫,寫入檔案,供後期分析。
-D 列印系統可用的網絡接口清單。
-i[n] interface的縮寫,選擇要監測的網絡接口。
host 指定要監測的主機,可以是域名或IP位址。
port 指定要監測的端口。
src/dst source/Destination的縮寫,該參數配合host和port參數一起使用,指定要監測的主機或端口為源/終點的資料包。
-s size的縮寫,指定抓取的每個資料包的大小,預設是68,如果該值太小,可能會丢失資料。如果設定為0,則表示捕獲整個包。
-t 不顯示時間。
-tttt 以預設ISO格式顯示時間。
tcp, udp, icmp 指定使用的協定
使用範例:
監測某個網站的通路資料包,如mail.163.com:
1 運作指令行
windump -i2 -w pc.dump -s 0 host mail.163.com
2 用浏覽器通路mail.163.com的某個網頁。
3 用Ultraedit或其他16進制編輯器打開pc.dump檔案,你就可以看到你對網頁操作的“Request->Response”資料包了。
如果你隻對伺服器傳回的消息感興趣,如下修改上面的指令:
windump -i2 -w pc.dump -s 0 src host mail.163.com
反之:
windump -i2 -w pc.dump -s 0 dst host mail.163.com
windump的确是個不可多得的優秀Sniffer軟體,值得收藏使用。
------------------
工具名稱:Windump
運作平台:Windows/Unix
軟體類别:免費軟體
網址:http://winpcap.polito.it/install/default.htm
Windump是Windows環境下一款經典的網絡協定分析軟體,其Unix版本名稱為Tcpdump。它可以捕捉網絡上兩台電腦之間所有的資料包,供 網絡管理者/入侵分析員做進一步流量分析和入侵檢測。在這種監視狀态下,任何兩台電腦之間都沒有秘密可言,(當然加密的資料不在讨論範疇之内,而且,對數 據包分析的結果依賴于你的TCP/IP知識和經驗)。在W.Richard Stevens的大作《TCP/IP詳解》卷一中,通篇采用Tcpdump捕捉的資料包來向讀者講解TCP/IP;而當年美國最出色的電腦安全專家在追捕 世界頭号黑客米特尼克時,也使用了Tcpdump,Tcpdump/Windump的價值由此可見一斑。
該軟體是免費軟體,指令行下面使用,需要WinPcap驅動,該驅動可以在http://winpcap.polito.it/install/default.htm下載下傳。
打開一個指令提示符,運作windump後出現:
D:"tools>windump
windump: listening on "Device"NPF_{3B4C19BE-6A7E-4A20-9518-F7CA659886F3}
這表示windump正在監聽我的網卡,網卡的裝置名稱是:
"Device"NPF_{3B4C19BE-6A7E-4A20-9518-F7CA659886F3}
如果你看見螢幕上顯示出這個資訊,說明你的winpcap驅動已經正常安裝,否則請下載下傳并安裝正确的驅動。Windump的參數很多,運作windump -h可以看到:
Usage: windump [-aAdDeflnNOpqRStuvxX] [-B size] [-c count] [ -C file_size ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -E algo:secret ] [ expression ]
下面結合TCP的三步握手來介紹Windump的使用:
D:"tools>windump -n
windump: listening on "Device"NPF_{3B4C19BE-6A7E-4A20-9518-F7CA659886F3}
09:32:30.977290 IP 192.168.0.226.3295 > 192.168.0.10.80: S 912144276:912144276(0) win 64240 <mss 1460,nop,nop,sackOK> (DF)//第一行
09:32:30.978165 IP 192.168.0.10.80 > 192.168.0.226.3295: S 2733950406:2733950406(0) ack 912144277 win 8760 <nop,nop,sackOK,mss 1460> (DF)//第二行
09:32:30.978191 IP 192.168.0.226.3295 > 192.168.0.10.80: . ack 1 win 64240 (DF)//第三行
先看第一行。其中09:32:30.977290表示時間;192.168.0.226為源IP位址,端口3295,其實就是我自己的那台電腦; 192.168.0.10是目的位址,端口80,我們可以判斷這是連接配接在遠端主機的WEB服務上面;S 912144276:912144276(0)表示我的電腦主動發起了一個SYN請求,這是第一步握手,912144276是請求端的初始序列号;win 64240 表示發端通告的視窗大小;mss 1460表示由發端指明的最大封包段長度。這一行所表示的含義是IP位址為192.168.0.226的電腦向IP位址為61.133.136.34的電 腦發起一個TCP的連接配接請求。
接下來我們看第二行,時間不說了;源IP位址為192.168.0.10,而目的IP位址變為192.168.0.226;後面是S 2733950406:2733950406(0) ack 912144277,這是第二步握手,2733950406是伺服器端所給的初始序列号,ack 912144277是确認序号,是對第一行中用戶端發起請求的初始序列号加1。該行表示伺服器端接受用戶端發起的TCP連接配接請求,并發出自己的初始序列 号。
再看第三行,這是三步握手的最後一步,用戶端發送ack 1,表示三步握手已經正常結束,下面就可以傳送資料了。
在這個例子裡面,我們使用了-n的參數,表示源位址和目的位址不采用主機名的形式顯示而采用IP位址的形式。
隻有深入了解TCP/IP才有可能成為一個合格的網絡管理者。Windump的參數很多,功能也非常強大,以上所介紹的僅僅是它冰山的一角,希望有更多的網絡管理者能關注協定分析,隻有這樣,我們才能在日常的網絡管理和應急時期的入侵分析中立于不敗之地。