English English French French Spanish Spanish German German
Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
Partager sur:

Utilisation de la commande netstat sous Linux

netstat-commande-utilisation-sur-Linux
Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Découvrez ce que sont 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 d'interface réseau.

Il est disponible sous Linux, de type Unix et Windows les systèmes d'exploitation. 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 consignes d'utilisation suivantes.

[root@lab ~]# netstat -help
usage: 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              display routing table
        -I, --interfaces=<Iface> display interface table for <Iface>
        -i, --interfaces         display interface table
        -g, --groups             display multicast group memberships
        -s, --statistics         display networking statistics (like SNMP)
        -M, --masquerade         display masqueraded connections

        -v, --verbose            be verbose
        -W, --wide               don't truncate IP addresses
        -n, --numeric            don't resolve names
        --numeric-hosts          don't resolve host names
        --numeric-ports          don't resolve port names
        --numeric-users          don't resolve user names
        -N, --symbolic           resolve hardware names
        -e, --extend             display other/more information
        -p, --programs           display PID/Program name for sockets
        -o, --timers             display timers
        -c, --continuous         continuous listing

        -l, --listening          display listening server sockets
        -a, --all                display all sockets (default: connected)
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              display routing cache instead of FIB
        -Z, --context            display SELinux security context for sockets

  <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
           {-x|--unix} --ax25 --ipx --netrom
  <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
  List of possible address families (which support routing):
    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 éléments suivants sont testés sur RHEL / CentOS, mais je ne vois aucune raison de ne pas travailler sur une autre distribution comme Ubuntu.

Established Connection

Si vous recherchez toutes les connexions établies à partir du 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 établi de nombreuses connexions et que vous souhaitez rechercher l'une des adresses 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 ~]#

Listening Connection

Disons que vous avez démarré un service, et qu'il est censé écouter sur une adresse IP particulière: Port, ce serait pratique à 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 ~]#

Ou, vous pouvez utiliser -l argument pour afficher toutes les sockets d'écoute.

[root@lab ~]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
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       [::]:*                             
Active UNIX domain sockets (only servers)
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 ~]#

Profitez d' grep pour filtrer les résultats.

Port Number used by PID

Vous savez que votre application a démarré et connaît le PID (Process Identifier), mais vous ne savez pas quel est le 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.

All Protocols Statistics

Vous avez des déconnexions fréquentes en raison de la suppression de paquets? -s L'argument vous montrera des statistiques globales où vous pouvez prêter attention aux messages rejetés par paquets.

[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 ICMP messages received
    120 input ICMP message failed.
    InCsumErrors: 6
    ICMP input histogram:
        destination unreachable: 193
        timeout in transit: 16
        echo requests: 5060
        echo replies: 2
    9355 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 4295
        echo replies: 5060
IcmpMsg:
        InType0: 2
        InType3: 193
        InType8: 5060
        InType11: 16
        OutType0: 5060
        OutType3: 4295
Tcp:
    42 active connections openings
    35226 passive connection openings
    1693 failed connection attempts
    645 connection resets received
    2 connections established
    646705 segments received
    648037 segments send out
    99463 segments retransmited
    27377 bad segments received.
    150893 resets sent
    InCsumErrors: 27377
Udp:
    74547 packets received
    4814 packets to unknown port received.
    56 packet receive errors
    74584 packets sent
    0 receive buffer errors
    0 send buffer errors
    InCsumErrors: 56
UdpLite:
TcpExt:
    177 invalid SYN cookies received
    1693 resets received for embryonic SYN_RECV sockets
    316 TCP sockets finished time wait in fast timer
    3 packets rejects in established connections because of timestamp
    70248 delayed acks sent
    6 delayed acks further delayed because of locked socket
    Quick ack mode was activated 3082 times
    17 SYNs to LISTEN sockets dropped
    28179 packets directly queued to recvmsg prequeue.
    9802 bytes directly received in process context from prequeue
    72106 packet headers predicted
    94182 acknowledgments not containing data payload received
    40094 predicted acknowledgments
    332 times recovered from packet loss by selective acknowledgements
    8 congestion windows recovered without slow start by DSACK
    1173 congestion windows recovered without slow start after partial ack
    1029 timeouts after SACK recovery
    8 timeouts in loss state
    329 fast retransmits
    3 forward retransmits
    32 retransmits in slow start
    44785 other TCP timeouts
    TCPLossProbes: 9763
    TCPLossProbeRecovery: 1732
    54 SACK retransmits failed
    3144 DSACKs sent for old packets
    4 DSACKs sent for out of order packets
    695 DSACKs received
    1 DSACKs for out of order packets received
    44 connections reset due to unexpected data
    76 connections reset due to early user close
    6079 connections aborted due to timeout
    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 ~]#

Kernel routing information

Vous avez un problème de routage? ou, la connectivité ne fonctionne pas comme prévu car la connexion emprunte un itinéraire différent?

Vérifiez rapidement la table de routage.

[root@lab ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 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 used by Port Number

Très pratique pour résoudre les problèmes de conflit de port. Disons que vous essayez de démarrer le serveur Apache ou Nginx, qui écoute sur le port 80 mais ne peut pas car 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 ~]#

Et 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 de protocole en hexadécimal

Une fois que vous avez hexadécimal, vous pouvez exécuter ci-dessous pour obtenir quel processus contient un numéro de port.

rmsock $address_of_pcb tcpcb

List of network interfaces

Vous avez plusieurs interfaces Ethernet? ou pas sûr et que vous voulez 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 ~]#

Continuous Listening

Une excellente option pour résoudre les problèmes liés aux plantages des services. Disons qu'une application plante au hasard toutes les quelques minutes. Mais je ne sais pas quand exactement. Vous pouvez utiliser -c argument qui montrera 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

Quand il arrête de se mettre à jour, vous savez qu'il s'est écrasé.

Conclusion

netstat est l'une des commandes largement utilisées par sysadmin et j'espère que les exemples ci-dessus vous donneront une idée de ce que vous pouvez en faire. Si vous souhaitez en savoir plus sur l'administration Linux, consultez ceci Cours Udemy.

Merci à nos commanditaires
Plus de bonnes lectures sur Linux
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise 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, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Semrush est une solution de marketing numérique tout-en-un avec plus de 50 outils de référencement, de médias sociaux et de marketing de contenu.
    Essayez Semrush
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder