альтернатива "netstat -s"


23

netstat -s виводить багато дуже детальної статистики протоколу, наприклад, кількість отриманих повідомлень про скидання TCP або кількість відправлених повідомлень ICMP "ехо-запит" або кількість пакетів, відхилених через відсутність маршруту.

Якщо в Linux netstatзараз вважається застарілим, то чи існує альтернатива?

Статистичні дані, які надаються, ss -sє поверхневими порівняно з тими, які надає netstat.


tcpdump, схоже, заповнює ту саму потребу
Томас Дікі

4
netstatзастаріло. Використовуйте ss.
mikeserv

@ThomasDickey tcpdumpдозволяє фіксувати прямий трафік, але не зберігає статистику таким чином netstat -s.
Мартін

1
Вказання платформи, можливо, буде корисним. Ви можете вивчити sysctlвихід або вміст різних /proc/net/*вузлів.
jcaron

Відповіді:


16

netstatдійсно застарів в багатьох дистрибутивах, хоча це на Насправді більша частина пакета «нетто-інструменти» ( в тому числі ifconfig, routeі arp) , що є застарілим на користь «IPRoute2» пакета. iproute2 розвивався разом із найновішими мережевими функціями Linux , а традиційні утиліти не мають.

Еквівалент iproute2, який ви хочете, є маловідомим nstat, але це дає netstat -sлічильники, хоча і дещо в іншій формі:

  • використовуються необроблені імена лічильників /proc, кожен з яких має префікс свого класу ("Udp", "Tcp", "TcpExt" тощо)
  • Довгі (і можливо локалізовані) описи netstat недоступні
  • лічильники нульового значення за замовчуванням опущені
  • з використанням послідовного стовпчикового виводу з назвою та значенням у першому та другому стовпцях
  • третій стовпець показує середнє значення за настроюваним часовим вікном, якщо ви запустили фоновий nstat ( -dрежим демон), або 0,0, якщо ні

    наприклад, nstatдрукує "UdpInDatagrams NNN", а не "Udp: InDatagrams", і не є багатослівна версія netstat "Udp: отримані пакети NNN".

nstatтакож передбачає, що ви хочете збільшувати, а не абсолютні числа, тому найближчим еквівалентом netstat -sє те, /sbin/nstat -aszде параметри -aвикористовують абсолютні лічильники, -sне зберігайте файл історії, -zне опускайте лічильники нульового значення.

ssбере на себе "сокет" частини netstat, але не його повноцінну функцію, як ви з'ясували. ( ssнасправді краще, ніж netstatу багатьох випадках, два конкретні - це можливість використання виразів фільтрів та необов'язкова можливість використання модулів ядра Linux tcp_diagта inet_diagдоступу до даних сокет ядра більш безпосередньо, ніж через /proc.)

Якщо вам потрібно підтвердити відображення описових імен, джерелом мережевих інструментів є остаточне посилання: http://sourcecodebrowser.com/net-tools/1.60/statistics_8c_source.html

Doug Vitale надає корисний посібник для знаходження iproute2-еквівалентів старих команд (він не збережений і трохи неповний; він опускає будь-які посилання на те, nstatщо було частиною пакету iproute2, щонайменше, з часу ядра 2004 року 2.6.x).

нетто-інструменти живуть однак, і ви повинні бути в змозі знайти пакет для вашого дистрибутива (або скомпілювати його самостійно).


23

В даний час NETSTAT вважається застарілим, а інші програми, що входять до мережевих інструментів, таких як arp, ifconfig, iptunnel, nameif netstatта route.

Функціонал, що надається декількома з цих утиліт, відтворений та вдосконалений у новому наборі iproute2 , насамперед за допомогою нової ipкоманди.

Приклади застарілих команд та їх заміни:

arp => ip n (ip сусід)

ifconfig => ip a (ip addr), ip-посилання, ip -s (ip -stats)

iptunnel => ip тунель

iwconfig => iw

nameif => ip-посилання, ifrename

netstat => ss, ip route (для netstat-r), ip -s посилання (для netstat -i), ip maddr (для netstat-g)

netstatКоманда зчитує різні / Proc файли для збору інформації. Однак такий підхід стає слабким, коли є багато підключень для відображення. Це робить це повільніше. ssКоманда отримує інформацію безпосередньо з простору ядра. Параметри, які використовуються з ssкомандами, дуже схожі на netstat, що робить його легкою заміною.

Статистичні дані , надані ssє поверхневими , але вважаються найкращою альтернативою дляnetstat

Приклади:

отримати всі з'єднання: ss | less

ss -t отримати з'єднання tcp не в режимі прослуховування (серверні програми)

ss -u отримати з'єднання udp не в режимі прослуховування

ss -x отримати з'єднання для розетки Unix

ss -ta отримати всі з'єднання tcp

ss -au отримати всі udp-з'єднання

ss -nt весь tcp без імені хоста

ss -ltn прослуховування ТКП без дозволу хоста

ss -ltp прослуховування tcp з PID та ім'ям

ss -s друкує статистику

ss -tn -o tcp підключення з хостом домену та показує таймер збереження

ss -tl4 ip4 з'єднання


4
Це не дає відповіді на запитання, ОП зазначає правильно, що ss -s не надає даних, які netstat -sнадає. Це також містить дезинформацію: /proc це інтерфейс ядра для цього , і це точно , як ssОтримує багато даних: strace -e trace=file,read /sbin/ss -s.
mr.spuratic

1
ОП заявила, що не цілком "поверхи" є поверхневими, але " ss -sє поверхневими порівняно з тими, які надає netstat" (означає порівняння netstat -s). І це справді правда: наприклад, з ss -s ви нічого не можете знати про передачу TCP.
кенічі

4

Ви можете перевірити вміст /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

Не найдружніший формат, але ви отримуєте ідею.

Не впевнений, що він містить конкретні предмети, які ви шукаєте, але вони можуть бути доступні в інших місцях /proc/net.


5
ось сценарій (один довгий рядок) для форматування вихідного сигналу: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
16-16

1
/proc/net/snmpмістить більшість даних і /proc/net/netstatмістить решту. На жаль, вам потрібно буде прочитати джерело мережевих інструментів,statistics.c щоб визначити всі відображення імен, хоча більшість є досить очевидними.
mr.spuratic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.