一、netstat监控网络命令
1、命令简介
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态、以及网络协议相关的信息。
2、常用选项
-t 显示TCP传输协议的连线状况。
-u 显示UDP传输协议的连线状况。
-l 显示监控中的服务器的Socket。
-a 显示所有连线中的Socket。
-p 显示正在使用Socket的程序识别码和程序名称。
-n 直接使用IP地址,而不通过域名服务器。
-r 显示路由表,类似于route或ip route show。
-e 显示详细的套接字(sockets)信息。
3、命令参数的联合使用
3.1、禁用反向域名解析,加快查询速度
默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。如果你觉得 IP 地址已经足够,而没有必要知道主机名,就使用 -n 选项禁用域名解析功能。
[[email protected] ~]# netstat -tan //查看当前系统以tcp状态的所有链接用IP显示,同时在加上p可以显示进程号。 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 52 192.168.1.110:22 192.168.1.104:60376 ESTABLISHED tcp 0 0 :::22 :::* LISTEN tcp 0 0 ::1:25 :::* LISTEN
3.2、只列出监听中的连接
任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。使用 -l 选项列出正在监听的套接字。
[[email protected] ~]# netstat -tunl //查看当前系统以tcp、udp装态的链接用IP显示并只显示监听状态的连接。 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 ::1:25 :::* LISTEN
3.3、显示内核路由信息
使用 -r 选项打印内核路由信息。打印出来的信息与 route 命令输出的信息一样。我们也可以使用 -n 选项禁止域名解析。
[[email protected] ~]# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 [[email protected] ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
3.4、 获取进程名、进程号以及用户 ID
查看端口和连接的信息时,能查看到它们对应的进程名和进程号对系统管理员来说是非常有帮助的。例如:httpd 服务开启80端口,如果你要查看 http 服务是否已经启动,或者 http 服务是由 apache 还是 nginx 启动的,这时候你可以看看进程名。
[[email protected] ~]# netstat -lnpt 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:22 0.0.0.0:* LISTEN 1113/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1324/master tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1744/nginx tcp 0 0 :::22 :::* LISTEN 1113/sshd tcp 0 0 ::1:25 :::* LISTEN 1324/master
使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名。相比进程名和进程号而言,查看进程的拥有者会更有用。使用 -ep 选项可以同时查看进程名和用户名。
[[email protected] ~]$ netstat -ltpe (No info could be read for "-p": geteuid()=505 but you should be root.) //注意用户 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 *:ssh *:* LISTEN root 8879 - tcp 0 0 localhost:smtp *:* LISTEN root 9221 - tcp 0 0 *:ssh *:* LISTEN root 8882 - tcp 0 0 localhost:smtp *:* LISTEN root 9223 -
上面列出 TCP 协议下的监听套接字,同时显示进程信息和一些额外信息。 这些额外的信息包括用户名和进程的索引节点号。注意 - 假如你将 -n 和 -e 选项一起使用,User 列的属性就是用户的 ID 号,而不是用户名。
[[email protected] ~]$ netstat -ltne Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 8879 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 0 9221 tcp 0 0 :::22 :::* LISTEN 0 8882 tcp 0 0 ::1:25 :::* LISTEN 0 9223
二、ss监控命令
1、ss命令简介
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。同时也是用来替代netstat命令的命令安装包为iproute。
2、常用选项
-t 显示TCP传输协议的连线状况。
-u 显示UDP传输协议的连线状况。
-l 显示监控中的服务器的Socket。
-a 显示所有连线中的Socket。
-p 显示正在使用Socket的程序识别码和程序名称。
-n 直接使用IP地址,而不通过域名服务器。
-r 显示路由表,类似于route或ip route show。
-e 显示详细的套接字(sockets)信息。
-m 显示套接连接使用的内存信息
3、使用举例
3.1、显示 Sockets 摘要
[[email protected] ~]# ss -s Total: 115 (kernel 132) TCP: 7 (estab 2, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 3 Transport Total IP IPv6 * 132 - - RAW 0 0 0 UDP 0 0 0 TCP 7 5 2 INET 7 5 2 FRAG 0 0 0
3.2、查看当前系统以tcp状态的所有链接用IP显示
[[email protected] ~]# ss -tan State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::22 :::* LISTEN 0 128 *:22 *:* LISTEN 0 100 ::1:25 :::* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:80 *:* ESTAB 0 52 192.168.1.110:22 192.168.1.104:62515 ESTAB 0 0 192.168.1.110:22 192.168.1.104:60376
3.3、查看进程使用的socket用数字显示:
[[email protected] ~]# ss -lnp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::22 :::* users:(("sshd",1113,4)) LISTEN 0 128 *:22 *:* users:(("sshd",1113,3)) LISTEN 0 100 ::1:25 :::* users:(("master",1324,13)) LISTEN 0 100 127.0.0.1:25 *:* users:(("master",1324,12)) LISTEN 0 128 *:80 *:* users:(("nginx",2054,6),("nginx",2055,6))
3.4、显示所有已建立的22端口连接:
[[email protected] ~]# ss -tan -o state established ‘( sport = :22 )‘ Recv-Q Send-Q Local Address:Port Peer Address:Port 0 52 192.168.1.110:22 192.168.1.104:62515 timer:(on,249ms,0) 0 0 192.168.1.110:22 192.168.1.104:60376 timer:(keepalive,62min,0)
3.5、查看当前机器的80端口被谁占用:
[[email protected] ~]# ss -lnp src :80 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:80 *:* users:(("nginx",2054,6),("nginx",2055,6)) [[email protected] ~]# ss -lnp |grep 80 LISTEN 0 128 *:80 *:* users:(("nginx",2054,6),("nginx",2055,6))
为什么ss比netstat快:
netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多。
参考:
http://linux.cn/thread/12158/1/1/
http://www.cnblogs.com/peida/archive/2013/03/11/2953420.html