我正在尝试编写一个libpcap
(tcpdump,iftop)过滤器,用于匹配具有特定当地的港口。
也就是说,我对从本地计算机端口 12345 出去或进入本地计算机端口 12345 的流量感兴趣。
给出合理结果的最简单过滤器就是port 12345
。但是,我怀疑这是不正确的,因为这也会匹配远程端端口 12345 的传出数据包(反之亦然),而我不希望这样。同样,src port 12345
或dst port 12345
也不是我想要的。
我能发明的最简单的能完成这个工作的过滤器是:
(src host stratofortress and src port 12345) or (dst host stratofortress and dst port 12345)
(stratofortress
我的主机名在哪里。)但是,对于这样一个简单的任务来说,这是一个相当复杂的过滤器,并且它对本地地址进行了硬编码。如果我有多个具有多个地址的接口怎么办?
有没有更简单的方法来实现我想要的?
答案1
pcap 过滤器和 pcap 文件不包含捕获 pcap 的系统设置信息,尤其是不包含系统上的本地 IP 地址。这意味着它无法推断“传入”和“传出”的含义。相反,您必须像您所做的那样将这些信息明确地包含在过滤器中。没有比这更简单的过滤器了。
但是当然可以编写一个脚本,它采用本地 IP 地址列表(或从本地系统中提取这些地址)来生成这样的过滤器,而不是为每个系统手动调整过滤器。