如何阻止 mac 自动转发来自本地主机的端口请求?

如何阻止 mac 自动转发来自本地主机的端口请求?

我有一个正在运行的应用程序,它在端口 4001 上监听本地请求。每当我启动第二个应用程序通过端口 4001 发出请求时,我的 mac 似乎都会自动将请求转发到另一个端口。例如,当我在启动第二个应用程序之前检查端口 4001 上正在运行哪些进程时,我得到:

Grants-MacBook-Pro:sbin grantseward$ sudo lsof -i -n -P | grep 4001
Password:
java        113    grantseward   52u  IPv6 0x3465d3725017ec8d      0t0  TCP *:4001 (LISTEN)

但是,当我启动第二个应用程序时,它似乎最初将请求发送到端口 4001,但随后它们被路由到 49509,并且该端口已关闭/不是我的其他应用程序正在监听的端口(每次我停止和启动第二个应用程序时,第二个端口也会发生变化,所以我不能简单地改变我正在监听的位置)。

Grants-MacBook-Pro:sbin grantseward$ sudo lsof -i -n -P | grep 4001
java        113    grantseward   52u  IPv6 0x3465d3725017ec8d      0t0  TCP *:4001 (LISTEN)
java        113    grantseward   59u  IPv6 0x3465d3725f0a988d      0t0  TCP 127.0.0.1:4001->127.0.0.1:49505 (CLOSE_WAIT)
java        121    grantseward   80u  IPv6 0x3465d3726032d38d      0t0  TCP 127.0.0.1:49506->127.0.0.1:4001 (ESTABLISHED)

有什么想法我可以改变规则以便让发送到 4001 的请求最终到达 4001?

答案1

您看到的是正常的;并不是连接被转发到端口 49505,而是在端口 49505 上运行的客户端程序正在连接到端口 4001 上的服务。TCP 会话由连接两端的 IP 地址和端口号定义;在这种情况下,您有一个 127.0.0.1:4001(进程 ID 113,服务器程序)和 127.0.0.1:49505(进程 ID 121,客户端程序)之间的会话。

顺便说一句,每次您重新运行客户端(或客户端打开新连接)时,它通常会分配一个新的源端口(而不是 49505)。

相关内容