不知道 OS X 中 80 端口监听的是什么

不知道 OS X 中 80 端口监听的是什么

我使用的是 OSX Mountain Lion 10.8.3,并且刚刚重启了我的 Mac。

我想启动一项服务(比如端口 80 上的 Apache),但是端口 80 上已经有一些事情正在发生:

telnet localhost 80

Trying ::1...
Connected to localhost.
Escape character is '^]'.

等一下,我听到你说,你可以用 lsof 或 netstat 找到它。但那里什么也没有

netstat -an | grep LISTEN | grep '\.80'

*comes back blank*

lsof -i :80 | grep LISTEN

*comes back blank

因此,根据我对 unix 系统的了解,我认为这肯定是数据包转发规则?也就是说,数据包从入站端口 80 转发到正在侦听该服务的其他端口。

ipfw show

65535 0 0 allow ip from any to any

嗯,没什么不寻常的

pfctl -s nat

No ALTQ support in kernel
ALTQ related functions disabled

没什么不寻常的

我的问题是,我如何显示任何数据包转发规则...在 Linux 上,我可能只执行 iptables -L -t NAT 或 iptables -L。或者,任何 OSX 专家都可以帮我诊断这个问题吗?

答案1

您需要运行这些命令来root显示其他用户的进程,例如:

sudo lsof -i ':80'

Mac OS X 包含一个 Apache Web 服务器,可以使用 进行控制apachectlroot它通常通过 启动launchd,相应的配置文件是/System/Library/LaunchAgents/org.apache.httpd.plist。如果不是这个在端口 80 上运行的 Apache,则可能是启动,Apple 实现了守护进程管理器。根据维基百科

当 launchd 在启动时扫描作业 plist 时,它会保留并监听这些作业请求的所有端口。如果 plist 中的“OnDemand”键指示了这一点,则守护进程实际上并未在当时加载。相反,launchd 将监听端口,在需要时启动守护进程,在不需要时关闭它。在守护进程加载后,launchd 将跟踪它并确保它在需要时运行。

答案2

只是为了在用户搜索这个问题时使实际答案清晰。

  1. launchd/System/Library/LaunchDaemons/在启动时进行扫描,并发现org.apache.httpd.plist当 apache 启动时需要将端口 80 转发到它。

  2. sudo apachectl start已完成

  3. 但是文件中有一个错误httpd.conf,意味着 apache 未启动,尽管该命令并未报告此错误apachectl

  4. Launchd 决定监听端口 80,因为它认为 apache 已启动。

  5. 但是任何 HTTP 请求的内容都会导致连接立即关闭。

  6. sudo lsof -i :80 没有答案

  7. sudo netstat -an | grep LISTEN端口 80 没有响应

  8. 据我所知,任何诊断工具都无法显示端口 80 正在使用或正在监听。

  9. 修复 apache 的 httpd.conf 并成功重新启动 apache,以便 httpd 位于 ps 表中,从而导致 HTTP 请求成功。

  10. 因此,我误以为无法运行 apache,因为已经有某个程序在监听端口 80,而不是 apache conf 本身的问题。

答案3

我刚刚遇到了与 OSX El Capitan 和 Avast 防病毒软件相同的问题。sudo lsof -i ':80'显示了与 avast.com 的连接。

me@destop ~|master$ sudo lsof -i ':80'
Password:
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.avast 7964 root   58u  IPv4 0xc4c1bba31fcc2c7f      0t0  TCP 192.168.100.111:52381->mia04-004.ff.avast.com:http (ESTABLISHED)

我不得不

  1. 使用以下方法卸载 Avast/Applications/Uninstall Avast.app
  2. sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
  3. 重新开始

以防止它使用端口 80。

相关内容