Linux netstat命令详解

来源:互联网 发布:手机兼职淘宝刷好评 编辑:程序博客网 时间:2024/06/03 14:08

个人原创地址:http://www.phpthinking.com/archives/406

简介

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

 

输出信息含义

执行netstat后,其输出结果为

 

01Active Internet connections (w/o servers)
02 
03Proto Recv-Q Send-Q Local Address Foreign Address State
04 
05tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
06 
07tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
08 
09tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
10 
11tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
12 
13tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE
14 
15  
16 
17Active UNIX domain sockets (w/o servers)
18 
19Proto RefCnt Flags Type State I-Node Path
20 
21unix 1 [ ] STREAM CONNECTED 16178 @000000dd
22 
23unix 1 [ ] STREAM CONNECTED 16176 @000000dc
24 
25unix 9 [ ] DGRAM 5292 /dev/log
26 
27unix 1 [ ] STREAM CONNECTED 16182 @000000df

 

从整体上看,netstat的输出结果可以分为两个部分:

 

一个是Active Internet connections,称为有源TCP连接,其中”Recv-Q”和”Send-Q”指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

 

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

 

常见参数

-a (all)显示所有选项,默认不显示LISTEN相关

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-n 拒绝显示别名,能显示数字的全部转化成数字。

-l 仅列出有在 Listen (监听) 的服務状态

 

-p 显示建立相关链接的程序名

-r 显示路由信息,路由表

-e 显示扩展信息,例如uid等

-s 按各个协议进行统计

-c 每隔一个固定时间,执行该netstat命令。

 

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

 

 

 

实用命令实例

 

1. 列出所有端口 (包括监听和未监听的)

列出所有端口 netstat -a

 

01# netstat -a | more
02 
03Active Internet connections (servers and established)
04 
05Proto Recv-Q Send-Q Local Address           Foreign Address         State
06 
07tcp        0      0 localhost:30037         *:*                     LISTEN
08 
09udp        0      0 *:bootpc                *:*
10 
11  
12 
13Active UNIX domain sockets (servers and established)
14 
15Proto RefCnt Flags       Type       State         I-Node   Path
16 
17unix  2      [ ACC ]     STREAM     LISTENING     6135     /tmp/.X11-unix/X0
18 
19unix  2      [ ACC ]     STREAM     LISTENING     5140     /var/run/acpid.socket

 

列出所有 tcp 端口 netstat -at

 

01# netstat -at
02 
03Active Internet connections (servers and established)
04 
05Proto Recv-Q Send-Q Local Address           Foreign Address         State
06 
07tcp        0      0 localhost:30037         *:*                     LISTEN
08 
09tcp        0      0 localhost:ipp           *:*                     LISTEN
10 
11tcp        0      0 *:smtp                  *:*                     LISTEN
12 
13tcp6       0      0 localhost:ipp           [::]:*                  LISTEN

 

列出所有 udp 端口 netstat -au

 

01# netstat -au
02 
03Active Internet connections (servers and established)
04 
05Proto Recv-Q Send-Q Local Address           Foreign Address         State
06 
07udp        0      0 *:bootpc                *:*
08 
09udp        0      0 *:49119                 *:*
10 
11udp        0      0 *:mdns                  *:*

 

2. 列出所有处于监听状态的 Sockets

只显示监听端口 netstat -l

 

01# netstat -l
02 
03Active Internet connections (only servers)
04 
05Proto Recv-Q Send-Q Local Address           Foreign Address         State
06 
07tcp        0      0 localhost:ipp           *:*                     LISTEN
08 
09tcp6       0      0 localhost:ipp           [::]:*                  LISTEN
10 
11udp        0      0 *:49119                 *:*

只列出所有监听 tcp 端口 netstat -lt

 

[/php]# netstat -lt

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0      0 localhost:30037         *:*                     LISTEN

tcp        0      0 *:smtp                  *:*                     LISTEN

tcp6       0      0 localhost:ipp           [::]:*                  LISTEN[/php]

只列出所有监听 udp 端口 netstat -lu

 

1# netstat -lu
2 
3Active Internet connections (only servers)
4 
5Proto Recv-Q Send-Q Local Address           Foreign Address         State
6 
7udp        0      0 *:49119                 *:*
8 
9udp        0      0 *:mdns                  *:*

只列出所有监听 UNIX 端口 netstat -lx

 

01# netstat -lx
02 
03Active UNIX domain sockets (only servers)
04 
05Proto RefCnt Flags       Type       State         I-Node   Path
06 
07unix  2      [ ACC ]     STREAM     LISTENING     6294     private/maildrop
08 
09unix  2      [ ACC ]     STREAM     LISTENING     6203     public/cleanup
10 
11unix  2      [ ACC ]     STREAM     LISTENING     6302     private/ifmail
12 
13unix  2      [ ACC ]     STREAM     LISTENING     6306     private/bsmtp

 

3. 显示每个协议的统计信息

显示所有端口的统计信息 netstat -s

 

01# netstat -s
02 
03Ip:
04 
0511150 total packets received
06 
071 with invalid addresses
08 
090 forwarded
10 
110 incoming packets discarded
12 
1311149 incoming packets delivered
14 
1511635 requests sent out
16 
17Icmp:
18 
190 ICMP messages received
20 
210 input ICMP message failed.
22 
23Tcp:
24 
25582 active connections openings
26 
272 failed connection attempts
28 
2925 connection resets received
30 
31Udp:
32 
331183 packets received
34 
354 packets to unknown port received.
36 
37.....

 

显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

 

1# netstat -st
2 
3# netstat -su

 

4. 在 netstat 输出中显示 PID 和进程名称 netstat -p

netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。

 

01# netstat -pt
02 
03Active Internet connections (w/o servers)
04 
05Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
06 
07tcp        1      0 ramesh-laptop.loc:47212 192.168.185.75:www        CLOSE_WAIT  2109/firefox
08 
09tcp        0      0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox
10 
115. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)

当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

 

同样可以加速输出,因为不用进行比对查询。

 

1# netstat -an

如果只是不想让这三个名称中的一个被显示,使用以下命令

 

1# netsat -a --numeric-ports
2 
3# netsat -a --numeric-hosts
4 
5# netsat -a --numeric-users

 

6. 持续输出 netstat 信息

netstat 将每隔一秒输出网络信息。

 

01# netstat -c
02 
03Active Internet connections (w/o servers)
04 
05Proto Recv-Q Send-Q Local Address           Foreign Address         State
06 
07tcp        0      0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
08 
09tcp        1      1 ramesh-laptop.loc:52564 101.11.169.230:www      CLOSING
10 
11tcp        0      0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
12 
13tcp        1      1 ramesh-laptop.loc:42367 101.101.34.101:www      CLOSING
14 
15^C

 

7. 显示系统不支持的地址族 (Address Families)

netstat –verbose

在输出的末尾,会有如下的信息

 

1netstat: no support for `AF IPX' on this system.
2 
3netstat: no support for `AF AX25' on this system.
4 
5netstat: no support for `AF X25' on this system.
6 
7netstat: no support for `AF NETROM' on this system.

 

8. 显示核心路由信息 netstat -r

01# netstat -r
02 
03Kernel IP routing table
04 
05Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
06 
07192.168.1.0     *               255.255.255.0   U         0 0          0 eth2
08 
09link-local      *               255.255.0.0     U         0 0          0 eth2
10 
11default         192.168.1.1     0.0.0.0         UG        0 0          0 eth2

注意: 使用 netstat -rn 显示数字格式,不查询主机名称。

 

 

9. 找出程序运行的端口

并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

 

01# netstat -ap | grep ssh
02 
03tcp        1      0 dev-db:ssh           101.174.100.22:39213        CLOSE_WAIT  -
04 
05tcp        1      0 dev-db:ssh           101.174.100.22:57643        CLOSE_WAIT  -
06 
07找出运行在指定端口的进程
08 
09  
10 
11# netstat -an | grep ':80'

 

10. 显示网络接口列表

01# netstat -i
02 
03Kernel Interface table
04 
05Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
06 
07eth0       1500 0         0      0      0 0             0      0      0      0 BMU
08 
09eth2       1500 0     26196      0      0 0         26883      6      0      0 BMRU
10 
11lo        16436 0         4      0      0 0             4      0      0      0 LRU

显示详细信息,像是 ifconfig 使用 netstat -ie:

 

01# netstat -ie
02 
03Kernel Interface table
04 
05eth0      Link encap:Ethernet  HWaddr 00:10:40:11:11:11
06 
07UP BROADCAST MULTICAST  MTU:1500  Metric:1
08 
09RX packets:0 errors:0 dropped:0 overruns:0 frame:0
10 
11TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
12 
13collisions:0 txqueuelen:1000
14 
15RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
16 
17Memory:f6ae0000-f6b00000

 

11. IP和TCP分析

查看连接某服务端口最多的的IP地址

 

 

01netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
02 
0318 221.136.168.36
04 
053 154.74.45.242
06 
072 78.173.31.236
08 
092 62.183.207.98
10 
112 192.168.1.14
12 
132 182.48.111.215
14 
152 124.193.219.34
16 
172 119.145.41.2
18 
192 114.255.41.30
20 
211 75.102.11.99

 

TCP各种状态列表

 

 

01netstat -nat |awk '{print $6}'
02 
03established)
04 
05Foreign
06 
07LISTEN
08 
09TIME_WAIT
10 
11ESTABLISHED
12 
13TIME_WAIT
14 
15SYN_SENT

 

1 view plaincopyprint?
2 
3<span style="line-height:1.5; font-size:14px">  先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。</span>
01netstat -nat |awk '{print $6}'|sort|uniq -c
02 
03143 ESTABLISHED
04 
051 FIN_WAIT1
06 
071 Foreign
08 
091 LAST_ACK
10 
1136 LISTEN
12 
136 SYN_SENT
14 
15113 TIME_WAIT
16 
171 established)

 

1 view plaincopyprint?
2 
3<span style="line-height:1.5; font-size:14px"

最后的命令如下:</span>

1netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
1 view plaincopyprint?
2 
3<span style="line-height:1.5; font-size:14px"><strong>分析access.log获得访问前10位的ip地址</strong></span>
4 
5awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10

.


3 0
原创粉丝点击