无法将任何程序绑定到Mac上的IPv4 TCP端口80

时间:2020-07-02 19:35:36

标签: macos tcp port ipv4

我开始调试docker容器的问题,并确认它也发生在Mac上的纯nodejs + express,甚至是netcat上。基本上,我可以绑定到IPv4 TCP端口81,但不能绑定到80。似乎没有其他东西在该端口上进行监听了,并且防火墙被禁用了。

要重现此问题,请在全新启动时运行以下命令,以检查端口80上没有侦听内容:

$ sudo lsof -i tcp:80
$ sudo netstat -an | grep 80.*LISTEN

两个命令都不显示任何内容。

然后,在一个终端上,我运行netcat来回显端口80中收到的所有内容:sudo nc -l -p 80

现在:

$ sudo lsof -i tcp:80
netcat    1700   root    3u  IPv4 0xcd04564dc212a9f      0t0  TCP *:http (LISTEN)

$ sudo netstat -an | grep 80.*LISTEN
tcp4       0      0  *.80                   *.*                    LISTEN  

但是在另一个终端上,我尝试连接并拒绝连接:

$ telnet localhost 80
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
Trying 192.168.10.16...
telnet: connect to address 192.168.10.16: Connection refused
telnet: Unable to connect to remote host

这实际上可以在端口81上正常工作,我可以使用IP 127.0.0.1进行连接,而我在一个终端上键入的所有内容都出现在另一终端上:

Terminal 1:
$ sudo nc -l -p 81
asdf

Terminal 2:
$ telnet localhost 81
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
asdf

另外:

  • docker run -p 0.0.0.0:80:80 httpd:2.4成功绑定到IPv6 :: 1:80,但未绑定到IPv4地址。 curl http://[::1]返回主页,但curl http://127.0.0.1显示连接被拒绝。
  • 试图用docker run -p 192.168.10.16:80:80 httpd:2.4绑定到特定的IP地址,冻结了2分钟(!),最后在sudo lsof中显示为LISTEN,但仍然拒绝连接。
  • 一个简单的nodejs + express服务器显示出类似的行为。
  • 端口443(无效)和444(按预期工作)也会发生同样的情况。
  • 由于我没有运行任何SSH服务器,因此我在端口22上对此进行了测试,它也可以正常工作。到目前为止,我所知道的仅有2个有问题的端口是80和443。
  • 很久以前,我曾经在此Mac上运行内置的Apache服务器,并且都通过homebrew在两种情况下都使用端口80和443。我认为这不是问题,因为端口80和443在启动时实际上是免费的,但是我提到这一点是为了以防万一。

闻起来好像是某种东西在阻塞端口而不是使用它们,但是我在“系统偏好设置”>“安全性和隐私”>“防火墙”中检查了防火墙,并禁用了它。

我想念什么?

0 个答案:

没有答案