Apprenez ce qu’est la commande netstat et quelques exemples en temps réel.
netstat
(statistiques réseau) est un outil de ligne de commande qui affiche les connexions réseau (entrantes et sortantes), les tables de routage et un certain nombre de statistiques sur les interfaces réseau.
Il est disponible sur les systèmes d’exploitation Linux, Unix-like et Windows. netstat
est puissant et peut être un outil pratique pour résoudre les problèmes liés au réseau et vérifier les statistiques de connexion.
Si vous tapez netstat -help
, vous obtiendrez les instructions d’utilisation suivantes.
[root@lab ~]# netstat -help
utilisation : netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]
-r, --route afficher la table de routage
-I, --interfaces=<Iface> affiche la table des interfaces pour <Iface>
-i, --interfaces affichage de la table des interfaces
-g, --groups affichage des membres des groupes de multidiffusion
-s, --statistics affichage des statistiques de réseau (comme SNMP)
-M, --masquerade affichage des connexions masquées
-v, --verbose être verbeux
-W, --wide Ne pas tronquer les adresses IP
-n, --numeric ne résout pas les noms
--numeric-hosts ne résout pas les noms d'hôtes
--numérique-ports ne résout pas les noms de ports
--numérique-utilisateurs ne résout pas les noms d'utilisateurs
-N, --symbolique résout les noms de matériel
-e, --extend affiche d'autres informations/plus d'informations
-p, --programmes affiche le PID/nom du programme pour les sockets
-o, --timers affichage des minuteries
-c, --continu liste continue
-l, --listening affichage des sockets du serveur d'écoute
-a, --all affichage de toutes les sockets (par défaut : connectées)
-F, --fib affiche Forwarding Information Base (par défaut)
-C, --cache affiche le cache de routage au lieu de la FIB
-Z, --context affiche le contexte de sécurité SELinux pour les sockets
<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Utiliser '-6|-4' ou '-A <af>' ou '--<af>' ; par défaut : inet
Liste des familles d'adresses possibles (qui supportent le routage) :
inet (Internet DARPA) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
[root@lab ~]#
Laissez-moi vous montrer quelques exemples de la commande. Les exemples suivants ont été testés sur RHEL/CentOS, mais je ne vois aucune raison pour qu’ils ne fonctionnent pas sur une autre distro comme Ubuntu.
Connexion établie
Si vous recherchez toutes les connexions établies depuis le serveur.
[root@lab ~]# netstat -natu | grep 'ESTABLISHED'
tcp 0 21 68.183.37.102:22 222.186.31.135:21714 ESTABLISHED
tcp 0 36 68.183.37.102:22 52.148.155.182:49859 ESTABLISHED
tcp 0 0 68.183.37.102:22 61.177.142.158:55481 ESTABLISHED
[root@lab ~]#
Si vous avez beaucoup de connexions établies et que vous souhaitez rechercher l’une des IP, vous pouvez utiliser un autre grep.
[root@lab ~]# netstat -natu | grep 'ESTABLISHED' | grep 61.177.142.158
tcp 0 1280 68.183.37.102:22 61.177.142.158:33932 ESTABLISHED
[root@lab ~]#
Connexion d’écoute
Disons que vous avez démarré un service, et qu’il est supposé écouter sur une IP:Port particulière, ceci serait pratique pour vérifier.
[root@lab ~]# netstat -an | grep 'LISTEN'
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
[root@lab ~]#
Vous pouvez également utiliser l’argument -l
pour afficher toutes les sockets en écoute.
[root@lab ~]# netstat -l
Connexions Internet actives (serveurs uniquement)
Proto Recv-Q Send-Q Adresse locale Adresse étrangère État
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp6 0 0 [: :]:sunrpc [: :]:* LISTEN
tcp6 0 0 [: :]:webcache [: :]:* LISTEN
tcp6 0 0 [: :]:ssh [: :]:* LISTEN
udp 0 0 0.0.0.0:805 0.0.0.0:*
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp6 0 0 [: :]:805 [: :]:*
udp6 0 0 [: :]:sunrpc [: :]:*
udp6 0 0 ip6-localhost:323 [: :]:*
Sockets de domaine UNIX actives (uniquement les serveurs)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 15108 /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 8202 /run/systemd/journal/stdout
unix 2 [ ACC ] SEQPACKET LISTENING 12813 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 17542 public/pickup
unix 2 [ ACC ] STREAM LISTENING 15165 /var/run/rpcbind.sock
unix 2 [ ACC ] STREAM LISTENING 17546 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 15605 /var/lib/gssproxy/default.sock
unix 2 [ ACC ] STREAM LISTENING 12706 /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 17549 public/qmgr
unix 2 [ ACC ] STREAM LISTENING 17571 public/flush
unix 2 [ ACC ] STREAM LISTENING 17553 private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 17586 public/showq
unix 2 [ ACC ] STREAM LISTENING 17556 private/rewrite
unix 2 [ ACC ] STREAM LISTENING 17559 private/bounce
unix 2 [ ACC ] STREAM LISTENING 17562 private/defer
unix 2 [ ACC ] STREAM LISTENING 17565 private/trace
unix 2 [ ACC ] STREAM LISTENING 17568 private/verify
unix 2 [ ACC ] STREAM LISTENING 17574 private/proxymap
unix 2 [ ACC ] STREAM LISTENING 17577 private/proxywrite
unix 2 [ ACC ] STREAM LISTENING 17580 private/smtp
unix 2 [ ACC ] STREAM LISTENING 17583 private/relay
unix 2 [ ACC ] STREAM LISTENING 17589 private/error
unix 2 [ ACC ] STREAM LISTENING 17592 private/retry
unix 2 [ ACC ] STREAM LISTENING 17595 private/discard
unix 2 [ ACC ] STREAM LISTENING 17598 private/local
unix 2 [ ACC ] STREAM LISTENING 17601 private/virtual
unix 2 [ ACC ] STREAM LISTENING 17604 private/lmtp
unix 2 [ ACC ] STREAM LISTENING 17607 private/anvil
unix 2 [ ACC ] STREAM LISTENING 17610 private/scache
unix 2 [ ACC ] STREAM LISTENING 15606 /run/gssproxy.sock
[root@lab ~]#
Utilisez grep
pour filtrer les résultats.
Numéro de port utilisé par le PID
Vous savez que votre application a démarré et que vous connaissez le PID (Process Identifier), mais vous n’êtes pas sûr du numéro de port qu’elle utilise. L’exemple ci-dessous concerne le PID 3937
[root@lab ~]# netstat -anlp |grep 3937
tcp6 0 0 :::80 :::* LISTEN 3937/httpd
unix 3 [ ] STREAM CONNECTED 2442387 3937/httpd
[root@lab ~]#
Comme vous pouvez le voir, le port 80 est utilisé pour le PID 3937.
Statistiques de tous les protocoles
Si vous avez des déconnexions fréquentes dues à des paquets rejetés ? -l’argument de
netstat vous montrera les statistiques globales où vous pouvez prêter attention aux messages de paquets rejetés.
[root@lab ~]# netstat -s
Ip :
731422 total des paquets reçus
0 transférés
0 paquets entrants rejetés
731399 paquets entrants délivrés
787732 requêtes envoyées
16 abandonnées à cause d'une route manquante
Icmp :
5277 messages ICMP reçus
120 messages ICMP d'entrée ont échoué.
InCsumErrors : 6
Histogramme d'entrée ICMP :
destination inaccessible : 193
délai d'attente en transit : 16
demandes d'écho : 5060
réponses echo : 2
9355 messages ICMP envoyés
0 messages ICMP échoués
Histogramme de sortie ICMP :
destination inaccessible : 4295
réponses de l'écho : 5060
IcmpMsg :
InType0 : 2
InType3 : 193
InType8 : 5060
InType11 : 16
OutType0 : 5060
OutType3 : 4295
Tcp :
42 ouvertures de connexions actives
35226 ouvertures de connexions passives
1693 tentatives de connexion échouées
645 réinitialisations de connexion reçues
2 connexions établies
646705 segments reçus
648037 segments envoyés
99463 segments retransmis
27377 mauvais segments reçus.
150893 réinitialisations envoyées
InCsumErrors : 27377
Udp :
74547 paquets reçus
4814 paquets vers un port inconnu reçus.
56 erreurs de réception de paquets
74584 paquets envoyés
0 erreurs de tampon de réception
0 erreurs de tampon d'envoi
InCsumErrors : 56
UdpLite :
TcpExt :
177 cookies SYN invalides reçus
1693 réinitialisations reçues pour des sockets SYN_RECV embryonnaires
316 sockets TCP ont terminé le temps d'attente dans le timer rapide
3 paquets rejetés dans des connexions établies à cause de l'horodatage
70248 acks retardés envoyés
6 acks retardés ont été retardés davantage à cause d'une socket verrouillée
Le mode Quick ack a été activé 3082 fois
17 SYN vers des sockets LISTEN ont été abandonnés
28179 paquets directement mis en file d'attente dans la préqueue recvmsg.
9802 octets reçus directement dans le contexte du processus à partir de la préqueue
72106 en-têtes de paquets prédits
94182 accusés de réception ne contenant pas de données utiles reçus
40094 accusés de réception prévus
332 fois récupéré de la perte de paquets par des accusés de réception sélectifs
8 fenêtres d'encombrement récupérées sans démarrage lent par DSACK
1173 fenêtres d'encombrement récupérées sans démarrage lent après un acquittement partiel
1029 dépassements de délai après récupération par SACK
8 dépassements de délai dans l'état de perte
329 retransmissions rapides
3 retransmissions directes
32 retransmissions en démarrage lent
44785 autres dépassements de délais TCP
TCPLossProbes : 9763
TCPLossProbeRecovery : 1732
54 retransmissions SACK ont échoué
3144 DSACKs envoyés pour d'anciens paquets
4 DSACKs envoyés pour des paquets hors service
695 DSACKs reçus
1 DSACKs pour des paquets hors service reçus
44 connexions réinitialisées en raison de données inattendues
76 connexions réinitialisées en raison d'une fermeture prématurée de l'utilisateur
6079 connexions interrompues en raison d'un dépassement de délai
TCPDSACKIgnoredNoUndo : 448
TCPSpuriousRTOs : 5
TCPSackShiftFallback : 465
IPReversePathFilter : 11
TCPRcvCoalesce : 32369
TCPOFOQueue : 4313
TCPOFOMerge : 4
TCPChallengeACK : 2
TCPSynRetrans : 43670
TCPOrigDataSent : 208010
TCPACKSkippedSeq : 12
IpExt :
InNoRoutes : 12
InOctets : 133789295
OutOctets : 151093769
InNoECTPkts : 731338
InECT1Pkts : 3
InECT0Pkts : 1568
InCEPkts : 108
[root@lab ~]#
Informations de routage du noyau
Vous avez un problème de routage ou la connectivité ne fonctionne pas comme prévu parce que la connexion passe par une route différente ?
Vérifiez rapidement la table de routage.
[root@lab ~]# netstat -r
Table de routage IP du noyau
Destination Gateway Genmask Flags MSS Window irtt Iface
passerelle par défaut 0.0.0.0 UG 0 0 0 eth0
10.16.0.0 0.0.0 255.255.0.0 U 0 0 0 0 eth0
68.183.32.0 0.0.0.0 255.255.240.0 U 0 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 0 eth0
[root@lab ~]#
PID utilisé par le numéro de port
Très pratique pour résoudre les problèmes de conflits de ports. Supposons que vous essayez de démarrer un serveur Apache ou Nginx, qui écoute sur le port 80, mais que vous n’y parvenez pas parce qu’un autre processus utilise déjà le port 80.
[root@lab ~]# netstat -anlp |grep 80 | grep LISTEN
tcp6 0 0 :::80 :::* LISTEN 3937/httpd
[root@lab ~]#
Vous pouvez voir que le PID 3937 utilise ce port.
Si vous utilisez AIX, alors
netstat -Aan | grep $portnumber
Cela affichera l’adresse du bloc de contrôle du protocole en hexadécimal
Une fois que vous avez l’hexadécimal, vous pouvez exécuter la commande suivante pour savoir quel processus détient un numéro de port.
rmsock $address_of_pcb tcpcb
Liste des interfaces réseau
Vous avez plusieurs interfaces Ethernet ? Vous n’êtes pas sûr et vous voulez le savoir ?
[root@lab ~]# netstat -i
Table des interfaces du noyau
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 793026 0 0 0 849443 0 0 0 BMRU
lo 65536 6 0 0 0 6 0 0 0 LRU
[root@lab ~]#
Écoute continue
Il s’agit d’une excellente option pour résoudre les problèmes liés aux plantages des services. Supposons qu’une application se bloque de manière aléatoire toutes les quelques minutes. Mais vous ne savez pas quand exactement. Vous pouvez utiliser l’argument -c
qui affichera continuellement les résultats.
[root@lab ~]# netstat -anlpc |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd
tcp6 0 0 :::8080 :::* LISTEN 11766/httpd
Lorsqu’il ne se met plus à jour, vous savez qu’il s’est planté.
Conclusion
netstat
est l’une des commandes les plus utilisées par les administrateurs système et j’espère que les exemples ci-dessus vous donneront une idée de ce que vous pouvez faire avec. Si vous souhaitez en savoir plus sur l’administration Linux, jetez un coup d’œil à ce cours Udemy.