我对以下命令的理解:
tcpdump -i any -nn port X
tcpdump
-> 启动服务来捕获数据包。-i any
-> 在任何/所有接口上。-nn
-> 不要将主机地址转换为名称(避免 DNS 查找),也不转换协议和端口号。port X
-> 将此规则应用于端口 X
假设上述内容是正确的,我觉得这个命令意味着端口(进程的逻辑端点)X可以使用任何可用的接口来与另一个进程/设备等进行通信......并且这个tcp转储将捕获所有跨所有这些可用接口的数据包。
有什么方法可以查看给定端口(命令?)的所有可用接口的列表?
答案1
端口号是 TCP 和 UDP 数据包标头的一部分,并且使用的端口号几乎与用于通信的物理接口正交。 (另一方面,接口通常与 IP 地址绑定,但这也不是真正必要的。)
一个应用程序可以绑定到单个 IP 地址/接口,然后您最终可能会得到两个使用相同端口号绑定到不同 IP 地址的应用程序。或者,单个应用程序可以分别绑定到不同的接口,并在所有接口上使用相同的端口号。或者使用不同的。端口号和接口存在于不同的层上,因此对于特定接口上可以使用哪些端口没有限制。
另请注意,TCP 和 UDP 的端口号都在 1 (0) 到 65535 之间,但数字空间不同。一个应用程序可以使用 TCP 端口 1234,而另一个应用程序可以使用 UDP 端口 1234。
关于术语,说端口“使用”接口,或者接口对特定端口“可用”没有多大意义。端口号只是标识符,它们不“做”任何事情。
虽然你的最后一句话似乎也将端口与命令混为一谈,但这有点不准确。许多应用程序都有一个众所周知的端口(SSH 使用 TCP/22,HTTP 使用 TCP/80 等),但没有什么可以强制执行:您可以在端口 2222 上运行 SSH 服务器,并在端口 22 上运行完全不同的东西。