alternative à «netstat -s»

23

netstat -s imprime un grand nombre de statistiques de protocole très détaillées comme le nombre de messages de réinitialisation TCP reçus ou le nombre de messages de "demande d'écho" ICMP envoyés ou le nombre de paquets abandonnés en raison d'une route manquante.

Quand sous Linux netstatest considéré comme obsolète de nos jours, existe-t-il une alternative?

Les statistiques fournies par ss -ssont superficielles par rapport à celles fournies par netstat.

Martin
la source
tcpdump semble combler le même besoin
Thomas Dickey
4
netstatest obsolète. Utilisez ss.
mikeserv
@ThomasDickey tcpdumppermet de capturer le trafic en direct, mais ne stocke pas les statistiques d'une manière netstat -sindiquée.
Martin
1
La spécification de la plateforme serait probablement utile. Vous voudrez peut-être examiner la sysctlsortie ou le contenu de divers /proc/net/*nœuds.
jcaron

Réponses:

16

netstata en effet été déconseillé par de nombreuses distributions, bien que ce soit vraiment une grande partie du package "net-tools" (y compris ifconfig, routeet arp) qui a été déconseillé en faveur du package "iproute2". iproute2 a évolué avec les dernières fonctionnalités de mise en réseau Linux , contrairement aux utilitaires traditionnels.

L'équivalent iproute2 que vous voulez est le peu connu nstat, cela fournit les netstat -scompteurs, bien que sous une forme légèrement différente:

  • des noms de compteur bruts /procsont utilisés, chacun étant préfixé par sa classe ("Udp", "Tcp", "TcpExt", etc.)
  • les descriptions longues (et éventuellement localisées) de netstat ne sont pas disponibles
  • compteurs à valeur nulle omis par défaut
  • en utilisant une sortie en colonnes cohérente avec le nom et la valeur dans les première et deuxième colonnes
  • la troisième colonne affiche la moyenne sur une fenêtre de temps configurable si vous avez démarré un nstat en arrière-plan ( -dmode démon), ou 0,0 sinon

    par exemple, nstatimprime «UdpInDatagrams NNN» et non «Udp: InDatagrams», et non la version verbeuse netstat de «Udp: NNN paquets reçus».

nstatsuppose également que vous voulez des nombres incrémentiels plutôt que absolus, de sorte que l'équivalent le plus proche netstat -sest celui /sbin/nstat -aszoù les options -autilisent des compteurs absolus, -sne conservez pas le fichier historique, -zn'omettez pas les compteurs à valeur nulle.

ssreprend les parties "socket" de netstat, mais pas sa fonction complète comme vous l'avez découvert. ( ssest en fait mieux que netstatdans de nombreux cas, deux sont spécifiques: la possibilité d'utiliser des expressions de filtre et la capacité facultative d'utiliser les modules du noyau tcp_diaget inet_diagLinux pour accéder aux données de socket du noyau plus directement que via /proc.)

Si vous devez confirmer le mappage des noms descriptifs, la source net-tools est la référence définitive: http://sourcecodebrowser.com/net-tools/1.60/statistics_8c_source.html

Doug Vitale fournit un guide utile pour trouver les équivalents iproute2 des anciennes commandes (il est non maintenu et légèrement incomplet, il omet toute référence à nstatlaquelle fait partie du package iproute2 depuis au moins 2004 noyau 2.6.x).

net-tools persiste cependant et vous devriez pouvoir trouver un package pour votre distribution (ou le compiler vous-même).

Mr Spuratic
la source
23

NETSTAT est considéré comme obsolète de nos jours et d'autres programmes inclus dans les outils de net comme arp, ifconfig, iptunnel, nameif netstatet route.

La fonctionnalité fournie par plusieurs de ces utilitaires a été reproduite et améliorée dans la nouvelle suite iproute2 , principalement en utilisant sa nouvelle ipcommande.

Exemples de commandes obsolètes et de leurs remplacements:

arp => ip n (ip voisin)

ifconfig => ip a (ip addr), ip link, ip -s (ip -stats)

iptunnel => tunnel ip

iwconfig => iw

nameif => lien ip, ifrename

netstat => ss, route ip (pour netstat-r), lien ip -s (pour netstat -i), ip maddr (pour netstat-g)

La netstatcommande lit divers fichiers / proc pour recueillir des informations. Cependant, cette approche devient faible lorsqu'il y a beaucoup de connexions à afficher. Cela le rend plus lent. La sscommande obtient ses informations directement de l'espace noyau. Les options utilisées avec les sscommandes sont très similaires à netstat, ce qui en fait un remplacement facile.

Les statistiques fournies par sssont superficielles , mais il est considéré comme la meilleure alternative ànetstat

Exemples :

obtenir toutes les connexions: ss | less

ss -t obtenir les connexions tcp pas en mode d'écoute (programmes serveur)

ss -u obtenir des connexions udp pas en mode d'écoute

ss -x obtenir des connexions de tuyau de socket Unix

ss -ta obtenir toutes les connexions TCP

ss -au obtenir toutes les connexions udp

ss -nt tout tcp sans nom d'hôte

ss -ltn écoute tcp sans résolution d'hôte

ss -ltp écoute tcp avec PID et nom

ss -s imprime des statistiques

ss -tn -o connexion tcp avec l'hôte du domaine et afficher le temporisateur keepalive

ss -tl4 connexions ip4

GAD3R
la source
4
Cela ne répond pas à la question, l'OP souligne correctement qu'il ss -s ne fournit pas de données qui netstat -sfournissent. Il contient aussi la désinformation: /proc est l'interface du noyau pour cela et qui est exactement comment ssobtient beaucoup des données: strace -e trace=file,read /sbin/ss -s.
mr.spuratic
1
Le PO a déclaré que les «ss ne sont pas entièrement superficiels», mais « ss -ssont superficiels par rapport à ceux fournis par netstat» (signifie comparer à netstat -s). Et c'est vraiment la vérité: par exemple, à partir de ss -s, vous ne pouvez rien savoir sur les retransmissions TCP.
kenichi
4

Vous voudrez peut-être vérifier le contenu de /proc/net/netstat:

TcpExt: SyncookiesSent SyncookiesRecv SyncookiesFailed EmbryonicRsts PruneCalled RcvPruned OfoPruned OutOfWindowIcmps LockDroppedIcmps ArpFilter TW TWRecycled TWKilled PAWSPassive PAWSActive PAWSEstab DelayedACKs DelayedACKLocked DelayedACKLost ListenOverflows ListenDrops TCPPrequeued TCPDirectCopyFromBacklog TCPDirectCopyFromPrequeue TCPPrequeueDropped TCPHPHits TCPHPHitsToUser TCPPureAcks TCPHPAcks TCPRenoRecovery TCPSackRecovery TCPSACKReneging TCPFACKReorder TCPSACKReorder TCPRenoReorder TCPTSReorder TCPFullUndo TCPPartialUndo TCPDSACKUndo TCPLossUndo TCPLostRetransmit TCPRenoFailures TCPSackFailures TCPLossFailures TCPFastRetrans TCPForwardRetrans TCPSlowStartRetrans TCPTimeouts TCPLossProbes TCPLossProbeRecovery TCPRenoRecoveryFail TCPSackRecoveryFail TCPSchedulerFailed TCPRcvCollapsed TCPDSACKOldSent TCPDSACKOfoSent TCPDSACKRecv TCPDSACKOfoRecv TCPAbortOnData TCPAbortOnClose TCPAbortOnMemory TCPAbortOnTimeout TCPAbortOnLinger TCPAbortFailed TCPMemoryPressures TCPSACKDiscard TCPDSACKIgnoredOld TCPDSACKIgnoredNoUndo TCPSpuriousRTOs TCPMD5NotFound TCPMD5Unexpected TCPSackShifted TCPSackMerged TCPSackShiftFallback TCPBacklogDrop TCPMinTTLDrop TCPDeferAcceptDrop IPReversePathFilter TCPTimeWaitOverflow TCPReqQFullDoCookies TCPReqQFullDrop TCPRetransFail TCPRcvCoalesce TCPOFOQueue TCPOFODrop TCPOFOMerge TCPChallengeACK TCPSYNChallenge TCPFastOpenActive TCPFastOpenPassive TCPFastOpenPassiveFail TCPFastOpenListenOverflow TCPFastOpenCookieReqd TCPSpuriousRtxHostQueues BusyPollRxPackets
TcpExt: 0 0 3310 41566 0 0 0 8 0 0 6402271 0 0 0 0 55 4280514 134510 38423 0 611 15354484 20413302 794718685 0 14094957 6423168 25905597 17269587 4 23681 29 50 20 0 25 43 25 19211 1800 131 0 93 93 25430 4864 18099 1199566 2300620 1280201 0 279 0 0 38507 607 2359841 19 98943 1769 0 5993 0 0 0 3 65 1310588 380 0 0 0 0 613504 190 0 12056356 0 0 0 0 3 735740 43633 0 606 3933 193 0 24 0 0 0 14 0
IpExt: InNoRoutes InTruncatedPkts InMcastPkts OutMcastPkts InBcastPkts OutBcastPkts InOctets OutOctets InMcastOctets OutMcastOctets InBcastOctets OutBcastOctets InCsumErrors InNoECTPkts InECT1Pkts InECT0Pkts InCEPkts
IpExt: 0 0 50492 0 18482301 0 68850196397 26546692767 3029352 0 2305454225 0 0 457718114 36 19480 2472

Pas le format le plus convivial, mais vous avez l'idée.

Je ne sais pas s'il contient réellement les éléments spécifiques que vous recherchez, mais ils peuvent être disponibles ailleurs dans /proc/net.

jcaron
la source
5
voici un script (simple longue ligne) pour formater la sortie:awk '{for(i=1;i<=NF;i++)title[i] = $i; getline; print title[1]; for(i=2;i<=NF;i++)printf " %s: %s\n", title[i], $i }' /proc/net/netstat
meuh
1
/proc/net/snmpcontient la plupart des données et /proc/net/netstatcontient le reste. Malheureusement, vous devrez lire la statistics.csource net-tools pour déterminer tous les mappages de noms, bien que la plupart soient assez évidents.
mr.spuratic