1伯克利包过滤 (Berkeley Packet Filter, BPF)

伯克利包过滤中的限定符有下面 3 种。

名称

功能

常见种类

type

这种限定符表示指代的对象,例如 IP 地址、子网或者端口等。

host:表示主机名和IP地址

net:用来表示子网

port:用来表示端口

dir

表示数据包传输的方向

src:源地址

dst:目的地址

proto

表示与数据包匹配的协议类型

arp

http

dns

IP包头的格式

wireshark tcp stream过滤 wireshark过滤tcp包_运算符

如果需要对数据包进行更细微的操作,伯克利包过滤也支持精确到位的操作。具体的语法为 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 tcp stream过滤 wireshark过滤tcp包_运算符_02

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捕获过滤器

wireshark tcp stream过滤 wireshark过滤tcp包_Wireshark_03

这个编写的过滤器如果不正确的话,文本框的颜色会变成粉红色,如果正确的话则为绿色。

常见的一些过滤器

  • 捕获到指定主机的流量: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

wireshark tcp stream过滤 wireshark过滤tcp包_运算符_04