netstat提示和技巧


13

与“有用的命令行”问题(适用于WindowsLinuxMac)相同,我认为拥有“使用实用程序x的有用方法”问题会很方便。手册页告诉您执行哪些参数,但不一定告诉您为什么要使用它们,结果意味着什么,该命令执行了哪些有用的操作,而这些操作如果不进行大量试验就不会知道,或者如何获得您真正想要的答案。

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

请在回复中包含netstat的版本和您的操作系统。很高兴看到一些示例输出并知道其含义。我已将此问题标记为社区Wiki,希望您在答案中也做同样的事情,以便其他人,如果他们知道相同的答案,并且知道不同的操作系统,则可以发出几乎相同的命令,并且然后我们可以对最有用的答案进行投票。

Answers:


4

显示本地侦听的TCP / UDP端口及其所属的进程:

sudo netstat -tulpn

4
Mac几乎等同于“ sudo lsof -i -n -P | grep LISTEN”。(省略-n和-P标志将使其查找主机名和端口名)。
克林顿·布莱克莫尔

1
克林顿-这是一个很棒的命令。
SpacemanSpiff

3

Netstat路由表

[这已在Mac OS X 10.5.7上进行了测试。我怀疑结果表明在所有平台上都几乎一样,因为它表明可以在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: “接口条目指示用于路由的网络接口。”

在我的Mac上,

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

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




2

收发率

在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

这显示了在给定的时间间隔内传输了多少个数据包和字节。(在此示例中为10秒)。我已连接到youtube,并且每个间隔的下载量超过1 MB,直到关闭浏览器选项卡并且速度降至最低。

如果您正在等待上载或下载完成,这可能会很有用。监视速率,当速率急剧下降时,您就知道它已完成。

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

netstat -I en1 -w 10

1

视窗:

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活动。


我现在将添加评论,但是当我有足够的代表时,我将编辑答案。在Mac OS X 10.5.7上等效的netstat-添加-p tcp,因此它仅限于tcp协议。即。 netstat -p tcp -nnetstat -p tcp -an
克林顿·布莱克莫尔

Windows上的另一对有用的开关是-o(显示每个套接字的拥有PID)和-b(显示每个套接字的拥有进程名称)。在调查您怀疑已损坏的机器时特别方便。
穆拉利·苏里雅尔

netstat -nt做同样的事情(仅数字和tcp)
Jauder Ho


1

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

1

我确定我正在重新发明轮子,但这是一个简单的Perl脚本,用于运行netstat并对输出进行排序,以便当前连接最多的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


0

摘自《 Wicked Cool Shell Scripts》一书:

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

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

(喜欢这本书-值得购买!)


0

在Solaris上,很多人习惯执行“ netstat -i 1”来获取运行中的数据包计数。Linux netstat具有此功能的无用版本,因为它显示的是原始计数而不是增量。要获得类似的结果,请执行“ sar -n DEV 1 0”。实际上考虑“ LANG = C sar -n DEV 1 0 | grep接口名称”(sar在某些语言环境中将AM和PM的时间放在行的开头,因此最好养成始终运行“ LANG = C sar”,以防您解析它)。



0

在Solaris上,

netstat -k

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


0

由于没有人提到它:

netstat -s 

在Linux下通过协议提供了大量有用的统计信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.