标签:
察看本机的网络联机与后台: 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状态转换图:
标签:
原文地址:http://www.cnblogs.com/yezhaohui/p/4661404.html