不知道在OS X的80端口上监听什么


34

我正在使用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专家都可以帮助我诊断此问题吗?


不是您的有趣问题的直接答案,而是:如果将浏览器指向http:// localhost怎么办?
Arjan

lsof您使用的grep将恢复为空白;端口号映射到/etc/services名称。尝试lsof -i | grep http...
Nevin Williams

1
实际上,-i :port仅当您使用grep时,如果使用格式,/ etc / services映射就不成问题。问题是lsof需要root privs才能查看其他用户的进程,所以您应该使用sudo lsof -i :80(我会尝试在没有的情况下使用grep,只是为了确保...)
Gordon Davisson

1
大家好,谢谢您到目前为止的建议,但并没有提出任何建议-即使是root用户,也没有任何混乱,实际上没有监听80端口。–
geoff

您是否尝试过lsof -i :80在该Telnet会话中仍保持连接状态?除了尝试http:// localhost /之外,也许在该Telnet提示符下键入某些内容会显示出某些内容...?(再次,我知道:即使您以这种方式解决问题
Arjan

Answers:


45

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

sudo lsof -i ':80'

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

启动时,启动时会扫描作业列表,它会保留并监听这些作业请求的所有端口。如果在plist中通过“ OnDemand”键指示了该内容,则该守护程序当时实际上并未加载。而是,launched将侦听端口,在需要时启动守护程序,在不需要时将其关闭。加载守护程序后,launchd将对其进行跟踪,并在需要时确保其正在运行。


因此,我想我的想法是正确的,即除非在Telnet会话中连接时运行该命令,否则实际上sudo lsof -i ':80' 可能不会返回任何消息?但是,即使没有这些命令,http:// localhost /仍可能会显示一些Apache欢迎页面?
Arjan

(我相信您的答案可能是解决方案;它与OP中的所有评论均不匹配。)
Arjan

1
感谢您的精彩回答。我现在设法解决了这个问题:1. httpd.conf中有一个错误,因此sudo apachectl start并不是启动apache。2.但是启动时正在侦听端口80,准备将请求转发到不存在的服务器。3.但是,启动不是按照常规意义上的进行监听的-也就是说-sudo lsof -i:80的结果是空白的,对于netstat也是如此。4.我猜,发布具有xinetd之类的神奇之处,因为它并未正式监听一个端口,但是通过贿赂内核设法以某种方式允许连接到该端口。
geoff

2
对我来说,解决问题的方法是sudo apachectl stop在终端上运行。
MikeiLL

这并没有为我工作,但这个版本没有显示什么正在运行(OS高塞拉利昂10.13.6)sudo lsof -i -P | grep -i "80"superuser.com/questions/984919/...
RoboBear

7

只是为了使实际答案清楚,以防用户正在搜索它。

  1. launchd扫描/System/Library/LaunchDaemons/启动时,从org.apache.httpd.plist Apache,它需要将端口80转发到其上。

  2. sudo apachectl start 已完成

  3. 但是,httpd.conf文件中有一个错误,表示apache没有启动,尽管没有通过apache报告。apachectl命令。

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

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

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

  7. sudo netstat -an | grep LISTEN 未对端口80给出任何答案

  8. 据我所知,没有任何诊断工具能够显示80端口正在使用或正在监听的信息。

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

  10. 因此,我误以为我无法运行apache,因为端口80上已经在监听某些内容,而不是apache conf本身


那么httpd.conf有什么问题?我现在遇到这个问题,根据您的回答,我不确定如何继续.. ??
德鲁·安杰

0

我只是在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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.