特定のポートでリッスンしているプログラムを知る方法は?


377

プログラムが8000マシンのポートでリッスンしていると思われます。

次のコマンドを実行すると、このエラーが発生します。

> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use

別のポート(8000デフォルト)を使用すると、Webサーバーは正常に動作します。

wget localhost:8000コマンドラインから実行すると、が返されます404 Not Found

port 8000でリッスンしているプログラムを見つけ、そこからそのプログラムが構成されている場所を見つけるために、私は何ができますか(または利用可能なツール)?

回答:


314

ターミナルを開き、次のように入力します

lsof -i :8000

そのコマンドは、そのポートで使用されているアプリケーションをPIDでリストします。(sudo特定のプロセスに対する許可がない可能性があるため、結果が実行されない場合。)

たとえば、ポート8000​​(python3 -m http.server)の場合:

$ lsof -i :8000
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

ポート22(SSH):

$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)
sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

お役に立てば幸いです。


2
また、これは.....何の価値のためにOSX上で動作します
reevesy

2
追加-s TCP:LISTENすると、結果が実際のリスニングソケットとそのプロセスに制限されます。
ジャーマン

1
ポート8000​​を検索すると、戻りますPID 1889か?ワット
CodyBugstein

はい、ポート8881を使用したPID 1889のサービスがあります。何か不足していますか?
rɑːdʒɑ

1
@Imrayの例では、ポート8881が検索されます。PID列にはプロセスIDが含まれ、NAME列にはポートが含まれます。
フリークデブルーイン

377

netstatを使用して、どのプロセスがどのポートでリッスンしているかを確認できます。

このコマンドを使用して、詳細を確認できます。

sudo netstat -peanut

ポート8000​​でリッスンしているものを正確に知る必要がある場合は、これを使用できます。

sudo netstat -peanut | grep ":8000 "

netstatから隠れるプロセスはありません。


117
netstat -peanutより覚えやすいnetstat -taupen
ダグラスB.ステープル

9
いいね!-コメントを反映するために回答を編集しました。ありがとうございました。
アントワーヌロドリゲス

2
そのポートを解放する「8000 / tcpの-k定着」
ジェイ・モディ

3
コラム「PID /プログラム名」であなたの代わりに、プロセス名のダッシュを見れば、あなたは「sudoを」追加するのを忘れ
v.shashenko

3
だからピーナッツええ
prusswan

172

@ 33833で答えを詳しく説明するには、次のような非常に詳細な情報を入手できます。

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

イカがプロセスであることがすぐにわかりますが、実際にsquid-deb-proxyポートを使用しているのは私のことです。

Javaアプリの別の良い例:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

あなたはで見ることができlsof、それが参考に満たないのjava、であること(一覧オープンファイル)。psPIDでコマンドを実行すると、CrashPlanであることがすぐにわかります。


9
1つのコマンドで:lsof -t -i :8000 | xargs ps -fp
ブレットY

8
接頭辞を付ける必要sudo がありましたが、その後はうまくいきました。ありがとう。
ドウェインクルークス

4
注:sudoエラーが発生しないと、応答として何も返されません。
フランクノック

13

パッケージssから試してくださいiproute2

ss -nlp | grep 8000

5
ssには独自のフィルタリング機能もありますss -nlp '( sport = :8000 )'
GnP 14

6

socklistfrom procinfoパッケージを使用する別の方法:

man socklist

DESCRIPTION
socklistは、開いているすべてのソケット、列挙型、ポート、inode、uid、pid、fd、およびそれが属するプログラムのリストを提供するPerlスクリプトです。

sudo socklist

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon

2

nmapを使用できます。

PCでどのポートが開いているかを知ることは非常に重要です。これはLinuxだけでなく、他のオペレーティングシステムにも役立ちます。Linuxには、開いているポートをチェックするツールがたくさんあります。最も一般的なのはnmapです。コマンドラインツールだけでなく、グラフィカルなフロントエンドも存在します。1

インストールするには、キーボードのCtrl+ Alt+ Tを押してターミナルを開きます。開いたら、次のコマンドを実行します。

sudo apt-get install nmap

nmapの詳細については、およびその他のユーティリティについては、行くここで

1出典: garron.me


nmapは、ポートが開いていることのみを通知し、どのプロセスがポートを開いたかを通知しません。
アンドリューバーンズ14年

1
[nmap] tries to guess which service is listening on each port, but it can make mistakesどのプロセスがソケットを所有しているかを調べる実際の方法を提案する直前に、ソースをクリックして読みました。
GnP 14

@gnpまた、Thisを見てみたいかもしれません。
ミッチ

@Mitchやりました。OPは、ローカルシステム上のプロセスの正確なPIDを知る必要があります。Nmapは、ここでは適切なツールではなく、サービスやバージョンの検出でも機能しません。nmapsデータベースのアイテムに一致します。これにより、OPを強制終了または再構成するプロセスについて暗闇の中で操作できるようになります。そうでない場合、OPには素晴らしいフィンガープリントとinsecure.orgへのリンクがあります
GnP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.