使用 iftop 通过特定端口的网络流量

Network traffic through a particular port using iftop

我有一个使用 https 的进程。我使用 ps 找到了它的 PID,并使用命令 lsof -Pan -p PID -i 获取它所在的端口号 运行。

我需要 iftop 来查看数据传输。我现在使用的过滤器是 iftop -f "port http 57787"

我认为这没有给我正确的输出。 有人可以帮助我使用 iftop 的正确过滤器,以便我知道仅通过此端口的流量吗?

我在这里看到 2 个问题:

1/ 打错了吗?正确的过滤选项是 -f(small "f")。 -F(大写 "F")选项用于 net/mask.

2/ 虽然 iftop 文档没有明确说明,但过滤语法似乎是给出的几个示例中的 pcap 语法(并且使用 ldd 我可以看到是的,iftop 二进制文件链接到 libpcap)。所以带有 http 的过滤器根本无效。要查看 pcap 过滤语法的文档,请查看 pcap-filter (7) - packet filter syntax 手册页。在您的示例中,"tcp port 57787" 之类的过滤器就可以了。 pcap 不做第 5 层及以上协议的解析,例如 http(pcap 过滤器由内核中的 BPF 处理,所以在第 4 层以上你自己做,因为那是内核业务的 none ).

总而言之,这些看起来像 iperf 个错误。它应该拒绝您的“-F”选项,甚至使用“-f”而不是退出并返回错误代码,因为 pcap 将拒绝过滤器表达式。没什么大不了的,iftop 是一个适度的程序。 请参阅下面的编辑。

编辑:

我刚刚查看了iftop 1.0pre4版本的源代码,在iftop.c中查看set_filter_code()及其调用者packet_init()并没有这么明显的错误。它正确退出并出错,但是...

错误2,使用“-f”选项,但你的过滤器语法不正确:

jbm@sumo:~$ sudo iftop -f "port http 57787"
interface: eth0
IP address is: 192.168.1.67
MAC address is: 8c:89:a5:57:10:3c
set_filter_code: syntax error

没关系。

错误1,用“-F”代替“-f”,有问题:

jbm@sumo:~$ sudo iftop -F "port http 57787"

(一切似乎或多或少都还好,但随后退出程序)

Could not parse net/mask: port http 57787
interface: eth0
IP address is: 192.168.1.67
MAC address is: 8c:89:a5:57:10:3c

糟糕! "Could not parse net/mask: port http 57787"!这是一个错误:它应该立即退出。