tcpdump 過濾數據包

好不容易下定了決心 開始寫技術博客 寫的不對的地方還請大家指教
我用的是centos6.5 原帶的tcpdump抓包工具(unbuntu12.04下同樣有效) 可以擁有和wireshark一樣的數據包過濾功能
若想以更細化的粒度來抓取自己需要的數據包,可採用以下形式(前提是必須要熟悉各種協議的數據包格式,這樣才能熟悉每個字段的含義,甚至每個bit的含義,便於過濾)
在tcpdump中同樣可以使用>,>=,<,<=,=,!=這些比較符,以及&,|,!邏輯運算符(此處!優先級最高,&和|優先級相同,左結合性)
1)tcpdump proto[expr:size]
其中proto:協議名如tcp,udp
expr:相對與特定協議數據包起始點的字節位移
size:從expr出開始的字節數,可以爲1,2,4,默認爲1
例子:
1 tcpdump 'ip[2:2]>576' 抓取總長度大於576bytes的ip數據包  (因爲IP數據包頭部第三個和第四個字節表示數據包的總長度)
2 tcpdump 'ip[0]&0xf !=5' 抓取選項部分不爲空的ip數據包 (因爲IP數據包頭部的第一個字節的低四位代表頭部長度,值爲5表示頭部長度爲20bytes此時選項部分爲空)
2)也可以使用名稱而不是數字去指定特定數據包的特定字段,如icmptype,icmpcode,tcpflags
例子:
tcpdump 'tcp[tcpflags] = tcp-syn' 抓取tcp的syn包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章