“netstat -s”的替代方案

Mar*_*tin 34 linux netstat iproute

netstat -s 打印出许多非常详细的协议统计信息,例如收到的 TCP 重置消息数或发送的 ICMP“回显请求”消息数或由于丢失路由而丢弃的数据包数。

netstat现在在 Linux 中被认为已弃用时,还有其他选择吗?

ss -s与提供的统计数据相比,由 提供的统计数据是肤浅的netstat

GAD*_*D3R 35

NETSTAT 现在被认为已弃用,网络工具中包含的其他程序如 arp、ifconfig、iptunnel、nameif netstat、和 route。

其中几个实用程序提供的功能已在新的iproute2套件中进行了复制和改进,主要是通过使用其新ip命令。

不推荐使用的命令及其替换示例:

  • arp ? ip n( ip neighbor)
  • ifconfig? ip a( ip addr), ip link, ip -s( ip -stats)
  • iptunnel ? ip tunnel
  • iwconfig ? iw
  • nameif ? ip link, 重命名
  • netstat ? ss, ip route(for netstat -r), ip -s link(for netstat -i), ip maddr(for netstat -g)

netstat命令读取各种 /proc 文件以收集信息。然而,当有很多连接要显示时,这种方法会变得很弱。这使它变慢。该ss命令直接从内核空间获取其信息。ss命令中使用的选项与netstat 非常相似,因此很容易替换。

提供的统计ss肤浅的,但它被认为是 更好的选择,以netstat

例子

ss | less  # get all connections
ss -t      # get tcp connections not in listen mode (server programs)
ss -u      # get udp connections not in listen mode
ss -x      # get unix socket pipe connections
ss -ta     # get all tcp connections
ss -au     # get all udp connections
ss -nt     # all tcp without host name
ss -ltn    # listening tcp without host resolution
ss -ltp    # listening tcp with PID and name
ss -s      # prints statstics
ss -tn -o  # tcp connection with domain host and show keepalive timer
ss -tl4    # ip4 connections 
Run Code Online (Sandbox Code Playgroud)

  • 这不能回答问题,OP 正确指出`ss -s` *不提供*`netstat -s` 提供的数据。这也包含错误信息:`/proc` *是*内核接口,这正是`ss`获取大量数据的方式:`strace -e trace=file,read /sbin/ss -s`。 (5认同)
  • OP 并不是说​​完全“ss 是肤浅的”,而是“与 netstat 提供的相比,`ss -s` 是肤浅的”(意思是与 `netstat -s` 相比)。这确实是事实:例如,从 ss -s 中,您对 TCP 重传一无所知。 (2认同)

mr.*_*tic 26

netstat确实已被许多发行版弃用,尽管实际上很多“net-tools”包(包括ifconfig,routearp)已被弃用而支持“iproute2”包。iproute2已经随着最新的 Linux 网络功能而发展,而传统的实用程序则没有。

您想要的 iproute2 等效项是鲜为人知的nstat,它提供了netstat -s计数器,尽管形式略有不同:

  • 使用原始计数器名称/proc,每个名称都以其类为前缀(“Udp”、“Tcp”、“TcpExt”等)

  • netstat 的长(可能是本地化的)描述不可用

  • 默认省略零值计数器

  • 在第一列和第二列中使用具有名称和值的一致列输出

  • 如果您已启动后台 nstat(-d守护进程模式),则第三列显示可配置时间窗口内的平均值,否则为 0.0

    例如nstat打印“UdpInDatagrams NNN”而不是“Udp:InDatagrams”,而不是“Udp:NNN 数据包接收”的详细 netstat 版本。

nstat还假设您想要增量而不是绝对数字,因此最接近的等效项netstat -s/sbin/nstat -asz选项-a使用绝对计数器,-s不要保留历史文件,-z不要省略零值计数器。

ss接管 的“套接字”部分netstat,但不是您发现的完整功能。(ss其实是优于netstat在许多情况下,两个特定的人都使用的能力,使用过滤器表达式和可选的能力tcp_diaginet_diag更直接的Linux内核模块访问内核套接字数据不是通过/proc。)

如果您需要确认描述性名称的映射,net-tools 源是最终参考:http : //sourcecodebrowser.com/net-tools/1.60/statistics_8c_source.html

Doug Vitale 提供了一个有用的指南,用于查找旧命令的 iproute2 等效项(它没有维护且略有不完整,它省略了至少自 2004内核 2.6.x 时间以来nstat一直是 iproute2 包的一部分的任何引用)。

净工具住在但是,你应该能够找到一个包为您分配(或自己编译)。


jca*_*ron 5

您可能需要检查以下内容/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
Run Code Online (Sandbox Code Playgroud)

不是最友好的格式,但你明白了。

不确定它是否真的包含您正在寻找的特定项目,但它们可能在/proc/net.

  • 这是一个(单长行)脚本来格式化输出:`awk '{for(i=1;i<=NF;i++)title[i] = $i; 热线;打印标题[1]; for(i=2;i<=NF;i++)printf " %s: %s\n", title[i], $i }' /proc/net/netstat` (5认同)
  • `/proc/net/snmp` 包含*大部分*数据,`/proc/net/netstat` 包含其余数据。遗憾的是,您需要阅读 [net-tools `statistics.c` 源代码](http://sourcecodebrowser.com/net-tools/1.60/statistics_8c_source.html) 来确定所有名称映射,尽管大多数都非常明显。 (2认同)