netstat提示和技巧

与“有用的命令行”问题(用于Windows , Linux和Mac )一样,我认为“有用的方法来使用实用程序x”的问题是很方便的。 手册页告诉你什么参数可以做,但不一定是你为什么要使用这些参数,结果意味着什么有用的东西,没有经过大量的实验,或者如何得到你真正想要的答案,你永远不会知道。

我想知道关于netstat 。 看起来,我应该能够确定哪些进程正在使用带宽,实际上,系统使用带宽的速度有多快。 它也可以用来检测不需要的连接(可能是virii),它提供了各种路由信息(我只有在试图使Sharp Zaurus PDA使用TCP / IP over USB时才能使用)。换句话说,听起来像是一个金矿,我希望你们中的一些人能够分享你发现的信息。

请在您的回复中包含netstat和您的操作系统的版本。 看到一些示例输出并知道它意味着什么会很高兴。 我已经把这个问题标记为社区维基,我希望你也会在你的回答中做同样的事情,这样其他人知道不同的操作系统,如果他们知道,那么我们可以投票选出哪个答案最有用。

显示本地侦听的TCP / UDP端口,以及它们所属的进程:

sudo netstat -tulpn 

Netstat路由表

[这是在Mac OS X 10.5.7上testing的。 我怀疑在所有平台上的结果几乎相同,因为它被指示在Solaris上工作。]

 netstat -r 

会给你一个路由表。

 netstat -nr 

是一样的,但会给你原始IP而不是查找机器名称。 它的输出看起来像这样(只有更长):

 Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 192.168.40.250 UGSc 19 1 en1 127 127.0.0.1 UCS 0 0 lo0 127.0.0.1 127.0.0.1 UH 1 3140 lo0 169.254 link#5 UCS 0 0 en1 169.254.33.92 127.0.0.1 UHS 0 0 lo0 192.168.40 link#5 UCS 11 0 en1 192.168.40.1 0:17:f2:ca:a0:94 UHLW 0 0 en1 1150 ... Internet6: Destination Gateway Flags Netif Expire ::1 link#1 UHL lo0 fe80::%lo0/64 fe80::1%lo0 Uc lo0 fe80::1%lo0 link#1 UHL lo0 fe80::%en0/64 link#4 UC en0 ... ff02::/32 link#7 UC en2 ff02::/32 link#8 UC en3 

列:

目的地和网关:目的地是我们想要发送信息的地址(或地址范围)。 所有发送到该目的地的数据都将转到关联的网关。 网关知道去哪里发送数据以便在旅程中进行下一个“跳跃”。 如果我们希望将数据发送到路由表中没有条目的目标,它将通过默认网关。

标志: man / info页面列出所有标志。 以下是我的默认网关上的设置:

 UGSc U - RTF_UP Route usable G - RTF_GATEWAY Destination requires forwarding by intermediary S - RTF_STATIC Manually added c - RTF_PRCLONING Protocol-specified generate new routes on use 

这是奇怪的,它声称是手动添加,因为它通过DHCP。

参考: “refcnt字段给出了当前路由的活动使用次数,面向连接的协议通常在连接期间保持单一路由,而无连接协议在发送到同一目的地时获得路由。 (手册页)

使用: “使用字段提供使用该路由发送的数据包的数量”。

Netif: “接口条目表示用于路由的networking接口。”

在我的Mac上,

  • lo0是回送接口。
  • en0是以太网。
  • en1是无线的。
  • en2和en3由虚拟机使用。

过期:从不同版本的netstat的联机帮助页面:“显示路由到期之前剩余的时间(以分钟为单位)”。

检查CommandLineFu的Netstat页面,了解在bash中使用netstat的一些有用的方法。

在Windows中:

 c:>netstat -a | find /c "TCP" 68 

显示TCP / IP连接的数量。 如果您正在排除TCP端口耗尽的高networking系统,并且需要增加MaxUserPorts ,则此function很有用。

传输/接收率

在Mac上[OS X 10.5.7]:

 netstat -i -w 10 

[关于在Solaris和Linux上使用的注意事项,请参阅chuck的答案 。]

输出如下所示:

  input (Total) output packets errs bytes packets errs bytes colls 794 0 1166796 763 0 50358 0 789 0 1167773 765 0 52542 0 792 0 1166548 765 0 51174 0 796 0 1167262 598 0 40152 0 929 0 1278561 846 0 65625 0 563 0 815570 530 0 36828 0 32 0 4360 1 0 774 0 9 0 705 0 0 684 0 9 0 631 0 0 0 0 

这显示了在给定的时间间隔内传送了多less个数据包和字节。 (在这个例子中是10秒)。 我已连接到YouTube,并且每隔一段时间下载超过1 MB的内容,直到我closures了浏览器选项卡并且费率已经触底。

如果您正在等待上传或下载完成,这可能会很有用。 监视率,当它大幅下降,你知道它已经完成。

请注意,上面的命令显示了所有接口上的所有吞吐量。 要将其范围扩展到特定的接口(本例中为WiFi),请使用-I标志,如下所示:

 netstat -I en1 -w 10 

视窗:

 Netstat -n (Show active TCP connections, don't slow down trying to do name resolution) Proto Local Address Foreign Address State TCP 192.168.1.38:4853 69.59.196.212:80 ESTABLISHED 

显示活动的TCP连接,但没有UDP活动。

 Netstat -an (Show all connections, don't slow down trying to do name resolution) Proto Local Address Foreign Address State TCP 0.0.0.0:80 0.0.0.0:0 LISTENING TCP 192.168.1.38:4853 69.59.196.212:80 ESTABLISHED 

显示所有活动的TCP连接,以及侦听TCP和UDP连接。 此处不显示出站UDP活动。

视窗

 netstat -b 

使用连接显示进程

Windows 7(可能早些时候,但是):

 netstat -ano 

列出与相关PID的活动会话

 Active Connections Proto Local Address Foreign Address State PID TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 776 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:554 0.0.0.0:0 LISTENING 1724 

或者保存一个步骤

 netstat -anb 

(从提升的CMD提示)给出进程名称

 Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:135 0.0.0.0:0 LISTENING RpcSs [svchost.exe] TCP 0.0.0.0:445 0.0.0.0:0 LISTENING Can not obtain ownership information TCP 0.0.0.0:554 0.0.0.0:0 LISTENING [wmpnetwk.exe] TCP 0.0.0.0:2048 0.0.0.0:0 LISTENING 

我相信我正在重新发明轮子,但是这里有一个简单的Perl脚本来运行netstat并对输出进行sorting,以使目前主要连接的IP位于最前面。 这最好用于“手表”程序,以2秒为间隔进行更新。

更新:重大重写2013-02-11摆脱许多问题并显示主机名

示例输出:

 Distant inbound connections: 2 85.93.216.17:772 <-- 78.141.139.10 : 1 ip-78-141-139-10.dyn.luxdsl.pt.lu 1 x ESTABLISHED 80.90.47.155:443 <-- 78.141.139.10 : 1 ip-78-141-139-10.dyn.luxdsl.pt.lu 1 x ESTABLISHED Distant outbound connections: 3 80.90.63.61 --> 80.90.63.48:25 : 2 smtp.m-plify.net 2 x TIME_WAIT 85.93.216.17 --> 85.93.216.18:772 : 1 maya.m-plify.net 1 x ESTABLISHED Looping connections: 57 (10 duplicates) 127.0.0.1 --> 127.0.0.1:9355 : 20 1 x ESTABLISHED, 8 x TIME_WAIT, 11 x CLOSE_WAIT 127.0.0.1 --> 127.0.0.1:4713 : 10 10 x CLOSE_WAIT 127.0.0.1 --> 127.0.0.1:9353 : 9 4 x TIME_WAIT, 5 x CLOSE_WAIT 127.0.0.1 --> 127.0.0.1:3306 : 8 6 x ESTABLISHED, 1 x TIME_WAIT, 1 x CLOSE_WAIT 127.0.0.1 --> 127.0.0.1:5445 : 5 1 x ESTABLISHED, 4 x TIME_WAIT 127.0.0.1 --> 127.0.0.1:9354 : 2 2 x CLOSE_WAIT 127.0.0.1 --> 127.0.0.1:7998 : 1 1 x TIME_WAIT 127.0.0.1 --> 127.0.0.1:3351 : 1 1 x ESTABLISHED 127.0.0.1 --> 127.0.0.1:32000 : 1 1 x ESTABLISHED 

Solaris上:

 netstat -nr (displays routing table) 

从邪恶酷壳脚本书:

脚本#90.1 :每隔'n'分钟,抓取netstats值(通过crontab)

脚本#90.2 :分析netstat运行性能日志,确定重要的结果和趋势。

(喜欢这本书 – 非常值得购买!)

在Solaris上,很多人习惯使用“netstat -i 1”来获取正在运行的数据包数量。 Linux netstat具有这个function的无用版本,因为它显示了原始计数而不是增量。 要获得类似的结果,请执行“sar -n DEV 1 0”。 实际上考虑一下“LANG = C sar -n DEV 1 0 | grep interfacename”(sar把AM和PM的时间放在行首的某些地方,所以最好养成一直运行的习惯“LANG = C sar“,以防万一你会parsing它)。

在Solaris上,

 netstat -k 

显示各种统计信息的摘要。 用于检查错误等

由于没有人提到它:

 netstat -s 

通过linux下的协议提供了很多有用的统计数据。