Jak się dowiedzieć, jaki program nasłuchuje na danym porcie?


377

Podejrzewam, że program nasłuchuje na porcie 8000na moim komputerze.

Po uruchomieniu następującego polecenia pojawia się ten błąd:

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

Jeśli użyję innego portu ( 8000jest to ustawienie domyślne), serwer sieci działa poprawnie.

Jeśli uruchomię wget localhost:8000z wiersza poleceń, zwraca 404 Not Found.

Co mogę zrobić (lub jakie narzędzia są dostępne), aby znaleźć program nasłuchujący na porcie 8000, a stamtąd, gdzie ten program jest skonfigurowany?

Odpowiedzi:


313

Otwórz terminal i wpisz jako

lsof -i :8000

to polecenie wyświetli listę aplikacji używanych przez ten port z PID. (Jeśli nie zostaną wyświetlone żadne wyniki, sudoponieważ użytkownik może nie mieć uprawnień do niektórych procesów).

Na przykład z portem 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)

I 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)

Mam nadzieję, że to pomaga.


2
Działa to również na OSX za to, co jest warte .....
reevesy

2
Dodanie -s TCP:LISTENogranicza wynik do rzeczywistego gniazda nasłuchującego i jego procesu.
jhermann

1
Jeśli szukasz portu 8000, zwraca PID 1889? wat
CodyBugstein

Tak, istnieje usługa z PID 1889 korzystająca z portu 8881. czy coś mi brakuje?
rɑːdʒɑ

1
@Zamknij przykład wyszukuje port 8881. Kolumna PID zawiera identyfikatory procesów, a kolumna NAME zawiera porty.
Freek de Bruijn,

377

Możesz użyć netstat, aby zobaczyć, który proces nasłuchuje na którym porcie.

Możesz użyć tego polecenia, aby uzyskać pełny szczegół:

sudo netstat -peanut

jeśli chcesz dokładnie wiedzieć, który nasłuchuje na porcie 8000, możesz użyć tego:

sudo netstat -peanut | grep ":8000 "

Nie ma procesu, który mógłby ukryć przed netstat.


117
netstat -peanutłatwiej zapamiętać niż netstat -taupen!
Douglas B. Staple

9
Dobry ! - Właśnie zredagowałem odpowiedź, aby odzwierciedlić twój komentarz. Dziękuję Ci.
Antoine Rodriguez

2
„fuser -k 8000 / tcp”, aby zwolnić ten port
Jay Modi

3
jeśli w kolumnie „PID / nazwa programu” zamiast nazwy procesu widoczne są myślniki, zapomniałeś dodać „sudo”
v.shashenko

3
więc to orzeszki ziemne eh
prusswan

172

Aby wyjaśnić odpowiedź do @ 33833, możesz uzyskać bardzo szczegółowe informacje, na przykład:

$ 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

Widzę tam, że kałamarnica jest procesem, ale tak naprawdę to mój squid-deb-proxyport zajmuje.

Kolejny dobry przykład aplikacji 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

Możesz zobaczyć w lsof(LiSt Open Files), że jest to Java, co jest mniej niż pomocne. Po uruchomieniu pspolecenia z PID od razu widać, że jest to CrashPlan.


9
Jednym poleceniem:lsof -t -i :8000 | xargs ps -fp
Brett Y

8
Musiałem przedrostek, sudo ale potem zadziałało to dla mnie. Dzięki.
Dwayne Crooks,

4
Uwaga: bez sudociebie nie otrzymasz błędu, po prostu nic nie otrzymasz w odpowiedzi.
Frank Nocke,

13

Wypróbuj ssz iproute2pakietu:

ss -nlp | grep 8000

5
ssposiada również własne funkcje filtrowania: ss -nlp '( sport = :8000 )'.
GnP

6

Inny sposób korzystania socklistz procinfopakietu:

man socklist

OPIS
socklistto skrypt Perla, który daje listę wszystkich otwartych gniazd, wyliczając typy, port, i-węzeł, uid, pid, fd oraz program, do którego należy.

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

Możesz użyć nmap.

Naprawdę ważne jest, aby wiedzieć, które porty są otwarte w komputerze, jest to przydatne nie tylko w systemie Linux, ale także w innych systemach operacyjnych, Linux ma wiele narzędzi do sprawdzania, które porty są otwarte, najczęściej jest nmap, który jest narzędzie wiersza poleceń, ale istnieje również Graficzny frontEnd, jeśli wolisz w ten sposób. 1

aby go zainstalować, naciśnij Ctrl+ Alt+ Tna klawiaturze, aby otworzyć Terminal. Po otwarciu uruchom poniższe polecenie:

sudo apt-get install nmap

Aby uzyskać więcej informacji o nmap i innych narzędziach, przejdź tutaj

1 Źródło: garron.me


nmap powie ci tylko, że port jest otwarty, a nie który proces go otworzył.
Andrew Burns

1
Kliknąłem na twoje źródło, aby przeczytać [nmap] tries to guess which service is listening on each port, but it can make mistakestuż przed tym, jak sugeruje faktyczną metodę, aby dowiedzieć się, który proces jest właścicielem gniazda.
GnP

@gnp Możesz także rzucić okiem na This .
Mitch

@Mitch zrobiłem. OP musi znać dokładny PID procesu w systemie lokalnym. Nmap nie jest tu właściwym narzędziem, nawet w przypadku wykrywania usług i wersji. Albo dopasuje element w bazie danych nmaps, który nadal pozwala OP na ciemność, co do procesu zabicia lub ponownej konfiguracji, albo nie będzie, a OP będzie miał ładny odcisk palca i link do insecure.org
GnP
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.