Android

Hur man söker efter lyssnarportar i Linux (portar som används)

DS Lite USB C Mod

DS Lite USB C Mod

Innehållsförteckning:

Anonim

När du felsöker nätverksanslutning eller applikationsspecifika problem bör en av de första sakerna som ska kontrolleras vara vilka portar som faktiskt används på ditt system och vilket program som lyssnar på en specifik port.

Den här artikeln förklarar hur du hittar vilka tjänster som lyssnar på vilka portar som använder netstat , ss och lsof . Instruktionerna är tillämpliga för alla Linux- och Unix-baserade operativsystem som macOS.

Vad är lyssnarport

Nätverksport identifieras med dess nummer, den tillhörande IP-adressen och typen av kommunikationsprotokoll, t.ex. TCP eller UDP.

Lyssnarport är en nätverksport på vilken en applikation eller process lyssnar på och fungerar som kommunikationsändpunkt.

Varje lyssningsport kan vara öppen eller stängd (filtrerad) med en brandvägg. I allmänna termer är en öppen port en nätverksport som accepterar inkommande paket från avlägsna platser.

Du kan inte ha två tjänster som lyssnar på samma port på samma IP-adress.

Om du till exempel kör en Apache-webbserver som lyssnar på portarna 80 och 443 och du försöker installera Nginx kommer det senare inte att starta eftersom HTTP- och HTTPS-portarna redan används.

Kontrollera lyssningsportar med netstat

netstat är ett kommandoradsverktyg som kan ge information om nätverksanslutningar.

För att lista alla TCP- eller UDP-portar som lyssnas på, inklusive tjänsterna som använder portarna och socket-status använder du följande kommando:

sudo netstat -tunlp

Alternativen som används i detta kommando har följande betydelse:

  • -t - Visa TCP-portar. -u - Visa UDP-portar. -n - Visa numeriska adresser istället för att lösa värdar. -l - Visa bara lyssnarportar. -p - Visa PID och namnet på lyssnarens process. Denna information visas endast om du kör kommandot som root- eller sudo-användare.

Utgången ser ut så här:

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

De viktiga kolumnerna i vårt fall är:

  • Proto - Protokollet som används av uttaget. Local Address - IP-adressen och portnumret som processen lyssnar på. PID/Program name - PID och processens namn.

sudo netstat -tnlp | grep:22

Utgången visar att på denna maskinport används 22 av SSH-servern:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp6 0 0:::22:::* LISTEN 445/sshd

Om utgången är tom betyder det att ingenting lyssnar på porten.

Du kan också filtrera listan baserat på kriterier, till exempel PID, protokoll, tillstånd och så vidare.

netstat är föråldrad och ersatt med ss och ip , men fortfarande är det de mest använda kommandona för att kontrollera nätverksanslutningar.

Kontrollera lyssningsportar med ss

ss är ny netstat . Det saknar några av netstat funktionerna men exponerar fler TCP-tillstånd och det är något snabbare. Kommandoalternativen är oftast desamma så övergången från netstat till ss är inte svår.

För att få en lista över alla lyssnarportar med ss skriver du:

sudo ss -tunlp

Produktionen är nästan densamma som den som rapporterats av 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))

Kontrollera lyssningsportar med lsof

lsof är ett kraftfullt kommandoradsverktyg som ger information om filer som öppnas av processer.

I Linux är allt en fil. Du kan tänka på ett uttag som en fil som skriver till nätverket.

Så här får du en lista över alla lyssnande TCP-portar med lsof typ:

sudo lsof -nP -iTCP -sTCP:LISTEN

De använda alternativen är följande:

  • -n - Konvertera inte portnummer till portnamn. -p - Lös inte värdnamn, visa numeriska adresser. -iTCP -sTCP:LISTEN - Visa bara nätverksfiler med TCP- -iTCP -sTCP: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)

De flesta av utmatningskolumnens namn är självförklarande:

  • COMMAND , PID , USER - Namnet, pid och användaren som kör programmet kopplat till porten. NAME - Portnumret.

För att hitta vilken process som lyssnar på en viss port, till exempel port 3306 skulle du använda:

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

Utdata visar att port 3306 används av MySQL-servern:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)

För mer information besök lsof man-sidan och läs om alla andra kraftfulla alternativ i det här verktyget.

Slutsats

Vi har visat dig flera kommandon som du kan använda för att kontrollera vilka portar som används i ditt system och hur du hittar vilken process som lyssnar på en specifik port.

terminal