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包

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