Android

Jak zkontrolovat naslouchací porty v linuxu (používané porty)

Azure Friday | Java in Azure Functions

Azure Friday | Java in Azure Functions

Obsah:

Anonim

Při řešení problémů s připojením k síti nebo s problémy souvisejícími s konkrétní aplikací by mělo být jednou z prvních věcí, které je třeba zkontrolovat, jaké porty se ve vašem systému skutečně používají a která aplikace poslouchá na konkrétním portu.

Tento článek vysvětluje, jak zjistit, které služby poslouchají na kterých portech pomocí příkazů netstat , ss a lsof . Pokyny jsou použitelné pro všechny operační systémy založené na Linuxu a Unixu, jako je MacOS.

Co je port pro poslech

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.

Port pro poslouchání je síťový port, na kterém aplikace nebo proces poslouchá, fungující jako koncový bod komunikace.

Každý port pro poslech lze otevřít nebo zavřít (filtrovat) pomocí brány firewall. Obecně řečeno, otevřený port je síťový port, který přijímá příchozí pakety ze vzdálených umístění.

Nemůžete mít dvě služby, které poslouchají stejný port na stejné IP adrese.

Například pokud používáte webový server Apache, který poslouchá 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 poslouchající 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, které jsou poslouchány, 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 TCP porty. -u - Zobrazit porty UDP. -n - Místo rozlišení hostitelů zobrazí číselné adresy. -l - Zobrazit pouze porty pro poslech. -p - Zobrazit PID a název procesu posluchače. Tato informace se zobrazí, pouze pokud spustíte příkaz jako uživatel root nebo sudo.

Výstup bude vypadat asi 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

Důležité sloupce v našem případě jsou:

  • Proto - Protokol používaný soketem. Local Address - IP adresa a číslo portu, na kterém proces poslouchá. PID/Program name - PID a název procesu.

sudo netstat -tnlp | grep:22

Výstup ukazuje, že na tomto stroji port 22 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 podle kritérií, například PID, protokolu, stavu atd.

netstat je zastaralý a nahrazen ss a ip , ale stále je to nejpoužívanější příkazy ke kontrole síťových připojení.

Zkontrolujte poslouchající porty pomocí ss

ss je nový netstat . Postrádá některé funkce netstat 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í obtížný.

Chcete-li získat seznam všech naslouchacích portů s ss které byste zadali:

sudo ss -tunlp

Výstup je téměř stejný jako výstup uváděný společností 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 lsof poslouchající porty

lsof je výkonný nástroj příkazového řádku, který poskytuje informace o souborech otevřených procesy.

V Linuxu je všechno soubor. Soket můžete považovat za soubor, který se zapisuje do sítě.

Chcete-li získat seznam všech naslouchajících portů TCP typu lsof :

sudo lsof -nP -iTCP -sTCP:LISTEN

Používané možnosti jsou následující:

  • -n - Nepřevádějte čísla portů na názvy portů. -p - Nerozlišujte názvy hostitelů, nezobrazujte čí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 - Jméno, pid a uživatel, který spouští program spojený s portem. NAME - číslo portu.

Chcete-li zjistit, jaký proces poslouchá na konkrétním portu, například port 3306 který byste použili:

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

Výstup ukazuje, že port 3306 je používán serverem MySQL:

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ů, pomocí kterých můžete zkontrolovat, jaké porty se používají ve vašem systému a jak zjistit, jaký proces poslouchá na konkrétním portu.

terminál