Netstat
Netstat est un utilitaire de ligne de commande qui peut être utilisé pour répertorier toutes les connexions réseau (socket) sur un système. Il répertorie toutes les connexions socket tcp, udp et les connexions socket unix.
Outre les sockets connectés, il peut également répertorier les sockets d'écoute qui attendent des connexions entrantes. Ainsi, en vérifiant un port 80 ouvert, vous pouvez confirmer si un serveur Web est en cours d'exécution sur le système ou non.
Cela en fait un outil très utile pour les administrateurs réseau et système.
Dans ce tutoriel, nous verrons quelques exemples d'utilisation de netstat pour trouver des informations sur les connexions réseau et les ports ouverts sur un système.
Voici une introduction rapide à netstat à partir des pages de manuel
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
1. Lister toutes les connexions
La première et la plus simple des commandes consiste à répertorier toutes les connexions actuelles. Exécutez simplement la commande netstat avec l'option a.
$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED tcp 0 0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN udp 0 0 enlightened:domain *:* udp 0 0 *:bootpc *:* udp 0 0 enlightened.local:ntp *:* udp 0 0 localhost:ntp *:* udp 0 0 *:ntp *:* udp 0 0 *:58570 *:* udp 0 0 *:mdns *:* udp 0 0 *:49459 *:* udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* udp6 0 0 ip6-localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:* udp6 0 0 [::]:mdns [::]:* udp6 0 0 [::]:63811 [::]:* udp6 0 0 [::]:54952 [::]:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 12403 @/tmp/dbus-IDgfj3UGXX unix 2 [ ACC ] STREAM LISTENING 40202 @/dbus-vfs-daemon/socket-6nUC6CCx
La commande ci-dessus affiche toutes les connexions de différents protocoles tels que les sockets tcp, udp et unix. Cependant ce n'est pas très utile. Les administrateurs souhaitent souvent sélectionner des connexions spécifiques en fonction de protocoles ou de numéros de port, par exemple.
2. Liste uniquement les connexions TCP ou UDP
Pour répertorier uniquement les connexions TCP, utilisez les options t.
$ netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:36310 del01s07-in-f24.1:https ESTABLISHED tcp 0 0 enlightened.local:45038 a96-17-181-10.depl:http ESTABLISHED tcp 0 0 enlightened.local:37892 ABTS-North-Static-:http ESTABLISHED .....
De même, pour répertorier uniquement les connexions udp, utilisez l'option u.
$ netstat -au Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 *:34660 *:* udp 0 0 enlightened:domain *:* udp 0 0 *:bootpc *:* udp 0 0 enlightened.local:ntp *:* udp 0 0 localhost:ntp *:* udp 0 0 *:ntp *:* udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* udp6 0 0 ip6-localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:*
La sortie ci-dessus montre les connexions ipv4 et ipv6.
3. Désactiver la recherche DNS inversée pour une sortie plus rapide
Par défaut, la commande netstat tente de trouver le nom d'hôte de chaque adresse IP de la connexion en effectuant une recherche DNS inversée. Cela ralentit la sortie. Si vous n'avez pas besoin de connaître le nom d'hôte et que seule l'adresse IP est suffisante, supprimez la recherche du nom d'hôte avec l'option n.
$ netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 192.168.1.2:49058 173.255.230.5:80 ESTABLISHED tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED tcp6 0 0 ::1:631 :::* LISTEN
La commande ci-dessus affiche TOUTES les connexions TCP sans résolution DNS. J'ai compris ? Bien.
4. Vérifier les connexions d'écoute - Ports ouverts
Tout démon/service réseau garde un port ouvert pour écouter les connexions entrantes. Celles-ci ressemblent également à des connexions socket et sont répertoriées par netstat. Pour afficher uniquement les ports d'écoute, utilisez l'option "-l".
$ netstat -tnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp6 0 0 ::1:631 :::* LISTEN
Maintenant, nous ne pouvons voir que les ports/connexions TCP à l'écoute. Si vous voulez voir tous les ports d'écoute, supprimez l'option t. Si vous voulez voir uniquement les ports udp en écoute, utilisez l'option "-u" au lieu de "-t".
Assurez-vous de supprimer l'option "-a", sinon toutes les connexions seraient répertoriées et pas seulement les connexions d'écoute.
Si vous exécutez un service comme http ou smtp sur votre serveur Linux, vous pouvez utiliser la commande ci-dessus pour vérifier si le service écoute ou non les connexions entrantes.
5. Obtenir le nom du processus/pid et l'identifiant de l'utilisateur
Lors de la visualisation des ports et connexions ouverts/en écoute, il est souvent utile de connaître le nom/pid du processus qui a ouvert ce port ou cette connexion.
Par exemple, le serveur Apache httpd ouvre le port 80. Ainsi, si vous souhaitez vérifier si un serveur http est en cours d'exécution ou non, ou quel serveur http est en cours d'exécution, apache ou nginx, recherchez le nom du processus.
Les détails du processus sont rendus disponibles par l'option 'p'.
~$ sudo netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1144/dnsmasq tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 661/cupsd tcp6 0 0 ::1:631 :::* LISTEN 661/cupsd
Lors de l'utilisation de l'option p, netstat doit être exécuté avec les privilèges root, sinon il ne peut pas détecter les pid des processus exécutés avec les privilèges root et la plupart des services comme http et ftp s'exécutent souvent avec les privilèges root.
Avec le nom/pid du processus, il est encore plus utile d'obtenir le nom d'utilisateur/uid propriétaire de ce processus particulier. Utilisez l'option e avec l'option p pour obtenir également le nom d'utilisateur.
$ sudo netstat -ltpe Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 enlightened:domain *:* LISTEN root 11090 1144/dnsmasq tcp 0 0 localhost:ipp *:* LISTEN root 9755 661/cupsd tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN root 9754 661/cupsd
L'exemple ci-dessus répertorie les connexions d'écoute de type Tcp avec les informations de processus et les informations étendues.
Les informations étendues contiennent le nom d'utilisateur et l'inode du processus. Il s'agit d'une commande utile pour les administrateurs réseau.
Remarque - Si vous utilisez l'option n avec l'option e, l'uid serait répertorié et non le nom d'utilisateur.
6. Statistiques d'impression
La commande netstat peut également imprimer des statistiques réseau telles que le nombre total de paquets reçus et transmis par type de protocole, etc.
Pour répertorier les statistiques de tous les types de paquets
$ netstat -s Ip: 32797 total packets received 0 forwarded 0 incoming packets discarded 32795 incoming packets delivered 29115 requests sent out 60 outgoing packets dropped Icmp: 125 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 125 125 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 125 ... OUTPUT TRUNCATED ...
Pour imprimer les statistiques de certains protocoles comme TCP ou UDP, utilisez les options correspondantes comme t et u avec l'option s. Simple !
7. Afficher les informations de routage du noyau
Les informations de routage du noyau peuvent être imprimées avec l'option r. C'est la même sortie que celle donnée par la commande route. Nous utilisons également l'option n pour désactiver la recherche de nom d'hôte.
$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
8. Interfaces réseau d'impression
La commande netstat peut également imprimer les informations sur les interfaces réseau. L'option "-i" fait la tâche.
$ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 31611 0 0 0 27503 0 0 0 BMRU lo 65536 0 2913 0 0 0 2913 0 0 0 LRU
La sortie ci-dessus contient des informations dans un format très brut. Pour obtenir une version plus conviviale de la sortie, utilisez l'option e avec i.
$ netstat -ie Kernel Interface table eth0 Link encap:Ethernet HWaddr 00:16:36:f8:b2:64 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::216:36ff:fef8:b264/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:31682 errors:0 dropped:0 overruns:0 frame:0 TX packets:27573 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:29637117 (29.6 MB) TX bytes:4590583 (4.5 MB) Interrupt:18 Memory:da000000-da020000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:2921 errors:0 dropped:0 overruns:0 frame:0 TX packets:2921 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:305297 (305.2 KB) TX bytes:305297 (305.2 KB)
La sortie ci-dessus est similaire à la sortie affichée par la commande ifconfig.
9. Obtenez la sortie netstat en continu
Netstat peut générer des informations de connexion en continu avec l'option c.
$ netstat -ct
La commande ci-dessus affichera les connexions TCP en continu.
10. Afficher les informations du groupe de multidiffusion
L'option g affichera les informations du groupe de multidiffusion pour les protocoles IPv4 et IPv6.
$ netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 all-systems.mcast.net eth0 1 224.0.0.251 eth0 1 all-systems.mcast.net lo 1 ip6-allnodes lo 1 ff01::1 eth0 1 ff02::fb eth0 1 ff02::1:fff8:b264 eth0 1 ip6-allnodes eth0 1 ff01::1 wlan0 1 ip6-allnodes wlan0 1 ff01::1
Plus d'exemples de commande netstat
D'accord, nous avons couvert les exemples de base de la commande netstat ci-dessus. Il est maintenant temps de faire des trucs de geek avec style.
Imprimer les connexions actives
Les connexions socket actives sont à l'état "ETABLISHED". Donc, pour obtenir toutes les connexions actives actuelles, utilisez netstat avec grep comme suit
$ netstat -atnp | grep ESTA (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 192.168.1.2:49156 173.255.230.5:80 ESTABLISHED 1691/chrome tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED 1691/chrome
Pour regarder une liste continue des connexions actives, utilisez la commande watch avec netstat et grep
$ watch -d -n0 "netstat -atnp | grep ESTA"
Vérifier si un service est en cours d'exécution
Si vous voulez vérifier si un serveur comme http, smtp ou ntp est en cours d'exécution ou non, utilisez à nouveau grep.
$ sudo netstat -aple | grep ntp udp 0 0 enlightened.local:ntp *:* root 17430 1789/ntpd udp 0 0 localhost:ntp *:* root 17429 1789/ntpd udp 0 0 *:ntp *:* root 17422 1789/ntpd udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* root 17432 1789/ntpd udp6 0 0 ip6-localhost:ntp [::]:* root 17431 1789/ntpd udp6 0 0 [::]:ntp [::]:* root 17423 1789/ntpd unix 2 [ ] DGRAM 17418 1789/ntpd
Nous avons donc constaté que le serveur ntp est en cours d'exécution. Grep pour http ou smtp ou tout ce que vous recherchez.
Conclusion
Eh bien, c'était la majeure partie de l'utilisation de netstat. Si vous recherchez des informations plus avancées ou souhaitez approfondir, lisez le manuel de netstat (man netstat).
Et laissez vos commentaires et suggestions dans la boîte de commentaires ci-dessous.
Ressources
Consultez la page de manuel Linux pour netstat pour en savoir plus.
https://linux.die.net/man/8/netstat
https://man7.org/linux/man-pages/man8/netstat.8.html