web-dev-qa-db-ja.com

何がOS Xのポート80で待機しているのかわからない

私はOSX Mountain Lion 10.8.3を使っています、そして私は新しくMacを再起動しました。

私はサービスを開始したいのですが(Apacheのように80番ポートで)、既に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

そこに異常な何もない

私の質問は、どのように私はどんなパケット転送規則を表示することができますか?あるいは、OSXの専門家がこの問題の診断に役立つことはありますか?

34
geoff

他のユーザーのプロセスを表示するには、これらのコマンドをrootとして実行する必要があります。次に例を示します。

Sudo lsof -i ':80'

Mac OS Xには、apachectlrootとして使用して制御できるApache Webサーバーが含まれています。通常はlaunchdから起動します。対応する設定ファイルは/System/Library/LaunchAgents/org.Apache.httpd.plistです。このApacheがポート80で動作していない場合は、おそらく launchd 、つまりデーモンマネージャの実装です。 ウィキペディア によると、

起動時にlaunchdがジョブリストをスキャンすると、それらのジョブが要求したすべてのポートを予約して待機します。 plDに "OnDemand"キーでその旨が示されている場合、デーモンは実際にはその時点ではロードされていません。むしろ、launchdはポートをlistenし、必要に応じてデーモンを起動し、そうでない場合にはシャットダウンします。デーモンがロードされた後、launchdはそれを追跡し、必要に応じて実行されていることを確認します。

45
Daniel Beck

ユーザーがこれを探している場合に実際の答えを明確にするためだけに。

  1. launchdは起動時に/System/Library/LaunchDaemons/をスキャンし、org.Apache.httpd.plistから、Apacheの起動時にポート80を転送する必要があることを確認します。

  2. Sudo apachectl startが行われました

  3. しかし、httpd.confファイルに間違いがあり、Apacheが起動されていないという意味でしたが、これはapachectlコマンドでは報告されませんでした。

  4. Launchdは、Apacheが稼働していると思ったので、ポート80で待機することにしました。

  5. しかし、どのHTTPリクエストの内容でも、すぐに接続が切断されました。

  6. Sudo lsof -i :80から回答が得られませんでした

  7. Sudo netstat -an | grep LISTENはポート80に対して応答がありませんでした

  8. 80番ポートが使用中または待機中であることを示す診断ツールで私が知ることができる限り、情報はありませんでした。

  9. apacheのhttpd.confを修正し、httpdがpsテーブルに入るようにApacheを正常に再起動すると、HTTPリクエストが成功しました。

  10. したがって、私は、Apache conf自体が原因ではなく、すでにポート80で待機しているものがあるために、Apacheを実行できないと誤解していました。

7
geoff

私はちょうど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. /Applications/Uninstall Avast.appを使ってAvastをアンインストールします。
  2. Sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
  3. 再起動

ポート80を使用しないようにします。

0
spyle