私は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の専門家がこの問題の診断に役立つことはありますか?
他のユーザーのプロセスを表示するには、これらのコマンドをroot
として実行する必要があります。次に例を示します。
Sudo lsof -i ':80'
Mac OS Xには、apachectl
をroot
として使用して制御できるApache Webサーバーが含まれています。通常はlaunchd
から起動します。対応する設定ファイルは/System/Library/LaunchAgents/org.Apache.httpd.plist
です。このApacheがポート80で動作していない場合は、おそらく launchd 、つまりデーモンマネージャの実装です。 ウィキペディア によると、
起動時にlaunchdがジョブリストをスキャンすると、それらのジョブが要求したすべてのポートを予約して待機します。 plDに "OnDemand"キーでその旨が示されている場合、デーモンは実際にはその時点ではロードされていません。むしろ、launchdはポートをlistenし、必要に応じてデーモンを起動し、そうでない場合にはシャットダウンします。デーモンがロードされた後、launchdはそれを追跡し、必要に応じて実行されていることを確認します。
ユーザーがこれを探している場合に実際の答えを明確にするためだけに。
launchdは起動時に/System/Library/LaunchDaemons/
をスキャンし、org.Apache.httpd.plist
から、Apacheの起動時にポート80を転送する必要があることを確認します。
Sudo apachectl start
が行われました
しかし、httpd.conf
ファイルに間違いがあり、Apacheが起動されていないという意味でしたが、これはapachectl
コマンドでは報告されませんでした。
Launchdは、Apacheが稼働していると思ったので、ポート80で待機することにしました。
しかし、どのHTTPリクエストの内容でも、すぐに接続が切断されました。
Sudo lsof -i :80
から回答が得られませんでした
Sudo netstat -an | grep LISTEN
はポート80に対して応答がありませんでした
80番ポートが使用中または待機中であることを示す診断ツールで私が知ることができる限り、情報はありませんでした。
apacheのhttpd.confを修正し、httpdがpsテーブルに入るようにApacheを正常に再起動すると、HTTPリクエストが成功しました。
したがって、私は、Apache conf自体が原因ではなく、すでにポート80で待機しているものがあるために、Apacheを実行できないと誤解していました。
私はちょうど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)
そうしなければならなかった
/Applications/Uninstall Avast.app
を使ってAvastをアンインストールします。Sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
ポート80を使用しないようにします。