Frage Wie kann ich wissen, welches Programm an einem bestimmten Port abgehört wird?


Ich vermute, dass ein Programm auf Port hört 8000 auf meiner Maschine.

Wenn ich den folgenden Befehl ausführen, erhalte ich diesen Fehler:

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

Wenn ich einen anderen Port verwende (8000 ist der Standard), der Webserver läuft einwandfrei.

Wenn ich renne wget localhost:8000 Von der Befehlszeile kehrt es zurück 404 Not Found.

Was kann ich tun (oder welche Tools verfügbar sind), um herauszufinden, welches Programm den Port überwacht? 8000und von dort, wo das Programm konfiguriert ist?


291
2018-04-06 08:36


Ursprung




Antworten:


Öffnen Sie Ihr Terminal und tippen Sie als

lsof -i :8000

Dieser Befehl listet Ihnen die Anwendung auf, die von diesem Port mit PID verwendet wird. (Wenn keine Ergebnisse über sudo da du vielleicht keine Erlaubnis für bestimmte Prozesse hast.)

Zum Beispiel mit Port 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)

Und Port 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)

Ich hoffe, das hilft.


189
2018-04-06 08:50



Dies funktioniert auch auf OSX für was es wert ist ..... - reevesy
Hinzufügen -s TCP:LISTEN schränkt das Ergebnis auf den tatsächlichen hörenden Socket und seinen Prozess ein. - jhermann
Wenn Sie nach Port 8000 suchen, wird zurückgegeben PID 1889? wat - CodyBugstein
Ja, es gibt einen Dienst mit PID 1889 über Port 8881. Fehle ich irgendetwas? - Ten-Coin
@Imray Das Beispiel sucht nach Port 8881. Die PID-Spalte enthält die Prozess-IDs und die Spalte NAME enthält die Ports. - Freek de Bruijn


Sie können netstat verwenden, um zu sehen, welcher Prozess an welchem ​​Port abhört.

Sie können diesen Befehl verwenden, um ein vollständiges Detail zu erhalten:

sudo netstat -peanut

Wenn Sie genau wissen möchten, welches an Port 8000 abgehört wird, können Sie folgendes verwenden:

sudo netstat -peanut | grep ":8000 "

Es gibt keinen Prozess, der sich vor Netstat verbergen kann.


329
2018-04-06 08:58



netstat -peanut ist leichter zu merken als netstat -taupen! - Douglas B. Staple
Gute! - Ich habe gerade die Antwort bearbeitet, um deinen Kommentar zu reflektieren. Vielen Dank. - Antoine Rodriguez
'fuser -k 8000 / tcp', um diesen Port freizugeben - Jay Modi
Wenn in der Spalte "PID / Programmname" anstelle eines Prozessnamens Bindestriche angezeigt werden, haben Sie vergessen, "sudo" hinzuzufügen - v.shashenko
also sind es Erdnüsse, eh - prusswan


Um die Antwort von @ 33833 zu erläutern, können Sie sehr detaillierte Informationen erhalten, zum Beispiel:

$ 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

Ich kann genau sehen, dass Tintenfisch ist der Prozess, aber es ist wirklich mein squid-deb-proxy das nimmt den Hafen auf.

Ein weiteres gutes Beispiel für eine Java App:

$ 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

Sie können sehen in lsof (LiSt Open Files) dass es Java ist, was weniger als hilfreich ist. Laufen der ps Befehl mit der PID können wir sofort sehen, dass es CrashPlan ist.


164
2018-06-17 15:55



In einem Befehl: lsof -t -i :8000 | xargs ps -fp - Brett Y
Ich musste vorangestellt werden sudo  aber danach hat es für mich funktioniert. Vielen Dank. - Dwayne Crooks
Hinweis: ohne sudo Sie werden keinen Fehler bekommen, Sie werden einfach nichts als Antwort bekommen. - Frank Nocke


Versuchen ss von iproute2 Paket:

ss -nlp | grep 8000

10
2018-04-06 08:44



ss hat auch seine eigenen Filtermöglichkeiten: ss -nlp '( sport = :8000 )'. - GnP


Ein anderer Weg mit socklist von procinfo Paket:

man socklist

BESCHREIBUNG
socklist ist ein Perl-Skript, das Ihnen eine Liste aller geöffneten Sockets, Aufzählungstypen, Ports,          inode, uid, pid, fd und das Programm, zu dem es gehört.

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

5
2018-06-29 10:23





Sie können nmap verwenden.

Es ist wirklich wichtig zu wissen, welche Ports in Ihrem PC offen sind   ist nicht nur nützlich für Linux, sondern auch für andere Betriebssysteme,   Linux hat viele Tools, um zu überprüfen, welche Ports am häufigsten geöffnet sind   common ist nmap, welches ein Kommandozeilenwerkzeug ist, aber auch existiert a   Grafische FrontEnd für Sie, wenn Sie diesen Weg bevorzugen.1

Um es zu installieren, drücken Sie einfach Strg+Alt+T auf Ihrer Tastatur, um Terminal zu öffnen. Wenn es geöffnet wird, führen Sie den folgenden Befehl aus:

sudo apt-get install nmap

Weitere Informationen zu nmap und anderen Dienstprogrammen finden Sie unter Hier

1Quelle:garron.me


2
2018-04-06 08:46



nmap wird Ihnen nur sagen, dass ein Port offen ist, nicht welcher Prozess es geöffnet hat. - Andrew Burns
Ich habe zu deiner Quelle geklickt, um zu lesen [nmap] tries to guess which service is listening on each port, but it can make mistakes kurz bevor es eine tatsächliche Methode vorschlägt, um herauszufinden, welcher Prozess den Sockel besitzt. - GnP
@gnp Vielleicht möchten Sie auch einen Blick darauf werfen Dies. - Mitch♦
@Mitch tat ich. Das OP muss die genaue PID eines Prozesses auf dem lokalen System kennen. Nmap ist hier nicht das richtige Werkzeug, auch nicht mit Service- und Versionserkennung. Entweder wird es einem Objekt in der nmaps-Datenbank entsprechen, was OP immer noch im Dunkeln lässt, welcher Prozess zu töten oder zu rekonfigurieren ist, oder es wird nicht und OP wird einen schönen Fingerabdruck und einen Link zu insecure.org haben - GnP