geo*_*off 38 networking port port-forwarding iptables macos
我在 OSX Mountain Lion 10.8.3 上,我刚刚重新启动了我的 Mac。
我想启动一个服务(比如端口 80 上的 Apache),但是端口 80 已经发生了一些事情:
telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)
等等,我听到你说,你可以用 lsof 或 netstat 找到。除了什么都没有
netstat -an | grep LISTEN | grep '\.80'
*comes back blank*
lsof -i :80 | grep LISTEN
*comes back blank
Run Code Online (Sandbox Code Playgroud)
因此,根据我对 unix 系统的了解,我认为这一定是数据包转发规则吗?即数据包正在从入站端口 80 转发到其他正在侦听该服务的东西。
ipfw show
65535 0 0 allow ip from any to any
Run Code Online (Sandbox Code Playgroud)
嗯,没什么异常
pfctl -s nat
No ALTQ support in kernel
ALTQ related functions disabled
Run Code Online (Sandbox Code Playgroud)
没有什么不寻常的
我的问题是,如何显示任何数据包转发规则...在 Linux 上,我可能只执行 iptables -L -t NAT 或 iptables -L。或者,任何 OSX 专家可以帮助我诊断这个问题吗?
Dan*_*eck 51
您需要运行这些命令root来显示其他用户的进程,例如:
sudo lsof -i ':80'
Run Code Online (Sandbox Code Playgroud)
Mac OS X中包括可使用控制的Apache Web服务器apachectl作为root。通常通过 启动launchd,对应的配置文件是/System/Library/LaunchAgents/org.apache.httpd.plist. 如果不是这个 Apache 在端口 80 上运行,它可能是launchd,Apple 的守护进程管理器实现。根据维基百科:
当 launchd 在启动时扫描作业 plist 时,它会保留并侦听这些作业请求的所有端口。如果在 plist 中通过“OnDemand”键指示,守护进程实际上并没有被加载。相反,launchd 将侦听端口,在需要时启动守护进程,并在不需要时将其关闭。加载守护进程后,launchd 将跟踪它并确保它在需要时正在运行。
geo*_*off 10
只是为了让实际答案清楚,以防用户搜索此问题。
launchd 会/System/Library/LaunchDaemons/在启动时扫描并从中计算org.apache.httpd.plist出,当 apache 启动时,它需要将端口 80 转发到它上面。
sudo apachectl start 已完成
然而,httpd.conf文件中有一个错误,意味着 apache 没有启动,尽管这不是通过apachectl命令报告的。
Launchd 决定侦听端口 80,因为它认为 apache 已启动。
但是任何 HTTP 请求的内容都会导致连接立即关闭。
sudo lsof -i :80 没有答案
sudo netstat -an | grep LISTEN 端口 80 没有响应
据我所知,在任何诊断工具中都没有任何信息表明端口 80 正在使用或正在侦听。
修复 apache 的 httpd.conf 并成功重新启动 apache,因此 httpd 在 ps 表中,导致 HTTP 请求成功。
因此,我错误地认为我无法运行 apache,因为已经有一些东西在监听端口 80,而不是 apache conf 本身才是原因
| 归档时间: |
|
| 查看次数: |
72998 次 |
| 最近记录: |