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