Wie kann man wissen, welches Programm an einem bestimmten Port abhört?

286

Ich vermute, dass ein Programm Port 8000 auf meinem Rechner abhört.

Wenn ich den folgenden Befehl ausführe, bekomme 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), läuft der Webserver einwandfrei.

Wenn ich wget localhost:8000 von der Befehlszeile aus starte, wird 404 Not Found zurückgegeben.

Was kann ich tun (oder welche Werkzeuge sind verfügbar), um herauszufinden, welches Programm auf port 8000 abgehört wird, und von dort, wo dieses Programm konfiguriert ist?

    
yansal 06.04.2013, 10:36
quelle

6 Antworten

180

Öffnen Sie Ihr Terminal und geben Sie als

ein
lsof -i :8000

Dieser Befehl listet die von diesem Port verwendete Anwendung mit PID auf. (Wenn keine Ergebnisse über sudo ausgeführt werden, da Sie möglicherweise keine Berechtigung für bestimmte Prozesse haben.)

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.

    
Ten-Coin 06.04.2013, 10:50
quelle
326

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üssen, 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.

    
Antoine Rodriguez 06.04.2013 10:58
quelle
163

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 dort sehen, dass der Tintenfisch der Prozess ist, aber es ist tatsächlich mein squid-deb-proxy , der den Port aufnimmt.

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 in lsof (LiSt Open Files) sehen, dass es Java ist, was weniger als hilfreich ist. Wenn wir den Befehl ps mit der PID ausführen, können wir sofort sehen, dass es CrashPlan ist.

    
Andrew Burns 17.06.2014 17:55
quelle
10

Probieren Sie ss von iproute2 Paket:

ss -nlp | grep 8000
    
korjjj 06.04.2013 10:44
quelle
5

Eine andere Methode, die socklist von procinfo package verwendet:

man socklist

  

DESCRIPTION
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
    
user.dz 29.06.2015 12:23
quelle
2

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

1 Quelle: garron.me

    
Mitch 06.04.2013 10:46
quelle

Tags und Links