1伯克利包过滤 (Berkeley Packet Filter, BPF)
伯克利包过滤中的限定符有下面 3 种。
名称 | 功能 | 常见种类 |
type | 这种限定符表示指代的对象,例如 IP 地址、子网或者端口等。 | host:表示主机名和IP地址 net:用来表示子网 port:用来表示端口 |
dir | 表示数据包传输的方向 | src:源地址 dst:目的地址 |
proto | 表示与数据包匹配的协议类型 | arp http dns |
IP包头的格式
如果需要对数据包进行更细微的操作,伯克利包过滤也支持精确到位的操作。具体的语法为 proto[expr:size],这里面的 proto 指代协议, expr 表示相对给出协议层的字节偏移量, size 表示要操作的字节数。其中 size 的值是可选的,可以是 1、 2、 4 中的一个,默认值为 1。
现在我们使用这个格式来改写 dst host 192.168.1.1,这里面要操作的 dsthost 是源地址,它位于 IP 数据包头的第 12,13,14,15 位, expr 的值为 12,长
度 size 的值为 4,地址 192.168.1.1 转换为十六进制为“0xc0a80101”,最后就可以写成:ip[12:4] =0xc0a80101
2运算符
and:与 or:或 not:非
3显示过滤器
Wireshark 的显示过滤器与捕获过滤器有两点明显的不同,一是显示过滤器可以在 Wireshark 捕获数据之后再使用,二是显示过滤器的语法与捕获过滤器的语法并不相同。
在 Wireshark 中,在显示过滤器中使用网络协议时,这些网络协议都要使用小写的形式( 例如 arp、 ip、 icmp、 tcp、 udp、 dns 以及 http 等)。例如我
们创建一个只显示 TCP 协议的显示过滤器,只需要在 Wireshark 的显示过滤器的输入框中输入“tcp”。
关系符
Wireshark中支持比较和逻辑两种运算符。这两种运算符大部分都有两种写法:
运算符:例如“ eq”等同于“ ==”,“ ne”等同于“ !=”,“ gt”等同于“ >”,“ lt”等同于“ <”,“ ge”等同于“ >=”,“ le”等同于“ <=”。
比较符:“ and”等同于“&&”,“or”等同于“||”,“not”等同于“!”。还有两个比较特殊的字符“contains”和“matches”, contains 用来判断是否包含一个值, matches用来判断是否匹配一个表达式。
4捕获过滤器
这个编写的过滤器如果不正确的话,文本框的颜色会变成粉红色,如果正确的话则为绿色。
常见的一些过滤器
- 捕获到指定主机的流量:host 192.168.11.1
- 捕获一个网段的流量:net192.168.11.0/24或 net 192.168.0.0 mask 255.255.255.0
- 捕获源地址:src net 192.168.11.0/24 或 src net 192.168.0.0 mask 255.255.255.0
- 捕获目的地址:dst net 192.168.11.0/24 或 dst net 192.168.0.0 mask 255.255.255.0
- 捕获端口:port 53 或 port dns
- 捕获端口范围的流量:
源端口: (tcp [0:2]> 1500 and tcp [0:2] <1550)
目的端口:(tcp [2:2]> 1500 and tcp [2:2] <1550)
tcp portrange 1501-1549