Netstat 命令详解

参考:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html

参考:http://www.jb51.net/LINUXjishu/152405.html

netstat 命令:http://man.linuxde.net/netstat


Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。


网络连接状态详解

共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。

1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN.
    /* The socket is listening for incoming connections. 侦听来自远方TCP端口的连接请求 */

2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT.
    /*The socket is actively attempting to establish a connection. 在发送连接请求后等待匹配的连接请求 */

3)、SYN_RECV:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV
    /* A connection request has been received from the network. 在收到和发送一个连接请求后等待对连接请求的确认 */

4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。
    /* The socket has an established connection. 代表一个打开的连接,数据可以传送给用户 */

5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态.
    /* The socket is closed, and the connection is shutting down. 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 */

6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.
    /* The remote end has shut down, waiting for the socket to close. 等待从本地用户发来的连接中断请求 */

7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了 FIN-WAIT-2 .
    /* Connection is closed, and the socket is waiting for a shutdown from the remote end. 从远程TCP等待连接中断请求 */

8)、LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK .
    /* The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原来发向远程TCP的连接中断请求的确认 */

9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态。
    /* The socket is waiting after close to handle packets still in the network.等待足够的时间以确保远程TCP接收到连接中断请求的确认 */

10)、CLOSING: 比较少见.
    /* Both sockets are shut down but we still don’t have all our data sent. 等待远程TCP对连接中断的确认 */

11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束.
    /* The socket is not being used. 没有任何连接状态 */

12)、UNKNOWN: 未知的Socket状态。
    /* The state of the socket is unknown. */
SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。
FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。

在windows下有个小工具挺好的,TCPView。当然如果要详细分析数据包,可选用sniffer、Wireshark等更强大的工具。


Windows 下 netstat 参数

C:\>netstat /?
显示协议统计信息和当前 TCP/IP 网络连接。

NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
  -a            显示所有连接和监听端口。
  -b            显示包含于创建每个连接或监听端口的可执行组件。即 显示在创建网络连接和侦听端口时所涉及的可执行程序。
                在某些情况下已知可执行组件拥有多个独立组件,并且在这些情况下包含于创建连接或监听端口的组件序列被显示。
                这种情况下,可执行组件名在底部的 [] 中,顶部是其调用的组件等等,直到 TCP/IP部分。
                注意此选项可能需要很长时间,如果没有足够权限可能失败。
  -e            显示以太网统计信息。此选项可以与 -s选项组合使用。
  -n            以数字形式显示地址和端口号。禁止域名解析 
  -o            显示与每个连接相关的所属进程 ID。
  -p proto      显示 proto 指定的协议的连接;proto 可以是下列协议之一: TCP、UDP、TCPv6 或 UDPv6。
                如果与 -s 选项一起使用以显示按协议统计信息,proto可以是下列协议之一:IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或()UDPv6。
  -r            显示路由表。
  -s            显示按协议统计信息。默认地,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;-p 选项用于指定默认情况的子集。
  -t            显示当前连接卸载状态。
  -v            与 -b 选项一起使用时将显示包含于为所有可执行组件创建连接或监听端口的组件。
  interval      重新显示选定统计信息,每次显示之间暂停时间间隔(以秒计)。按 CTRL+C 停止重新显示统计信息。
                如果省略,netstat 显示当前配置信息(只显示一次)

Netstat的一些常用选项 

netstat -s——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。 
netstat -e——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。 
netstat -r——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。 
netstat -a——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接,断开连接(CLOSE_WAIT)或者处于联机等待状态的(TIME_WAIT)等
netstat -n——显示所有已建立的有效连接。


netstat 支持用于显示活动或被动套接字的选项集。选项- t、- u、- w 和 -x 分别表示TCP、UDP、RAW和UNIX套接字连接。如果你另外还提供了一个-a标记,还会显示出等待连接(也就是说处于监听模式)的套接字。这样就可以得到一份当前运行于系统中的所有服务清单。 

调用 netstat -ta 时,输出结果如下: 

[root@machine1 /]$ netstat -ta 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED 
tcp 0 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED 
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED 
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED 
tcp 0 0 *:9001 *:* LISTEN 
tcp 0 0 *:6000 *:* LISTEN 
tcp 0 0 *:socks *:* LISTEN 
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE 
上面的输出表明部分服务器处于等待接入连接状态。利用 - a 选项的话,netstat还会显示出所有的套接字。注意根据端口号,可以判断出一条连接是否是外出连接。对呼叫方主机来说,列出的端口号应该一直是一个 整数,而对众所周知服务(well known  service)端口正在使用中的被呼叫方来说,netstat采用的则是取自/etc/services文件的象征性服务名在随- i标记一起调用时, netstat将显示网络接口的当前配置特性。除此以外,如果调用时还带上-a选项,它还将输出内核中所有接口,并不只是当前配置的接口。

netstat-i的输出结果是这样的: 

[root@machine1 /]$ netstat -i 
Kernel Interface table 
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg 
eth0 1500 0 787165 0 0 1 51655 0 0 0 BRU 
eth1 1500 0 520811 0 0 0 1986 0 0 0 BRU 
lo 3924 0 1943 0 0 0 43 0 0 0 LRU 
MTU和Met字段表示的是接口的MTU和度量值值;RX和TX这两列表示的是已经准确无误地收发了多少数据包( RX - OK / TX -
OK)、产生了多少错误( RX-ERR/TX-ERR)、丢弃了多少包(RX-DRP/TX-DRP),由于误差而遗失了多少包(RX-OVR/TX-OVR);最后一列展示的是 为这个接口设置的标记,在利用ifconfig显示接口配置时,这些标记都采用一个字母。它们的说明如下: 
■ B 已经设置了一个广播地址。 
■ L 该接口是一个回送设备。 
■ M 接收所有数据包(混乱模式)。 
■ N 避免跟踪。 
■ O 在该接口上,禁用A R P。 
■ P 这是一个点到点链接。 
■ R 接口正在运行。 
■ U 接口处于“活动”状态。 ◆ 显示路由表 

在随 -r 标记一起调用 netstat 时,将显示内核路由表,就像我们利用route命令一样。产生的输出如下: 

[root@machine1 /]$ netstat -nr 
Kernel IP routing table 
Destination Gateway Genmask Flags MSS Window irtt Iface 
210.34.6.0 0.0.0.0 255.255.255.128 U 0 0 0 eth0 
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 
0.0.0.0 210.34.6.2 0.0.0.0 UG 0 0 0 eth0 
-n 选项令netstat以点分四段式的形式输出IP地址,而不是象征性的主机名和网络名。如果想避免通过网络查找地址(比如避开DNS或NIS服务器),这一点是特别有用的。 
netstat输出结果中,第二列展示的是路由条目所指的网关,如果没有使用网关,就会出现一个星号(*)或者0.0.0.0;第三列展示路由的概述,在
为具体的I P地址找出最恰当的路由时,内核将查看路由表内的所有条目,在对找到的路由与目标路由比较之前,将对I P地址和genmask进行按位“与”计算;第四列显示了不同的标记,这些标记的说明如下: 
■ G 路由将采用网关。 
■ U 准备使用的接口处于“活动”状态。 
■ H 通过该路由,只能抵达一台主机。 
■ D 如果路由表的条目是由ICMP重定向消息生成的,就会设置这个标记。 
■ M 如果路由表条目已被ICMP重定向消息修改,就会设置这个标记。 
netstat输出结果的Iface显示该连接所用的物理网卡,如eth0表示用第一张,eth1表示用第二张。 接下来我们来看一下,微软是怎么说的?
微软公司故意将这个功能强大的命令隐藏起来是因为它对于普通用户来说有些复杂。我们已经知道:Netstat它可以用来获得你的系统网络连接的信息(使用的端口,在使用的协议等 ),收到和发出的数据,被连接的远程系统的端口,Netstat在内存中读取所有的网络信息。 在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 对于好奇心极强的人来说,紧紧有上面的理论是远远不够的,接下来我们来详细的解释一下各个参数的使用,看看执行之后会发生什么,显示的信息又是什么意思,好了,废话不说了,让我们一起来实践一下吧:)
C:\>netstat -a
Active Connections
  Proto  Local Address          Foreign Address        State
  TCP    Eagle:ftp              Eagle:0                LISTENING
  TCP    Eagle:8001             Eagle:0                LISTENING
  TCP    Eagle:8005             Eagle:0                LISTENING
  TCP    Eagle:8065             Eagle:0                LISTENING
  TCP    Eagle:microsoft-ds     localhost:1031         ESTABLISHED
  TCP    Eagle:1031             localhost:microsoft-ds  ESTABLISHED
  TCP    Eagle:1040             Eagle:0                LISTENING
  TCP    Eagle:netbios-ssn      Eagle:0                LISTENING
  TCP    Eagle:1213             218.85.139.65:9002     CLOSE_WAIT
  TCP    Eagle:2927             219.137.227.10:4899    TIME_WAIT
  TCP    Eagle:2928             219.137.227.10:4899    TIME_WAIT
  TCP    Eagle:2929             219.137.227.10:4899    ESTABLISHED
  TCP    Eagle:3455             218.85.139.65:9002     ESTABLISHED
  TCP    Eagle:netbios-ssn      Eagle:0                LISTENING
  UDP    Eagle:microsoft-ds     *:*
  UDP    Eagle:1046             *:*
  UDP    Eagle:netbios-ns       *:*
  UDP    Eagle:netbios-dgm      *:*
我们拿其中一行来解释:
Proto  Local Address          Foreign Address        State
TCP    Eagle:2929             219.137.227.10:4899    ESTABLISHED
协议(Proto):TCP,指是传输层通讯协议(什么?不懂?请用baidu搜索"TCP",OSI七层和TCP/IP四层可是基础^_^)
本地机器名(Local  Address):Eagle,计算机名,安装系统时设置的,可以在“我的电脑”属性中修改,本地打开并用于连接的端口:2929)   
远程机器名(Foreign  Address):219.137.227.10
远程端口:4899  
状态:ESTABLISHED  
状态列表
LISTEN  :在监听状态中。   
ESTABLISHED:已建立联机的联机情况。 
TIME_WAIT:该联机在目前已经是等待的状态。 
-a 参数常用于获得你的本地系统开放的端口,用它您可以自己检查你的系统上有没有被安装木马(ps:有很多好程序用来检测木马,但你的目的是想成为真正的hacker,手工检测要比只按一下“scan”按钮好些----仅个人观点)。如果您Netstat你自己的话,发现下面的信息: 
  
  Port 12345(TCP) Netbus 
  Port 31337(UDP) Back Orifice 
  
  祝贺!您中了最常见的木马(^_^,上面4899是我连别人的,而且这个radmin是商业软件,目前我最喜欢的远程控制软件) 
  如果你需要木马及其端口列表的话,去国内的H站找找,或者baidu,google吧 
  
  ***************************************************************** 
  
  #一些原理:也许你有这样的问题:“在机器名后的端口号代表什么? 
  例子:Eagle:2929
  小于1024的端口通常运行一些网络服务,大于1024的端口用来与远程机器建立连接。  
  *****************************************************************

继续我们的探讨,使用-n参数。(Netstat -n) 。 Netstat -n基本上是-a参数的数字形式:
C:\>netstat -n
Active Connections
  Proto  Local Address          Foreign Address        State
  TCP    127.0.0.1:445          127.0.0.1:1031         ESTABLISHED
  TCP    127.0.0.1:1031         127.0.0.1:445          ESTABLISHED
  TCP    192.168.1.180:1213     218.85.139.65:9002     CLOSE_WAIT
  TCP    192.168.1.180:2416     219.133.63.142:443     CLOSE_WAIT
  TCP    192.168.1.180:2443     219.133.63.142:443     CLOSE_WAIT
  TCP    192.168.1.180:2907     192.168.1.101:2774     CLOSE_WAIT
  TCP    192.168.1.180:2916     192.168.1.101:23       ESTABLISHED
  TCP    192.168.1.180:2929     219.137.227.10:4899    ESTABLISHED
  TCP    192.168.1.180:3048     192.168.1.1:8004       SYN_SENT
  TCP    192.168.1.180:3455     218.85.139.65:9002     ESTABLISHED
-a 和 -n 是最常用的两个,据我不完全测试得出以下结果:
1. -n 显示用数字化主机名,即IP地址,而不是compute_name【eagle】
2. -n 只显示TCP连接(没有在哪里见过微软的相关文档,有哪个朋友见到的话,记得告诉我喔^_^)
     得到IP等于得到一切,它是最容易使机器受到攻击的东东,所以隐藏自己IP,获得别人的IP对hacker来说非常重要,现在隐藏IP技术很流行,但那些隐藏工具或服务真的让你隐身吗?我看不见得,呵呵,代理,跳板不属于今天讨论,一个获取对方IP的简单例子请参考我前面的文章【
用DOS命令查QQ好友IP地址


-a 和 -n 是最常用的命令,如果要显示一些协议的更详细信息,就要用-p这个参数了,它其实是 -a 和 -n 的一个变种,我们来看一个实例,你就明白了:【netstat -p @@@ 其中@@@为TCP或者UDP】
C:\>netstat -p tcp
Active Connections
  Proto  Local Address          Foreign Address        State
  TCP    Eagle:microsoft-ds     localhost:1031         ESTABLISHED
  TCP    Eagle:1031             localhost:microsoft-ds  ESTABLISHED
  TCP    Eagle:1213             218.85.139.65:9002     CLOSE_WAIT
  TCP    Eagle:2416             219.133.63.142:https   CLOSE_WAIT
  TCP    Eagle:2443             219.133.63.142:https   CLOSE_WAIT
  TCP    Eagle:2907             192.168.1.101:2774     CLOSE_WAIT
  TCP    Eagle:2916             192.168.1.101:telnet   ESTABLISHED
  TCP    Eagle:2929             219.137.227.10:4899    ESTABLISHED
  TCP    Eagle:3455             218.85.139.65:9002     ESTABLISHED
继续我们的参数讲解 -e
    含义:本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量。
C:\>netstat -e
Interface Statistics
                           Received            Sent
Bytes                     143090206        44998789
Unicast packets              691805          363603
Non-unicast packets          886526            2386
Discards                          0               0
Errors                            0               0
Unknown protocols              4449
    若接收错和发送错接近为零或全为零,网络的接口无问题。但当这两个字段有100个以上的出错分组时就可以认为是高出错率了。高的发送错表示本地网络饱和或在主机与网络之间有不良的物理连接;  高的接收错表示整体网络饱和、本地主机过载或物理连接有问题,可以用Ping命令统计误码率,进一步确定故障的程度。netstat -e 和ping结合使用能解决一大部分网络故障。

    接下来我们开始讲解两个比较复杂的参数  -r   -s  ,也正因为如此,笔者把他放到最后讲解,这里面可能会涉及到其他方面的知识,以后在我的博客中将会继续写出来,呵呵,最近比较忙
    
-r 是用来显示路由表信息,我们来看例子:
C:\>netstat -r
Route Table(路由表)
===========================================================================
Interface List(网络接口列表)
0x1 ........................... MS TCP Loopback interface
0x10003 ...00 0c f1 02 76 81 ...... Intel(R) PRO/Wireless LAN 2100 3B Mini PCI
dapter
0x10004 ...00 02 3f 00 05 cb ...... Realtek RTL8139/810x Family Fast Ethernet
C
===========================================================================
===========================================================================
Active Routes:(动态路由)
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    192.168.1.254   192.168.1.181       30
          0.0.0.0          0.0.0.0    192.168.1.254   192.168.1.180       20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.1.0    255.255.255.0    192.168.1.180   192.168.1.180       20
      192.168.1.0    255.255.255.0    192.168.1.181   192.168.1.181       30
    192.168.1.180  255.255.255.255        127.0.0.1       127.0.0.1       20
    192.168.1.181  255.255.255.255        127.0.0.1       127.0.0.1       30
    192.168.1.255  255.255.255.255    192.168.1.180   192.168.1.180       20
    192.168.1.255  255.255.255.255    192.168.1.181   192.168.1.181       30
        224.0.0.0        240.0.0.0    192.168.1.180   192.168.1.180       20
        224.0.0.0        240.0.0.0    192.168.1.181   192.168.1.181       30
  255.255.255.255  255.255.255.255    192.168.1.180   192.168.1.180       1
  255.255.255.255  255.255.255.255    192.168.1.181   192.168.1.181       1
Default Gateway:     192.168.1.254(默认网关)
===========================================================================
Persistent Routes:(静态路由)
  None
C:\>
-s  参数的作用前面有详细的说明,来看例子
C:\>netstat -s
IPv4 Statistics       (IP统计结果)    
  Packets Received                   = 369492(接收包数)
  Received Header Errors             = 0(接收头错误数)
  Received Address Errors            = 2(接收地址错误数)
  Datagrams Forwarded                = 0(数据报递送数)
  Unknown Protocols Received         = 0(未知协议接收数)
  Received Packets Discarded         = 4203(接收后丢弃的包数)
  Received Packets Delivered         = 365287(接收后转交的包数)
  Output Requests                    = 369066(请求数)
  Routing Discards                   = 0(路由丢弃数 )
  Discarded Output Packets           = 2172(包丢弃数)
  Output Packet No Route             = 0(不路由的请求包)
  Reassembly Required                = 0(重组的请求数)
  Reassembly Successful              = 0(重组成功数)
  Reassembly Failures                = 0(重组失败数)
  Datagrams Successfully Fragmented  = 0(分片成功的数据报数)
  Datagrams Failing Fragmentation    = 0(分片失败的数据报数)
  Fragments Created                  = 0(分片建立数)
ICMPv4 Statistics (ICMP统计结果)包括Received和Sent两种状态
                            Received    Sent
  Messages                  285         784(消息数)
  Errors                    0           0(错误数)
  Destination Unreachable   53          548(无法到达主机数目)
  Time Exceeded             0           0(超时数目)
  Parameter Problems        0           0(参数错误)
  Source Quenches           0           0(源夭折数)
  Redirects                 0           0(重定向数)
  Echos                     25          211(回应数)
  Echo Replies              207         25(回复回应数)
  Timestamps                0           0(时间戳数)
  Timestamp Replies         0           0(时间戳回复数)
  Address Masks             0           0(地址掩码数)
  Address Mask Replies      0           0(地址掩码回复数)
TCP Statistics for IPv4(TCP统计结果)
  Active Opens                        = 5217(主动打开数)
  Passive Opens                       = 80(被动打开数)
  Failed Connection Attempts          = 2944(连接失败尝试数)
  Reset Connections                   = 529(复位连接数)
  Current Connections                 = 9(当前连接数目)
  Segments Received                   = 350143(当前已接收的报文数)
  Segments Sent                       = 347561(当前已发送的报文数)
  Segments Retransmitted              = 6108(被重传的报文数目)
UDP Statistics for IPv4(UDP统计结果)
  Datagrams Received    = 14309(接收的数据包)
  No Ports              = 1360(无端口数)
  Receive Errors        = 0(接收错误数)
  Datagrams Sent        = 14524(数据包发送数)
C:\>
还有几个常用的命令参数是WindowsXP独有的,-b 和–v 这两个参数的解释在前面也是很详细了,我下面展示两个例子吧(主要是要显示对应的应用程序组件等详细信息,有马儿立刻献身喔,^_^)
C:\>netstat -b

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    Eagle:microsoft-ds     localhost:1031         ESTABLISHED     4
  [System]

  TCP    Eagle:1031             localhost:microsoft-ds  ESTABLISHED     4
  [System]

  TCP    Eagle:2929             219.137.227.10:4899    ESTABLISHED     3224
  [radmin.exe]

  TCP    Eagle:3455             218.85.139.65:9002     ESTABLISHED     1924
  [DCA.exe]

  TCP    Eagle:1213             218.85.139.65:9002     CLOSE_WAIT      1924
  [DCA.exe]

  TCP    Eagle:2416             219.133.63.142:https   CLOSE_WAIT      596
  [QQ.exe]

  TCP    Eagle:2443             219.133.63.142:https   CLOSE_WAIT      596
  [QQ.exe]

  TCP    Eagle:2907             192.168.1.101:2774     CLOSE_WAIT      596
  [QQ.exe]


C:\>netstat -v
Active Conne


linux 下 netstat 参数

netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multi‐cast memberships。

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

root@kali:~# netstat -h
usage: netstat [-vWeenNcCF] [] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [ ...]
       netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }

        -r, --route              显示路由表
        -i, --interfaces         显示网卡接口
        -g, --groups             显示多播组成员
        -s, --statistics         显示网络统计数据 (like SNMP)
        -M, --masquerade         display masqueraded connections

        -v, --verbose            详细信息
        -W, --wide               不截断IP地址
        -n, --numeric            不解析主机名。即使用数字形式的 IP 地址。禁止域名解析 
        --numeric-hosts          不解析主机名
        --numeric-ports          不解析端口名
        --numeric-users          不解析用户名
        -N, --symbolic           解析硬件名
        -e, --extend             显示网络其他更多相关信息
        -p, --programs           显示 PID/Program name for sockets
        -o, --timers             display timers
        -c, --continuous         列出所有连接

        -l, --listening          显示服务器监听套接字
        -a, --all                显示所有套接字 (默认: connected)
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              display routing cache instead of FIB
        -Z, --context            display SELinux security context for sockets

  ={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
           {-x|--unix} --ax25 --ipx --netrom
  =Use '-6|-4' or '-A ' or '--'; default: inet
  下面列出了可用的 address families (支持路由的):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)
root@kali:~#

提示:LISTEN和LISTENING的状态只有用 -a 或者 -l 才能看到

-a或–all                     显示所有socket,包括正在监听的。
-A<网络类型>或–<网络类型>    列出该网络类型连线中的相关地址。
-c或–continuous    每隔1秒就重新显示一遍,直到用户中断它。
-C或–cache         显示路由器配置的快取信息。
-e或–extend        显示扩展信息。
-F或–fib           显示FIB。
-g或–groups        显示多重广播功能群组组员名单。
-h或–help          在线帮助。
-i或–interfaces    显示所有网络接口的信息,格式“netstat -i”。
-l或–listening     显示监控中的服务器的Socket。
-M或–masquerade    显示伪装的网络连线。
-n或–numeric       直接使用IP地址,而不通过域名服务器。即以网络IP地址代替名称,显示出网络连接情形。
-N或–netlink或–symbolic    显示网络硬件外围设备的符号连接名称。
-o或–timers       显示计时器。
-p或–programs     显示正在使用Socket的程序识别码和程序名称。
-r或–route        显示核心路由表,格式同“route -e”。
-s或–statistice   显示网络工作信息统计表。即 按各个协议进行统计。
-t或–tcp        显示TCP协议的连接情况
-u或–udp        显示UDP协议的连接情况。
-v或–verbose    显示指令执行过程。即显示正在进行的工作。
-V或–version    显示版本信息。
-w或–raw        显示RAW传输协议的连线状况。
-x或–unix       此参数的效果和指定”-A unix”参数相同。
–ip或–inet      此参数的效果和指定”-A inet”参数相同。


 -n 参数 对比

Netstat 命令详解_第1张图片

使用示例

无参数使用 netstat

[root@localhost ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0    268 192.168.120.204:ssh         10.2.0.68:62420             ESTABLISHED 
udp        0      0 192.168.120.204:4371        10.58.119.119:domain        ESTABLISHED 
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                    1491   @/org/kernel/udev/udevd
unix  4      [ ]         DGRAM                    7337   /dev/log
unix  2      [ ]         DGRAM                    708823 
unix  2      [ ]         DGRAM                    7539   
unix  3      [ ]         STREAM     CONNECTED     7287   
unix  3      [ ]         STREAM     CONNECTED     7286   
[root@localhost ~]#

从整体上看,netstat的输出结果可以分为两个部分:一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

套接口类型:

-t :TCP
-u :UDP
-raw :RAW类型
--unix :UNIX域类型
--ax25 :AX25类型
--ipx :ipx类型
--netrom :netrom类型

状态说明:

LISTEN:      侦听来自远方的TCP端口的连接请求
SYN-SENT:    再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
ESTABLISHED: 代表一个打开的连接
FIN-WAIT-1:  等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:  从远程TCP等待连接中断请求
CLOSE-WAIT:  等待从本地用户发来的连接中断请求
CLOSING:     等待远程TCP对连接中断的确认
LAST-ACK:    等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
TIME-WAIT:   等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:      没有任何连接状态

列出所有端口。命令:netstat -a

[root@localhost ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 localhost:smux              *:*                         LISTEN      
tcp        0      0 *:svn                       *:*                         LISTEN      
tcp        0      0 *:ssh                       *:*                         LISTEN      
tcp        0    284 192.168.120.204:ssh         10.2.0.68:62420             ESTABLISHED 
udp        0      0 localhost:syslog            *:*                                     
udp        0      0 *:snmp                      *:*                                     
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     708833 /tmp/ssh-yKnDB15725/agent.15725
unix  2      [ ACC ]     STREAM     LISTENING     7296   /var/run/audispd_events
unix  2      [ ]         DGRAM                    1491   @/org/kernel/udev/udevd
unix  4      [ ]         DGRAM                    7337   /dev/log
unix  2      [ ]         DGRAM                    708823 
unix  2      [ ]         DGRAM                    7539   
unix  3      [ ]         STREAM     CONNECTED     7287   
unix  3      [ ]         STREAM     CONNECTED     7286   
[root@localhost ~]# 

显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请(LISTENING)的那些连接。

显示当前UDP连接状况。命令:netstat -nu

显示UDP端口号的使用情况。命令:netstat -apu

显示网卡列表。命令:netstat -i

显示组播组的关系。命令:netstat -g

显示网络统计信息。命令:netstat -s

显示监听的套接字。命令:netstat -l

示所有已建立的有效连接。命令:netstat -n

显示关于以太网的统计数据。命令:netstat -e

显示关于路由表的信息。命令:netstat -r

列出所有 tcp 端口。命令:netstat -at

统计机器中网络连接各个状态个数。命令:netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

把状态全都取出来后使用uniq -c统计后再进行排序。命令:netstat -nat |awk '{print $6}'|sort|uniq -c

查看连接某服务端口最多的的IP地址。命令:netstat -nat | grep "192.168.120.20:16067" |awk '{print $5}'|awk -F: '{print $4}'|sort|uniq -c|sort -nr|head -20

找出程序运行的端口。命令:netstat -ap | grep ssh

在 netstat 输出中显示 PID 和进程名称。命令:netstat -pt

找出运行在指定端口的进程。命令:netstat -anpt | grep ':16064'    然后再通过ps命令就可以找到具体的应用程序了。

其他组合:-tan, -uan, -tnl, -unl, -tunlp, -tal

netstat -a    列出所有端口
netstat -at   列出 所有 TCP 端口
netstat -au   列出 所有 UDP 端口
netstat -ax   列出 所有 UNIX 端口

netstat -l    显示监听端口
netstat -lt   显示监听的 TCP 端口
netstat -lu   显示监听的 UDP 端口
netstat -lx   显示监听的 UNIX 端口

netstat -s    显示所有端口的协议统计信息
netstat -st   或者  -su    显示 TCP 或者 UDP 端口统计信息
netstat -p    -p 开关可以与其他开关一起使用,就可以添加 “PID/进程名称” 到netstat的输出中
netstat -pt   
netstat -an   以数字形式显示(不使用主机名)
netstat -a --numeric-ports
netstat -a --numeric-hosts
netstat -a --numeric-users

netstat -c     每隔一秒输出网络信息
netstat --verbose    显示系统不支持的地址族
netstat -r     显示核心路由信息
netstat -rn    显示数字格式,不查询主机名

netstat -ap | grep ssh    找出程序运行端口
netstat -an | grep ':80'    找出运行在指定端口的进程
netstat -i      显示网络接口列表
netstat -ie     显示详细信息。跟 ifconfig 很像。

netstat -ntl    用来查看linux的端口使用情况
netstat -natp
netstat -ntlp
netstat -anp | grep 3306
netstat -an
netstat -ae |grep mysql
  
netstat -i -e 显示主机上每个网络接口的配置和状态
netstat -lp 标识正在监听的网络服务
netstat -rn  检查路由表
netstat -s 查看各种网络协议运行的统计信息
 
Linux查看端口及服务 
  # netstat -tulpn 
  或者是
  # netstat -npl


查看TIME_WAIT连接数
netstat -ae|grep "TIME_WAIT" |wc -l     
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' 

查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
 
netstat + awk 查询连接数两种方法,意义相同
1:netstat -pnt | awk '/^tcp/{print $5}' | cut -d: -f 1 | sort -n |uniq -c
2:netstat -pnt | awk '/^tcp/{s=split($5,N,":");A[N[s-1]]++} END{ for (k in A) print k,A[k]}'

系统连接状态篇:

1.查看TCP连接状态
    netstat -tnl | grep 443    查看443端口是否被占用。
    netstat -pnl | grep 443    可显示出占用本机443端口的进程PID。
    
    netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn
    netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’ 
    或
    netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,”\t”,state[key]}’
    netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,”\t”,arr[k]}’
    netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn
    netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]‘ | sort | uniq -c

2.查找请求数请20个IP(常用于查找攻来源):
    netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20
    netstat -ant |awk ‘/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A[i],i}’ |sort -rn|head -n20

3.用tcpdump嗅探80端口的访问看看谁最高
    tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort -nr |head -20

4.查找较多time_wait连接
    netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20

5.找查较多的SYN连接
    netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more

6.根据端口列进程
    netstat -ntlp | grep 80 | awk ‘{print $7}’ | cut -d/ -f1

网站日志分析篇1(Apache)

1.获得访问前10位的ip地址
    cat access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -10
    cat access.log|awk ‘{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}’

2.访问次数最多的文件或页面,取前20
    cat access.log|awk ‘{print $11}’|sort|uniq -c|sort -nr|head -20

3.列出传输最大的几个exe文件(分析下载站的时候常用)
    cat access.log |awk ‘($7~/\.exe/){print $10 ” ” $1 ” ” $4 ” ” $7}’|sort -nr|head -20

4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数
    cat access.log |awk ‘($10 > 200000 && $7~/\.exe/){print $7}’|sort -n|uniq -c|sort -nr|head -100

5.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
    cat access.log |awk ‘($7~/\.php/){print $NF ” ” $1 ” ” $4 ” ” $7}’|sort -nr|head -100

6.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
    cat access.log |awk ‘($NF > 60 && $7~/\.php/){print $7}’|sort -n|uniq -c|sort -nr|head -100

7.列出传输时间超过 30 秒的文件
    cat access.log |awk ‘($NF > 30){print $7}’|sort -n|uniq -c|sort -nr|head -20

8.统计网站流量(G)
    cat access.log |awk ‘{sum+=$10} END {print sum/1024/1024/1024}’

9.统计404的连接
    awk ‘($9 ~/404/)’ access.log | awk ‘{print $9,$7}’ | sort

10. 统计http status.
    cat access.log |awk ‘{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'
    cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn

10.蜘蛛分析
    查看是哪些蜘蛛在抓取内容。
    /usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'

网站日分析2(Squid篇)

2.按域统计流量
zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%s\t%d\n",domain,trfc[domain]}}'

效率更高的perl版本请到此下载:http://docs.linuxtone.org/soft/tools/tr.pl

数据库篇
1.查看数据库执行的sql
/usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'

系统Debug分析篇

1.调试命令
strace -p pid

2.跟踪指定进程的PID
gdb -p pid

详细访问linuxtone.org




你可能感兴趣的:(Shell)