Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Linux et Mise en réseau Dernière mise à jour : 24 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Apprenez ce qu'est la commande netstat et quelques exemples en temps réel.

netstat (network statistics) 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.

Il est disponible sur les systèmes d'exploitation Linux, Unix-like et Fenêtres. 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> afficher la table des interfaces pour <Iface>
       -i, --interfaces afficher la table des interfaces
 -g, --groups afficher les membres des groupes multicast
 -s, --statistics afficher les statistiques réseau (comme SNMP)
 -M, --masquerade afficher les connexions masquées

 -v, --verbose être verbeux
 -W, --wide ne tronque pas les adresses IP
 -n, --numeric ne résout pas les noms
 --numeric-hosts ne résout pas les noms d'hôtes
 --numeric-ports ne résout pas les noms de ports
 --numeric-users ne résout pas les noms d'utilisateurs
 -N, --symbolique résoudre les noms de matériel
 -e, --extend afficher d'autres informations
 -p, --programs afficher le PID/nom du programme pour les sockets
 -o, --timers afficher les timers
 -c, --continuous liste continue

 -l, --listening afficher les sockets du serveur à l'écoute
 -a, --all afficher toutes les sockets (par défaut : connecté)
 -F, --fib afficher Forwarding Information Base (par défaut)
 -C, --cache afficher le cache de routage au lieu du FIB
 -Z, --context afficher 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 (DARPA Internet) 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: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 prises en écoute.

[root@lab ~]# netstat -l
Connexions Internet actives (uniquement les serveurs)
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 actives du domaine UNIX (serveurs uniquement)
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 la commande vous montrera les statistiques globales où vous pouvez prêter attention aux messages de paquets rejetés.

[root@lab ~]# netstat -s
Ip :
   731422 total packets received
 0 forwarded
 0 incoming packets discarded
 731399 incoming packets delivered
 787732 requests sent out
 16 dropped because of missing route
Icmp :
   5277 messages ICMP reçus
 120 messages ICMP d'entrée ont échoué.
   InCsumErrors : 6
 histogramme d'entrée ICMP :
 destination unreachable : 193
 timeout in transit : 16
 echo requests : 5060
 echo replies : 2
 9355 messages ICMP envoyés
 0 messages ICMP échoués
 histogramme de sortie ICMP :
 destination unreachable : 4295
 echo replies : 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 connexions échouées
 645 réinitialisations de connexions reçues
 2 connexions établies
 646705 segments reçus
 648037 segments envoyés
 99463 segments retransmis
 27377 mauvais segments reçus.
   150893 resets envoyés
 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 resets reçus 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 supplémentaires à cause d'une socket verrouillée
 Le mode Quick ack a été activé 3082 fois
 17 SYNs vers les sockets LISTEN ont été abandonnés
 28179 paquets directement mis en file d'attente vers recvmsg prequeue.
   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édits
 332 fois récupérés 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 de congestion récupérées sans démarrage lent après ack partiel
 1029 timeouts après récupération SACK
 8 timeouts en état de perte
 329 retransmissions rapides
 3 retransmissions en avant
 32 retransmissions en démarrage lent
 44785 autres timeouts TCP
 TCPLossProbes : 9763
 TCPLossProbeRecovery : 1732
 54 retransmissions SACK échouées
 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
default gateway 0.0.0.0 UG 0 0 eth0
10.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
68.183.32.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 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. Disons que vous essayez de démarrer un serveur Apache ou Nginx, qui écoute sur le port 80, mais que vous n'y arrivez 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'adresse hexadécimale, vous pouvez exécuter la commande suivante pour savoir quel processus utilise 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
Kernel Interface table
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 de plantage 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 œil à ce cours Udemy.

  • Chandan Kumar
    Auteur
    Chandan Kumar est le fondateur de Geekflare. Il a aidé des millions de personnes à exceller dans le domaine numérique. Passionné de technologie, il s'est donné pour mission d'explorer le monde et d'amplifier la croissance des professionnels et des entreprises.
Merci à nos sponsors
D'autres bonnes lectures sur Linux
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus