代码改变世界

netstat命令使用实例

2013-04-08 20:59  bangerlee  阅读(1073)  评论(1编辑  收藏  举报

netstat命令用于显示网络相关信息,例如网络连接信息,路由表信息,端口占用情况等,下面介绍netstat的具体用法。

 

1.显示所有连接信息

-a 选项用于显示全部连接信息:

# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:sunrpc                *:*                     LISTEN                                     
udp        0      0 *:sunrpc                *:*                                 
                            
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     7697   private/error

注意这里所说的“连接信息”包括基于tcp/udp的连接,也包括 Unix domain socket 信息,既包含已建立连接信息,也包括监听状态的端口信息。 -at 选项用于仅显示tcp相关连接,-au 选项用于仅显示udp相关连接。

 

2.显示监听状态的端口

-l 选项用于显示监听(listening)状态的端口:

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:sunrpc                *:*                     LISTEN                                 
udp        0      0 *:qmqp                  *:*                                 
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     7697   private/error

同样,增加 t或u 将仅针对 tcp或udp 显示。

 

3.显示连接相关进程名和pid

我们查看某连接信息或某端口状态时,如果能查看到建立该连接或占用该端口的进程,这将非常有用,-p 选项完成该功能:

# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 bogon:ssh               bogon:49792             ESTABLISHED 4211/1 

 

4.查看某特定端口被哪个进程占用

查看某端口是否被占用,这是经常遇到的情形,可用以下方法查询:

# netstat -an | grep ':22'
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      
tcp        0      0 192.168.1.101:22        192.168.1.100:49792     ESTABLISHED 
tcp        0      0 :::22  

反过来,我们也可以查询某进程占用了哪些端口:

# netstat -ap | grep ssh
tcp        0      0 *:ssh                   *:*                     LISTEN      2792/sshd           
tcp        0      0 bogon:ssh               bogon:49792             ESTABLISHED 4211/1              
tcp        0      0 *:ssh                   *:*                     LISTEN      2792/sshd  

 

5.不作域名和端口名解析

以上我们用到了 -n 选项,其指示信息显示时不作域名和端口名解析。在/etc/hosts等文件中我们可以指定某ip对应某域名(如192.168.1.100对应bangerlee),若不使用 -n 选项,相应的连接条目将显示 'bangerlee',而加了 -n 选项则显示ip地址;对于周知端口,netstat默认显示周知端口对应的服务,如22号端口为ssh,-n 选项指示netstat显示端口号。

 

6.显示路由表信息

使用 -r 选项显示路由表信息,与route命令显示结果类似:

# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
bogon           *               255.255.255.0   U         0 0          0 wlan0
loopback        *               255.0.0.0       U         0 0          0 lo
default         bogon           0.0.0.0         UG        0 0          0 wlan0

 

7.显示网口信息

netstat还是用于显示网口信息:

# 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        0      0      0      0        0      0      0      0 BMU
lo    16436   0        6      0      0      0        6      0      0      0 LRU
wlan0  1500   0    29250      0      0      0     3485      0      0      0 BMRU

netstat -ie 将信息网口的详细信息,与ifconfig命令结果类似。

 

8.针对网络协议显示统计信息

-s 选项用于显示各网络协议相关统计信息:

# netstat -s
Ip:
    26700 total packets received
    3 with invalid addresses
    0 forwarded
    0 incoming packets discarded
    10844 incoming packets delivered
    3392 requests sent out
Tcp:
    33 active connections openings
    1 passive connection openings
    3 failed connection attempts
    0 connection resets received
    1 connections established
    3171 segments received
    3153 segments send out
    7 segments retransmited
    0 bad segments received.
    3 resets sent
Udp:
    150 packets received
    107 packets to unknown port received.
……

 

Reference: UNIX/Linux: 10 Netstat Command Examples