[学习笔记]WireShark Filter应用简介
WireShark使用过程中,最常见的操作莫过于设置过滤器了.当然你可以通过Filter Express点击鼠标来选择过滤器表达式,也可以更快捷的在Express编辑框中直接输入来进行配置。
0×01 常见表达式运算符
给一张图吧,比较直观.
is present :存在
==、!=、<、>、<=、>= :等于,不等…类推,==也用eq代替
contains :包含
matches :匹配
and,or,not :&& || ! 逻辑语,逻辑或,逻辑非
0×02 表达式构成
一般是的结构是 Protocal.Properties == XXX
也可以使用语法判断,在编写过滤脚本时能用到.
0×03 常规应用实例
1.针对IP过滤的例子
抓取满足源地址的包: ip.src == 192.168.0.1
抓取满足目标地址的包: ip.dst == 192.168.0.1
抓取满足源地址或目标地址的包: ip.addr == 192.168.0.1,或者 ip.src == 192.168.0.1 or ip.dst == 192.168.0.1
2.针对Port过滤的例子
捕获单一端口: tcp.port == 80
捕获范围端口: udp.port >= 2048 and upd.port <= 65000
3.针对Protocal过滤的例子
捕获单一协议: http
捕获多种协议: http or telnet
4.针对包长度和内容过滤的例子
捕获特定长度的包: http.content_length <=100
捕获特定内容的包: http.request.uri matches “blackh4t”
5.高级过滤的使用
每个都可以加入逻辑运算符组成高级表达式
如:
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8
!(arp.src==192.168.1.1) and !(arp.dst.proto_ipv4==192.168.1.243)
当遇到具体协议的具体属性不明晰时可以查看手册,但一般都是英文简略缩写,所以很好理解.
0×04 表达式语法附录
主要是整理了一些协议或者表达式格式的常见用法
[src|dst] host <host> 尖括号里的是一个主机IP或主机名字,用src、dst来设定这是目的地址或源地址。 这个选项能过滤主机IP和名字
ether [src|dst] host <ehost> 尖括号里的是一个网络地址,用src、dst来设定这是目的地址或源地址。
gateway host <host> <host> 是一个网关,抓取流过 <host> 的数据包,但这些数据包的目的地址和源地址都不是 <host>。
[src|dst] net <net> [{mask <mask>}|{len <len>}]
<net>表示一个网络地址,可以用
src、dst来表示这个网络是目的地址还是源地址的数据包。如果没有”src/dst”,表示全部数据包。可以选择加上子网掩码或使用无类型域间选路
(CIDR)的方式。
[tcp|udp] [src|dst] port <port> [tcp|udp]是选择抓取的协议类型,<port>指定端口。需要注意的是,[tcp|udp]必需在[src|dst]之前。
less|greater <length> 抓取碎片数据包或指定长度的数据包。less 与 greater 分别对应小包与大包。
ip|ether proto <protocol> 在数据链路层上,在指定的IP地址或网络地址(ip|ether)上抓取指定协议<protocol>的数据包。
ether|ip broadcast|multicast 在指定的网络地址或IP地址上抓取广播包或组播包。
0×05 补充
Ettercap的过滤脚本语法基本都大同小异,除此之外常见的全功能多协议的嗅探工具还有OmniPeek,老牌的Sniffer
Pro等等..另外推一个小工具,因为对于特定进程的包捕获,我也没找到特别好的语法,一般是结合Netstat之类的命令找出对应进程的PID和端口再
进行过滤器配置,而Appsniffer这个小工具很好的解决了这个问题,其需要.net的支持.
未尽错误之处还望各位指正. hv fun