15 exemple utile de comandă Sockstat pentru a găsi porturi deschise în FreeBSD


Sockstat este un utilitar de linie de comandă versatil folosit pentru afișarea socket-urilor deschise de rețea și de sistem în FreeBSD. În principal, comanda sockstat este instalată implicit în FreeBSD și este folosită în mod obișnuit pentru afișarea numelui proceselor care au deschis un anumit port de rețea pe un sistem FreeBSD.

Cu toate acestea, sockstat poate lista, de asemenea, socket-uri deschise în funcție de versiunea protocolului (ambele versiuni IP), de starea conexiunii și de porturile pe care se leagă și ascultă un demon sau un program.

De asemenea, poate afișa socket-uri de comunicare între procese, cunoscute de obicei ca socket-uri de domeniu Unix sau IPC. Comanda Sockstat combinată cu utilitarul awk se dovedește a fi un instrument puternic pentru stiva de rețele locale.

Poate micșora rezultatele pentru o conexiune deschisă în funcție de utilizatorul care deține socket-ul, descriptorul de fișier al unui socket de rețea sau PID-ul procesului care a deschis socket-ul.

În acest ghid vom enumera câteva exemple comune de utilizare, dar și foarte puternice, a utilitarului de rețea în linia de comandă sockstat în FreeBSD.

Cerințe

  1. Ghid de instalare FreeBSD 11.1

1. Listați toate porturile deschise în FreeBSD

Pur și simplu executată fără opțiuni sau comutatoare, comanda sockstat va afișa toate socket-urile deschise într-un sistem FreeBSD, așa cum este ilustrat în captura de ecran de mai jos.

# sockstat

Valorile afișate în ieșirea sockstat sunt descrise astfel:

  • UTILIZATOR : proprietarul (contul de utilizator) al prizei.
  • COMANDĂ : Comanda care a deschis soclul.
  • PID : ID-ul de proces al comenzii care deține socket-ul.
  • FD : numărul descriptorului de fișier al soclului.
  • PROTO : protocolul de transport (de obicei TCP/UDP) asociat cu socket-ul deschis sau tipul de socket în cazul socket-urilor de domeniu Unix (datagramă, flux sau seqpac) pentru socket-uri UNIX.
  • ADRESA LOCALĂ : reprezintă adresa IP locală pentru socket-urile bazate pe IP. În cazul socket-urilor Unix, acesta reprezintă numele fișierului punctului final atașat la socket. Notația \?? implică faptul că punctul final al socketului nu a putut fi recunoscut sau stabilit.
  • ADRESĂ STRĂINĂ : adresa IP de la distanță la care este conectată priza.

2. Listați porturile de ascultare sau deschise în FreeBSD

Executată cu indicatorul -l, comanda sockstat va afișa toate socketurile de ascultare deschise în stiva de rețea și toate socketurile de domeniu Unix deschise sau conductele numite implicate într-un fel de procesare locală a datelor în sistem.

# sockstat -l

3. Listați porturile IPv4 deschise în FreeBSD

Pentru a afișa toate socket-urile deschise numai pentru protocolul IPv4, lansați comanda cu indicatorul -4, așa cum este sugerat în exemplul de mai jos.

# sockstat -4

4. Listați porturile IPv6 deschise în FreeBSD

Similar cu versiunea IPv4, puteți afișa și prizele de rețea deschise numai pentru IPv6, lansând comanda așa cum se arată mai jos.

# sockstat -6

5. Listați porturile deschise TCP sau UDP în FreeBSD

Pentru a afișa soclurile de rețea bazate numai pe un protocol de rețea specificat, cum ar fi TCP sau UDP, utilizați indicatorul -P, urmat de simbolul numele argument al protocolului.

Numele protocolului pot fi găsite prin inspectarea conținutului fișierului /etc/protocols. În prezent, protocolul ICMP nu este acceptat de instrumentul sockstat.

Afișați numai socket-uri TCP
# sockstat -P tcp
Afișați numai socluri UDP
# sockstat -P udp

Conectează ambele protocoale.

# sockstat –P tcp,udp

6. Listați numerele de porturi specifice TCP și UDP

Dacă doriți să afișați toate socket-urile deschise IP TCP sau UDP, pe baza numărului de port local sau la distanță, utilizați steagurile și sintaxa comenzii de mai jos, așa cum este ilustrat în captura de ecran de mai jos.

# sockstat -P tcp -p 443             [Show TCP HTTPS Port]
# sockstat -P udp -p 53              [Show UDP DNS Port] 
# sockstat -P tcp -p 443,53,80,21    [Show Both TCP and UDP]

7. Listați porturile deschise și conectate în FreeBSD

Pentru a afișa toate prizele deschise și conectate, utilizați indicatorul -c. După cum se arată în exemplele de mai jos, puteți enumera toate socketurile conectate HTTPS sau toate socketurile conectate TCP lansând comenzile.

# sockstat -P tcp -p 443 -c
# sockstat -P tcp -c

8. Listați porturile de ascultare în rețea în FreeBSD

Pentru a lista toate socketurile TCP deschise în starea de ascultare, adăugați steaguri -l și -s, așa cum se arată în exemplul de mai jos. Fiind un protocol fără conexiune, UDP nu păstrează informații despre starea conexiunii.

Socketurile UDP deschise nu pot fi afișate folosind starea lor, deoarece protocolul udp folosește datagrame pentru a trimite/primi date și nu are un mecanism încorporat pentru a determina starea conexiunii.

# sockstat -46 -l -s

9. Listați socket-uri Unix și țevi cu nume

Prizele de domeniu Unix, precum și alte forme de comunicare locală între procese, cum ar fi conductele numite, pot fi afișate prin comanda sockstat utilizând steag-ul -u, așa cum se arată în imaginea de mai jos.

# sockstat -u

10. Listează porturile deschise de aplicație în FreeBSD

Ieșirea comenzii Sockstat poate fi filtrată prin utilitarul grep pentru a afișa o listă de porturi deschise de o anumită aplicație sau comandă.

Să presupunem că doriți să enumerați toate socket-urile asociate cu serverul web Nginx, puteți lansa următoarea comandă pentru a realiza sarcina.

# sockstat -46 | grep nginx

Pentru a afișa numai prizele conectate asociate cu serverul web Nginx, lansați următoarea comandă.

# sockstat -46 -c| grep nginx

11. Listați protocoalele conectate HTTPS

Puteți enumera toate prizele conectate asociate cu protocolul HTTPS alături de starea fiecărei conexiuni, rulând comanda de mai jos.

# sockstat -46 -s -P TCP -p 443 -c

12. Listați socketurile de la distanță HTTP

Pentru a lista toate socket-urile de la distanță asociate cu protocolul HTTP, puteți rula una dintre următoarele combinații de comenzi.

# sockstat -46 -c | egrep '80|443' | awk '{print $7}' | uniq -c | sort -nr
# sockstat -46 -c -p 80,443 | grep -v ADDRESS|awk '{print $7}' | uniq -c | sort -nr

13. Găsiți cele mai mari solicitări HTTP după adrese IP

În cazul în care doriți să aflați câte conexiuni HTTP sunt solicitate de fiecare adresă IP la distanță, lansați comanda de mai jos. Această comandă poate fi foarte utilă în cazul în care doriți să determinați dacă serverul dvs. web este supus unui atac DDOS. În caz de suspiciuni, ar trebui să investigați adresele IP cu cea mai mare rată de solicitare.

# sockstat -46 -c | egrep '80|443' | awk '{print $7}' | cut -d: -f1 | uniq -c | sort –nr

14. Listează socketurile deschise DNS

Dacă ați configurat un server DNS de stocare în cache și de redirecționare la sediul dumneavoastră pentru a servi clienții interni prin protocolul de transport TCP și doriți să afișați o listă cu toate socket-urile

# sockstat -46 -P tcp –p 53 -s

15. Interogați DNS TCP pe domeniul local

Dacă nu există trafic DNS în rețea, puteți declanșa manual o interogare DNS pe soclul TCP din consola mașinii locale, rulând următoarea comandă dig. După aceea, lansați comanda de mai sus pentru a lista toate socket-urile de rezolvare.

# dig +tcp  www.domain.com  @127.0.0.1

Asta e tot! Alături de utilitarele liniei de comandă lsof, linia de comandă sockstat este un utilitar puternic utilizat pentru achiziționarea de informații despre rețea și pentru depanarea mai multor aspecte ale stivei de rețea FreeBSD și ale proceselor și serviciilor legate de rețea.

Omologul comenzii FreeBSD sockstat în Linux este reprezentat de netstat sau de noua comandă ss. Credeți sau nu, pe baza utilitarului sockstat, puteți găsi o aplicație similară dezvoltată pentru sistemul de operare Android, numită SockStat – Simple Netstat GUI.