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を指定するとどうなりますか?
アルジャン

使用したlsofgrepは空白に戻ります。ポート番号は/etc/services名前にマップされます。試してみてくださいlsof -i | grep http...
ネヴィンウィリアムズ

1
実際、/ etc / servicesマッピングは-i :port、grep を使用する場合にのみ、形式を使用する場合は問題になりません。何が問題になることはつまり、lsofあなたが使用する必要がありますので、他のユーザのプロセスを確認するために、ルートPRIVSを必要とするsudo lsof -i :80(と私はせずに、それを試してみたgrep、念のため...)
ゴードンDavisson

1
これまでに提案してくれてありがとう、こんにちはすべて、しかし何も上がっていない-でも、rootとして、そしてgrepするなし、実際にポート80を聞いとして記載されているものは何もありません
ジェフ・

lsof -i :80そのTelnetセッションで接続したままにしてみましたか?そして、http:// localhost /を試すこととは別に、Telnetプロンプトで何かを入力すると何かが明らかになるかもしれません...?(繰り返しますが、そのように理解しても、それはあなたの質問に対する答えではありません...)
アルジャン

回答:


45

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

sudo lsof -i ':80'

Mac OS Xには、apachectlas を使用して制御できるApache Webサーバーが含まれていrootます。通常はを介して開始されlaunchd、対応する構成ファイルは/System/Library/LaunchAgents/org.apache.httpd.plistです。ポート80で実行されているこのApacheでない場合は、おそらくlaunchd、Appleのデーモンマネージャーの実装です。ウィキペディアによると:

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


だから、Telnetセッションで接続されている間にそれ実行しない限り、実際には何も返さsudo lsof -i ':80' ないかもしれない私の考えは正しかったと思いますか?しかし、これらのコマンドがなくても、http:// localhost /はまだApacheのウェルカムページを表示しているでしょうか?
アルジャン

(おそらくあなたの答えは解決策であると信じています。OPからのすべてのコメントと一致するわけではありません。)
Arjan

1
この素晴らしい回答をありがとう。これで解決できました。1. httpd.confに間違いがあったため、sudo apachectl startはapacheを起動しませんでした。2.しかし、launchdはポート80でリッスンしており、存在しないサーバーにリクエストを転送する準備ができていました。3.ただし、launchdは従来の意味でリッスンしていませんでした。つまり、sudo lsof -i:80の結果は空白でした。netstat4でも同様です。ポートですが、どういうわけかカーネルを買収することにより、ポートへの接続を許可します。
ジェフ

2
私にとって、問題を解決sudo apachectl stopしたのはターミナルで実行されていた。
MikeiLL

これは私にはうまくいきませんでしたが、このバージョンsuperuser.com/questions/984919/sudo lsof -i -P | grep -i "80"から実行されていたもの(OS High Sierra 10.13.6)を示していました…
RoboBear

7

ユーザーがこれを検索している場合に備えて、実際の答えを明確にするためです。

  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. httpdがpsテーブルにあるように、apacheのhttpd.confを修正し、apacheを正常に再起動すると、HTTPリクエストが成功しました。

  10. したがって、apache conf自体が原因ではなく、すでにポート80でリッスンしているものがあるため、apacheを実行できないと勘違いしていました


では、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. でアバストをアンインストールします /Applications/Uninstall Avast.app
  2. sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
  3. 再起動

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.