Android

Cum se verifică dacă sunt ascultate porturi în linux (porturi în uz)

Calin Crisan - Cat ai mama cui sa-i spui

Calin Crisan - Cat ai mama cui sa-i spui

Cuprins:

Anonim

Atunci când depanați conectivitatea de rețea sau problemele specifice aplicației, unul dintre primele lucruri de verificat ar trebui să fie ce porturi sunt de fapt utilizate în sistemul dvs. și ce aplicație ascultă pe un anumit port.

Acest articol explică cum să aflați ce servicii ascultă porturile care utilizează comenzile netstat , ss și lsof . Instrucțiunile sunt aplicabile pentru toate sistemele de operare bazate pe Linux și Unix, cum ar fi macOS.

Ce este portul de ascultare

Portul de rețea este identificat prin numărul său, adresa IP asociată și tipul protocolului de comunicare, cum ar fi TCP sau UDP.

Portul de ascultare este un port de rețea pe care ascultă o aplicație sau un proces, care acționează ca un punct de comunicare.

Fiecare port de ascultare poate fi deschis sau închis (filtrat) folosind un firewall. În termeni generali, un port deschis este un port de rețea care acceptă pachete primite din locații îndepărtate.

Nu puteți avea două servicii care ascultă același port pe aceeași adresă IP.

De exemplu, dacă executați un server web Apache care ascultă porturile 80 și 443 și încercați să instalați Nginx, ulterior, nu se va începe, deoarece porturile HTTP și HTTPS sunt deja utilizate.

Verificați porturile de ascultare cu netstat

netstat este un instrument de linie de comandă care poate furniza informații despre conexiunile de rețea.

Pentru a enumera toate porturile TCP sau UDP care sunt ascultate, inclusiv serviciile care utilizează porturile și starea socket-ului, folosiți următoarea comandă:

sudo netstat -tunlp

Opțiunile utilizate în această comandă au următorul sens:

  • -t - Afișează porturile TCP. -u - Afișează porturile UDP. -n - Afișează adrese numerice în loc să rezolve gazdele. -l - Afișați doar porturi de ascultare. -p - Afișează PID și numele procesului ascultătorului. Aceste informații sunt afișate numai dacă executați comanda ca utilizator root sau sudo.

Rezultatul va arăta astfel:

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

Coloanele importante în cazul nostru sunt:

  • Proto - Protocolul utilizat de priză. Local Address - Local Address IP și numărul de port pe care îl ascultă procesul. PID/Program name - PID și numele procesului.

sudo netstat -tnlp | grep:22

Rezultatul arată că pe acest port port 22 este folosit de serverul SSH:

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

Dacă ieșirea este goală, înseamnă că nimic nu ascultă în port.

De asemenea, puteți filtra lista pe baza unor criterii, de exemplu, PID, protocol, stare și așa mai departe.

netstat este învechit și înlocuit cu ss și ip , dar este încă una dintre cele mai utilizate comenzi pentru a verifica conexiunile de rețea.

Verificați porturile de ascultare cu ss

ss este netstat nou. Ii lipsesc unele caracteristici netstat , dar expune mai multe stări TCP și este ceva mai rapid. Opțiunile de comandă sunt în mare parte aceleași, astfel încât trecerea de la netstat la ss nu este dificilă.

Pentru a obține o listă cu toate porturile de ascultare cu ss tastați:

sudo ss -tunlp

Producția este aproape aceeași cu cea raportată de 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))

Verificați porturile de ascultare cu lsof

lsof este o utilitate puternică pentru linia de comandă care oferă informații despre fișierele deschise de procese.

În Linux, totul este un fișier. Vă puteți gândi la un socket ca la un fișier care scrie în rețea.

Pentru a obține o listă cu toate porturile TCP ascultate cu tip lsof :

sudo lsof -nP -iTCP -sTCP:LISTEN

Opțiunile utilizate sunt următoarele:

  • -n - Nu convertiți numerele de port în nume de port. -p - Nu rezolvați numele de gazdă, afișați adrese numerice. -iTCP -sTCP:LISTEN - Afișați numai fișierele de rețea cu starea 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)

Majoritatea numelor de coloane de ieșire sunt explicative:

  • COMMAND , PID , USER - Numele, pid-ul și utilizatorul care rulează programul asociat portului. NAME - Numărul portului.

Pentru a afla ce proces ascultă într-un anumit port, de exemplu, portul 3306 ai utiliza:

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

Rezultatul arată că portul 3306 este folosit de serverul MySQL:

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

Pentru mai multe informații, vizitați pagina omului lsof și citiți despre toate celelalte opțiuni puternice ale acestui instrument.

Concluzie

V-am arătat mai multe comenzi pe care le puteți utiliza pentru a verifica ce porturi sunt utilizate în sistemul dvs. și cum să găsiți ce proces ascultă pe un port specific.

Terminal