
Při odstraňování problémů se síťovou konektivitou nebo problémy se specifickými aplikacemi by jednou z prvních věcí, které byste měli zkontrolovat, mělo být, jaké porty se ve vašem systému skutečně používají a která aplikace na konkrétním portu naslouchá.
Tento článek vysvětluje, jak používat netstat
, ss
a lsof
příkazy ke zjištění, které služby naslouchají na kterých portech. Pokyny jsou použitelné pro všechny operační systémy založené na Linuxu a Unixu, jako je macOS.
Co je port poslechu č.
Síťový port je identifikován svým číslem, přidruženou IP adresou a typem komunikačního protokolu, jako je TCP nebo UDP.
Listening port je síťový port, na kterém aplikace nebo proces naslouchá a funguje jako komunikační koncový bod.
Každý naslouchací port lze otevřít nebo zavřít (filtrovat) pomocí firewallu. Obecně řečeno, otevřený port je síťový port, který přijímá příchozí pakety ze vzdálených míst.
Nemůžete mít dvě služby naslouchající stejnému portu na stejné IP adrese.
Pokud například provozujete webový server Apache, který naslouchá na portech 80
a 443
a pokusíte se nainstalovat Nginx, později se nepodaří spustit, protože porty HTTP a HTTPS jsou již používány.
Zkontrolujte naslouchací porty pomocí netstat
#
netstat
je nástroj příkazového řádku, který může poskytovat informace o síťových připojeních.
Chcete-li zobrazit seznam všech portů TCP nebo UDP, na kterých se naslouchá, včetně služeb využívajících porty a stavu soketu, použijte následující příkaz:
sudo netstat -tunlp
Možnosti použité v tomto příkazu mají následující význam:
-t
- Zobrazit porty TCP.-u
– Zobrazit porty UDP.-n
- Zobrazovat číselné adresy namísto rozlišení hostitelů.-l
- Zobrazit pouze naslouchající porty.-p
- Zobrazit PID a název procesu posluchače. Tyto informace se zobrazí pouze v případě, že příkaz spustíte jako root nebo sudouser.
Výstup bude vypadat nějak takto:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 929/master
tcp6 0 0 :::3306 :::* LISTEN 534/mysqld
tcp6 0 0 :::80 :::* LISTEN 515/apache2
tcp6 0 0 :::22 :::* LISTEN 445/sshd
tcp6 0 0 :::25 :::* LISTEN 929/master
tcp6 0 0 :::33060 :::* LISTEN 534/mysqld
udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient
V našem případě jsou důležité sloupce:
Proto
- Protokol používaný soketem.Local Address
- IP adresa a číslo portu, na kterém proces naslouchá.PID/Program name
- PID a název procesu.
Pokud chcete výsledky filtrovat, použijte grep
příkaz. Chcete-li například zjistit, který proces naslouchá na portu TCP 22, zadejte:
sudo netstat -tnlp | grep :22
Výstup ukazuje, že port 22 na tomto počítači používá server SSH:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp6 0 0 :::22 :::* LISTEN 445/sshd
Pokud je výstup prázdný, znamená to, že na portu nic neposlouchá.
Seznam můžete také filtrovat na základě kritérií, například PID, protokolu, stavu atd.
netstat
je zastaralý a nahrazený ss
a ip
, ale přesto je to nejpoužívanější příkaz pro kontrolu síťových připojení.
Zkontrolujte naslouchací porty pomocí ss
#
ss
je nový netstat
. Chybí mu část netstat
funkce, ale odhaluje více stavů TCP a je o něco rychlejší. Možnosti příkazů jsou většinou stejné, takže přechod z netstat
na ss
není těžké.
Chcete-li získat seznam všech naslouchacích portů pomocí ss
byste napsali:
sudo ss -tunlp
Výstup je téměř stejný jako výstup hlášený netstat
:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=445,fd=3))
LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=929,fd=13))
LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=534,fd=30))
LISTEN 0 128 *:80 *:* users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=445,fd=4))
LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=929,fd=14))
LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=534,fd=33))
Zkontrolujte naslouchací porty pomocí lsof
#
lsof
je výkonný nástroj příkazového řádku, který poskytuje informace o souborech otevřených procesy.
V Linuxu je vše soubor. Soket si můžete představit jako soubor, který zapisuje do sítě.
Chcete-li získat seznam všech naslouchacích TCP portů pomocí lsof
typ:
sudo lsof -nP -iTCP -sTCP:LISTEN
Použité možnosti jsou následující:
-n
- Nepřevádějte čísla portů na názvy portů.-p
- Nepřekládejte názvy hostitelů, ukazujte číselné adresy.-iTCP -sTCP:LISTEN
- Zobrazit pouze síťové soubory se stavem TCP LISTEN.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN)
sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN)
apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN)
apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN)
master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)
Většina názvů výstupních sloupců je samovysvětlující:
COMMAND
,PID
,USER
– Název, PID a uživatel spouštějící program spojený s portem.NAME
– Číslo portu.
Chcete-li zjistit, jaký proces naslouchá na konkrétním portu, například port 3306
byste použili:
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
Výstup ukazuje, že MySQL server používá port 3306
:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
Pro více informací navštivte manuálovou stránku lsof a přečtěte si o všech dalších výkonných možnostech tohoto nástroje.
Závěr č.
Ukázali jsme vám několik příkazů, které můžete použít ke kontrole, jaké porty se ve vašem systému používají, a jak zjistit, jaký proces naslouchá na konkrétním portu.
Pokud máte nějaké dotazy nebo připomínky, zanechte prosím níže komentář.