码迷,mamicode.com
首页 > Web开发 > 详细

网络监控工具 - netstat

时间:2015-07-20 15:56:35      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

察看本机的网络联机与后台: netstat 
[root@www ~]# netstat -[rn] <==与路由有关的参数 
[root@www ~]# netstat -[antulpc] <==与网络接口有关的参数 

选项与参数: 
与路由(route)有关的参数说明: 
-r:列出路由表(route table),功能如同route这个指令; 
-n:不使用主机名与服务名称,使用IP与port number,如同route -n 
与网络接口有关的参数: 
-a:列出所有的联机状态,包括tcp/udp/unix socket等; 
-t:仅列出TCP封包的联机; 
-u:仅列出UDP封包的联机; 
-l:仅列出有在Listen(监听)的服务之网络状态; 
-p:列出PID与Program的檔名; 
-c:可以设定几秒钟后自动更新一次,例如-c 5每五秒更新一次网络状态的显示;

-e 显示扩展信息,例如uid等;
-s 按各个协议进行统计。

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

        技术分享

netstat的输出主要分为两大部分,分别是TCP/IP的网络接口部分以及传统的Unix socket部分(Active Unix domain sockets的内容)。 
通常建议加上-n 这个参数的,因为可以避过主机名与服务名称的反查,直接以IP及端口口号码(port number)来显示,显示的速度上会快很多!

Active Internet connections称为有源TCP连接,主要是分为几个大项: 
Proto:该联机的封包协议,主要为TCP/UDP等封包; 
Recv-Q:非由用户程序连接所复制而来的总bytes数; 
Send-Q:由远程主机所传送而来,但不具有ACK标志的总bytes数, 意指主动联机SYN或其他标志的封包所占的bytes数; 
Local Address:本地端的地址,可以是IP (-n 参数存在时),也可以是完整的主机名。使用的格是就是『 IP:port 』只是IP的格式有IPv4及IPv6的差异。如上所示,在port 22的接口中,使用的:::22就是针对IPv6的显示,事实上他就相同于0.0.0.0:22的意思。 至于port 25仅针对lo接口开放,意指Internet基本上是无法连接到我本机的25端口啦! 
Foreign Address:远程的主机IP与port number 
stat:状态栏,主要的状态含有: 
ESTABLISED:已建立联机的状态; 
SYN_SENT:发出主动联机 (SYN 标志) 的联机封包; 
SYN_RECV:接收到一个要求联机的主动联机封包; 
FIN_WAIT1:该插槽服务(socket)已中断,该联机正在断线当中; 
FIN_WAIT2:该联机已挂断,但正在等待对方主机响应断线确认的封包; 
TIME_WAIT:该联机已挂断,但 socket 还在网络上等待结束; 
LISTEN:通常用在服务的监听 port !可使用『 -l 』参数查阅。

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

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

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

实用命令实例
1)列出所有端口 (包括监听和未监听的)
列出所有端口:netstat -a
列出所有tcp端口:netstat -at
列出所有udp端口:netstat -au

2)列出所有处于监听状态的Sockets
只显示监听端口:netstat -l
只列出所有监听tcp端口:netstat -lt
只列出所有监听udp端口:netstat -lu
只列出所有监听UNIX端口:netstat -lx

3)显示每个协议的统计信息
显示所有端口的统计信息:netstat -s
显示TCP或UDP端口的统计信息:netstat -st 或 -su

4)持续输出netstat信息:netstat 将每隔一秒输出网络信息。

5)显示系统不支持的地址族(Address Families):netstat --verbose

6)找出程序运行的端口:netstat -an | grep ‘:80‘ 并不是所有的进程都能找到,没有权限的会不显示,使用root权限查看所有的信息。

7)显示网络接口列表:netstat -i

8)统计机器中网络连接各个状态个数

netstat -a | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘

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

netstat -nat | grep "192.168.120.20:16067" |awk ‘{print $5}‘|awk -F: ‘{print $4}‘|sort|uniq -c|sort -nr|head -20

 

范例一:列出目前的路由表状态,且以IP及port number显示: 
[root@www ~]# netstat -rn 
其实这个参数就跟route -n一模一样,这不是netstat的主要功能。

范例二:列出目前的所有网络联机状态,使用IP与port number 
[root@www ~]# netstat -an 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address Foreign Address State 
....(中间省略)....

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 
tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED 
tcp 0 0 :::22 :::* LISTEN 
....(中间省略).... 
Active UNIX domain sockets (servers and established) 
Proto RefCnt Flags Type State I-Node Path 
unix 2 [ ACC ] STREAM LISTENING 11075 @/var/run/hald/dbus-uukdg1qMPh 
unix 2 [ ACC ] STREAM LISTENING 10952 /var/run/dbus/system_bus_socket 
unix 2 [ ACC ] STREAM LISTENING 11032 /var/run/acpid.socket 
....(底下省略).... 

范例三:秀出目前已经启动的网络服务 
[root@www ~]# netstat -tulnp 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 0.0.0.0:34796 0.0.0.0:* LISTEN 987/rpc.statd 
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind 
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master 
tcp 0 0 :::22 :::* LISTEN 1155/sshd 
udp 0 0 0.0.0.0:111 0.0.0.0:* 969/rpcbind 
....(底下省略).... 
     上面最重要的其实是那个-l的参数,因为可以仅列出有在Listen的port 
可以发现很多的网络服务其实仅针对本机的lo开放而已,因特网是连接不到该端口与服务的。而由上述的数据我们也可以看到,启动port 111的,其实就是rpcbind 那只程序,那如果想要关闭这个端口, 你可以使用kill删除PID 969,也可以使用killall删除rpcbind这个程序即可。如此一来,很轻松的你就能知道哪个程序启动了哪些端口口啰!

范例四:观察本机上头所有的网络联机状态 
[root@www ~]# netstat -atunp 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program 
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 969/rpcbind 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1155/sshd 
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master 
tcp 0 52 192.168.1.100:22 192.168.1.101:1937 ESTABLISHED 4716/0 
....(底下省略).... 
    第四条数据代表目前已经建立联机的一条网络联机,他是由远程主机192.168.1.101启动一个大于1024的端口向本地端主机192.168.1.100的port 22 进行的一条联机,你必须要想起来的是:『Client 端是随机取一个大于1024以上的port进行联机』,此外『只有root可以启动小于1024以下的port』,那就看的懂上头那条联机啰!如果这条联机你想要砍掉他的话, 看到最右边的 4716 了没?kill! 
至于传统的Unix socket的数据,记得使用man netstat查阅一下吧!这个 Unix socket通常是用在一些仅在本机上运作的程序所开启的插槽接口文件,例如 X Window不都是在本机上运作而已吗?那何必启动网络的port呢?当然可以使用Unix socket啰,另外,例如Postfix这一类的网络服务器,由于很多动作都是在本机上头来完成的,所以以会占用很多的Unix socket喔!

 

--------------------------------------------------------------------------------

TCP连接状态:

TIME_WAIT 8947
FIN_WAIT1 15
FIN_WAIT2 1
ESTABLISHED 55
SYN_RECV 21
CLOSING 2
LAST_ACK 4
TCP连接状态详解 www.2cto.com
LISTEN: 侦听来自远方的TCP端口的连接请求
SYN-SENT: 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED: 代表一个打开的连接
FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2: 从远程TCP等待连接中断请求 www.2cto.com
CLOSE-WAIT: 等待从本地用户发来的连接中断请求
CLOSING: 等待远程TCP对连接中断的确认
LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED: 没有任何连接状态

 

TCP状态转换图:

    技术分享

 

网络监控工具 - netstat

标签:

原文地址:http://www.cnblogs.com/yezhaohui/p/4661404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!