GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, která služba poslouchá na konkrétním portu

Tato příručka vysvětluje několik různých způsobů, jak zjistit, která služba naslouchá na konkrétním portu v Linuxu. Většina z vás zná výchozí port oblíbených služeb nebo procesů. Například výchozí port Apache je 80, výchozí port FTP je 21 a výchozí port SSH je 22. Názvy a čísla portů v Linuxu naleznete podle této příručky . Výchozí čísla portů lze také změnit na libovolné vlastní porty pro zabezpečení serveru Linux. Následující návody například popisují, jak změnit výchozí port Apache, FTP a SSH na jiný port.

  • Jak změnit výchozí port Apache na vlastní port
  • Jak změnit výchozí port FTP na vlastní port
  • Jak změnit výchozí port SSH na vlastní port

Pokud se změní výchozí číslo portu, jak zjistíte, která služba na kterém portu naslouchá? To se nyní dozvíme!

Zjistěte, která služba naslouchá na konkrétním portu v Linuxu

Níže jsem uvedl čtyři způsoby, jak zkontrolovat, jaká služba běží na konkrétním čísle portu. Tento seznam budu průběžně aktualizovat, pokud v budoucnu narazím na nějaké nové metody. Takže si to uložte do záložek a jednou za čas to zkontrolujte.

Metoda 1 – Použití netstat

Toto je nejčastěji používaný způsob, jak zjistit, která služba naslouchá na kterém portu. Netstat je nástroj příkazového řádku používaný k tisku síťových připojení, směrovacích tabulek, statistik rozhraní, připojení maškarád a členství v multicastu.

Netstat je dostupný ve výchozích úložištích většiny distribucí Linuxu.

Chcete-li jej nainstalovat na Arch Linux a jeho varianty, postupujte takto:

$ sudo pacman -S net-tools

Na CentOS, RHEL:

$ sudo yum install net-tools

Na Fedoře:

$ sudo dnf install net-tools

Na Debianu, Ubuntu:

$ sudo apt install net-tools

Po instalaci spusťte následující příkaz a zjistěte, které služby naslouchají na jakých portech:

$ sudo netstat -tulpn

Ukázkový výstup:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      665/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1026/sshd           
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      2068/python3        
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1072/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1026/sshd           
tcp6       0      0 :::80                   :::*                    LISTEN      1062/apache2        
udp        0      0 127.0.0.53:53           0.0.0.0:*                           665/systemd-resolve 
udp        0      0 192.168.225.22:68       0.0.0.0:*                           647/systemd-network 
udp        0      0 192.168.225.53:68       0.0.0.0:*                           647/systemd-network 
udp6       0      0 fe80::a00:27ff:feff:546 :::*                                647/systemd-network 
udp6       0      0 fe80::a00:27ff:fe7e:546 :::*                                647/systemd-network

Jak vidíte, služba python (simpleHTTPserver v tomto případě) naslouchá na portu číslo 8000, služba mysqld naslouchá na portu 3306, služba ssh běží na portu číslo 22, apache2 běží na portu 80 atd.

Tady,

  • -t příznak zobrazuje připojení TCP.
  • -u příznak zobrazuje připojení udp.
  • -l flag zobrazuje naslouchající zásuvky.
  • -p flag zobrazuje ID procesu (PID) a název procesu čehokoli, co tento port používá.
  • -n flag zobrazuje číselné adresy.

Výše uvedený příkaz uvádí všechny služby a čísla portů, na kterých naslouchají. Co když chcete zjistit, která služba naslouchá na konkrétním portu? Zde je příkaz grep přijde vhod! Můžeme kombinovat netstat a grep příkaz k filtrování výstupu pro konkrétní službu, například mysqld , jako níže.

$ sudo netstat -tulpn | grep mysqld
[sudo] password for sk: 
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld

Vidět? služba mysqld naslouchá na portu číslo 3306.

Pokud již znáte číslo portu, ale nevíte, která služba jej aktuálně používá, jednoduše nahraďte název služby číslem portu, jak je uvedeno níže.

$ sudo netstat -tulpn | grep -w 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld

Zde -w flag zobrazí pouze ty řádky obsahující shody, které tvoří celá slova. Jinými slovy -w zobrazí přesnou shodu daného řetězce.

Můžete také použít -i Ignorovat rozlišení velkých a malých písmen, aby se znaky, které se liší pouze velikostí písmen, vzájemně shodovaly

$ sudo netstat -tulpn | grep -i 3306

Je to tak jednoduché.

Další podrobnosti naleznete na manuálových stránkách.

$ man netstat

Netstat je většinou zastaralý. Alternativou k netstat je "ss".

Metoda 2 – Použití příkazu "ss"

ss je nástroj příkazového řádku pro zkoumání soketů. Je to alternativa k netstat a použití "ss" je téměř stejné jako "netstat". Dodává se předinstalovaný na Ubuntu a jeho variantách.

Chcete-li zjistit, které služby naslouchají na kterých portech, spusťte:

$ sudo ss -tulpn

Ukázkový výstup:

Netid          State             Recv-Q            Send-Q                                            Local Address:Port                       Peer Address:Port                                                                                                                                                                                     
udp            UNCONN            0                 0                                                 127.0.0.53%lo:53                              0.0.0.0:*               users:(("systemd-resolve",pid=671,fd=12))                                                                                                                                
udp            UNCONN            0                 0                                         192.168.225.22%enp0s3:68                              0.0.0.0:*               users:(("systemd-network",pid=653,fd=17))                                                                                                                                
udp            UNCONN            0                 0                                         192.168.225.53%enp0s8:68                              0.0.0.0:*               users:(("systemd-network",pid=653,fd=25))                                                                                                                                
udp            UNCONN            0                 0                             [fe80::a00:27ff:fe7e:8a9c]%enp0s8:546                                [::]:*               users:(("systemd-network",pid=653,fd=24))                                                                                                                                
udp            UNCONN            0                 0                             [fe80::a00:27ff:feff:d2e0]%enp0s3:546                                [::]:*               users:(("systemd-network",pid=653,fd=22))                                                                                                                                
tcp            LISTEN            0                 80                                                    127.0.0.1:3306                            0.0.0.0:*               users:(("mysqld",pid=1076,fd=32))                                                                                                                                        
tcp            LISTEN            0                 128                                               127.0.0.53%lo:53                              0.0.0.0:*               users:(("systemd-resolve",pid=671,fd=13))                                                                                                                                
tcp            LISTEN            0                 128                                                     0.0.0.0:22                              0.0.0.0:*               users:(("sshd",pid=1015,fd=3))                                                                                                                                           
tcp            LISTEN            0                 128                                                           *:80                                    *:*               users:(("apache2",pid=1094,fd=4),("apache2",pid=1090,fd=4),("apache2",pid=1089,fd=4),("apache2",pid=1088,fd=4),("apache2",pid=1087,fd=4),("apache2",pid=1062,fd=4))      
tcp            LISTEN            0                 128                                                        [::]:22                                 [::]:*               users:(("sshd",pid=1015,fd=4))

Chcete-li filtrovat výstup pro konkrétní službu (např. mysqld), použijte:

$ sudo ss -tulpn | grep -w mysqld
tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32))

Další podrobnosti naleznete na manuálových stránkách.

$ man ss

Metoda 3 – Použití lsof

Jak název napovídá, lsof je nástroj příkazového řádku pro seznam všech otevřených souborů patřících všem aktivním procesům.

Chcete-li jej nainstalovat na Linux, použijte následující příkazy v závislosti na typu distribuce, kterou používáte.

Na Arch Linuxu:

$ sudo pacman -S lsof

Na Debianu, Ubuntu:

$ sudo apt install lsof

Na CentOS, RHEL:

$ sudo yum install lsof

Na Fedoře:

$ sudo dnf install lsof

Chcete-li zjistit, které procesy běží na kterých portech, jednoduše zadejte číslo portu, jak je uvedeno v následujícím příkazu:

$ sudo lsof -i :80

Ukázkový výstup:

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2 1062     root    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1087 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1088 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1089 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1090 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1094 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)

Další podrobnosti naleznete na manuálových stránkách.

$ man lsof

Metoda 4 – Použití příkazu fixační jednotky

fixační jednotka je další nástroj příkazového řádku k identifikaci procesů pomocí souborů nebo soketů. Zobrazuje PID procesů používajících zadané soubory nebo systémy souborů.

Je také k dispozici ve výchozích úložištích většiny distribucí Linuxu.

Chcete-li jej nainstalovat na Arch Linux, spusťte:

$ sudo pacman -S psmisc

Na Debianu, Ubuntu:

$ sudo apt install psmisc

Na CentOS, RHEL:

$ sudo yum install psmisc

Na Fedoře:

$ sudo dnf install psmisc

Nejprve musíme najít PID služby nebo procesu naslouchajícího na konkrétním portu. Například najdu PID procesu naslouchajícího na portu 3306 pomocí příkazu:

$ sudo fuser 3306/tcp

Uvidíte výstup jako níže.

3306/tcp: 1076

Zde 1076 je PID.

A pak zjistěte skutečný proces pomocí PID pomocí příkazu:

$ ps -p 1076 -o comm=
mysqld

Případně můžete použít -v flag pro zobrazení úplných podrobností v jediném příkazu.

$ sudo fuser -v 3306/tcp
                     USER        PID ACCESS COMMAND
3306/tcp:            mysql      1076 F.... mysqld

Pro více podrobností si projděte manuálové stránky.

$ man fuser

Nyní znáte čtyři různé nástroje, jak zjistit, které procesy naslouchají na jakých portech. Všechny čtyři se snadno používají a jsou dostupné ve většině distribucí Linuxu. Pokud znáte nějaké další nástroje, dejte nám vědět v sekci komentářů níže. Tento seznam podle toho zkontroluji a aktualizuji.


Linux
  1. Shell - Jak najít adresář nějakého příkazu?

  2. Jak zjistit, které časové pásmo v Linuxu?

  3. Jak zjistit jmenný prostor konkrétního procesu?

  1. Zkontrolujte, která služba na daném portu linux naslouchá

  2. Jak zjistit, který sériový port se používá?

  3. Jak zjistit, kterou verzi Javy ve složce nainstalované Javy?

  1. Jak zavřít rmiregistry běžící na konkrétním portu?

  2. Jak zabít proces běžící na konkrétním portu v Linuxu?

  3. Jak zkontrolovat, zda konkrétní služba běží na Ubuntu