it-swarm.com.de

Woher wissen Sie, welches Programm auf einem bestimmten Port empfangsbereit ist?

Ich vermute, dass ein Programm an Port 8000 auf meinem Computer empfangsbereit ist.

Wenn ich den folgenden Befehl ausführe, wird dieser Fehler angezeigt:

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

Wenn ich einen anderen Port verwende (8000 ist die Standardeinstellung), funktioniert der Webserver einwandfrei.

Wenn ich wget localhost:8000 über die Befehlszeile ausführe, wird 404 Not Found zurückgegeben.

Was kann ich tun (oder welche Tools sind verfügbar), um herauszufinden, welches Programm an Port 8000 empfangsbereit ist und von wo aus dieses Programm konfiguriert wurde?

370
yansal

Öffnen Sie Ihr Terminal und geben Sie als

lsof -i :8000

dieser Befehl listet Ihnen die Anwendung auf, die von diesem Port mit PID verwendet wird. (Wenn über Sudo keine Ergebnisse 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.

299
rɑːdʒɑ

Mit netstat können Sie feststellen, welcher Prozess welchen Port überwacht.

Mit diesem Befehl können Sie alle Details anzeigen:

Sudo netstat -peanut

wenn Sie genau wissen müssen, welcher Port 8000 abhört, können Sie dies verwenden:

Sudo netstat -peanut | grep ":8000 "

Es gibt keinen Prozess, der sich vor netstat verstecken kann.

374

Um die Antwort von @ 33833 zu erläutern, können Sie einige 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 belegt.

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 sich um Java handelt, was weniger hilfreich ist. Wenn wir den Befehl ps mit der PID ausführen, können wir sofort erkennen, dass es sich um CrashPlan handelt.

172
Andrew Burns

Versuchen Sie ss from iproute2 package:

_ss -nlp | grep 8000
_
13
korjjj

Eine andere Möglichkeit, socklist aus procinfo zu verwenden:

man socklist

BESCHREIBUNG
socklist ist ein Perl-Skript, das Ihnen eine Liste aller offenen Sockets mit Aufzählung von Typen, Port, Inode, UID, PID, FD und dem Programm, zu dem es gehört, gibt.

_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
_
6
user.dz

Sie können nmap verwenden.

Es ist wirklich wichtig zu wissen, welche Ports in Ihrem PC offen sind. Dies ist nicht nur für Linux nützlich, sondern auch für andere Betriebssysteme. Linux verfügt über eine Vielzahl von Tools, um zu überprüfen, welche Ports offen sind Kommandozeilen-Tool, aber es gibt auch ein grafisches Frontend dafür, wenn Sie dies vorziehen.1

um es zu installieren, drücken Sie einfach Ctrl+Alt+T auf Ihrer Tastatur, um das Terminal zu öffnen. Führen Sie beim Öffnen den folgenden Befehl aus:

Sudo apt-get install nmap

Weitere Informationen zu nmap und anderen Dienstprogrammen finden Sie unter Here

1 Quelle: garron.me

2
Mitch