ILD

Berkeley Packet Filter (BPF) syntax
作者:Yuan Jianpeng 邮箱:yuanjianpeng@xiaomi.com
发布时间:2022-3-5 站点:Inside Linux Development

tcpdump和wireshark的抓包过滤表达式的语法是BPF语法。这个语法可以编译BPF指令,下发到内核,进行抓包过滤。


表达式(expression)包含一个或多个primitive。


Primitive通常由 一个id(name or number),前面有一个或多个qualifier,组成。


有3种不同的qualifier


type

表示id是什么类型,如 host, net, port, portrange。

    host foo,主机foo

    net 128.3,网段,这里有没有自定长度,应该2个字符,默认应该是16。net 128.3/16 也是可以的。

    port 20,端口。

    portrange 6000-6008,一个范围的端口


dir

指定id的传输方向,有src,dst,src or dst,src and dst,如果没有指定方向,默认为src or dst

    src port 20


proto

指定协议,有 ether, ip, ip6 arp tcp udp,如果没有指定协议,那么选中所有支持type的协议。


除了以上,还有一些特殊的primitive keyword,如:gateway,broadcast,less,greater,以及arithmetic expression。

    less <length>,长度小于等于length的包。

    greater <length>,长度大于等于length的包。


二层或3层,广播,组播包。

ether broadcast

ip broadcast

ether multicast

ip multicast


某个二层协议

ether proto <proto>


某个vlan

vlan [vlan id]


pppoed


逻辑运算

可以使用括号组合起来。

可以取反 ! 或者 not

可以与 && 或者 and

可以或 || 或者 or


如:

not (udp and dst net 239.93/16) and not host 192.168.1.100 and not ip6


参考:

https://biot.com/capstats/bpf.html


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.