Linux netstat命令详解
一、netstat命令介绍
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输入netstat命令之后,会出现如下内容:
Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 1 [ ] STREAM CONNECTED 16178 @000000dd unix 1 [ ] STREAM CONNECTED 16176 @000000dc unix 9 [ ] DGRAM 5292 /dev/log unix 1 [ ] STREAM CONNECTED 16182 @000000df ......
从整体上看,netstat命令的输出结果可以分为两个部分:一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0,如果不是0则表示软件包正在队列中堆积,这种情况只会在非常少的情况见到。另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto表示连接使用的协议,RefCnt表示连接到该套接口上的进程号,Type表示套接口的类型,State表示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
二、netstat常用参数
netstat命令常用的选项参数如下表所示:
选项 | 功能 |
-a | (all)显示所有选项,默认不显示LISTEN相关 |
-t | (tcp)仅显示tcp相关选项 |
-u | (udp)仅显示udp相关选项 |
-n | 拒绝显示别名(不进行DNS解析),能显示IP的全部转化成IP |
-l | 仅列出有在 Listen (监听) 的服务状态 |
-p | 显示进程标识符和进程名称 |
-r | 显示路由信息,路由表 |
-e | 显示扩展信息,例如uid等 |
-s | 按各个协议进行统计 |
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
三、netstat命令使用实例
【例1】列出所有端口(包括正在监听和未监听的)
[root@Gin scripts]# netstat -a | less -N 1 Active Internet connections (servers and established) 2 Proto Recv-Q Send-Q Local Address Foreign Address State 3 tcp 0 0 0.0.0.0:8223 0.0.0.0:* LISTEN 4 tcp 0 0 0.0.0.0:29503 0.0.0.0:* LISTEN 5 tcp 0 0 localhost:1988 0.0.0.0:* LISTEN 6 tcp 0 0 n227-080-096.byted:8648 0.0.0.0:* LISTEN 7 tcp 0 0 n227-080-096.byted:8649 0.0.0.0:* LISTEN 8 tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN 9 tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 10 tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 11 tcp 0 1 n227-080-096.byte:42246 n12-058-225.byted.:3379 SYN_SENT 12 tcp 0 0 n227-080-096.byte:18484 n227-080-096.byted:2280 TIME_WAIT 13 tcp 0 0 n227-080-096.byte:18666 n227-080-096.byted:2280 TIME_WAIT 14 tcp 0 0 n227-080-096.byte:14324 n8-006-208.byted.o:http ESTABLISHED
......
less命令可以分页显示,-N参数可以列出行号
【例2】列出所有TCP端口
[root@Gin scripts]# netstat -at | less Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 96 Gin:ssh 192.168.17.1:60480 ESTABLISHED tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:mysql *:* LISTEN ......
如果需要列出所有UDP端口,则netstat -au
【例3】列出只在监听的端口
[root@Gin scripts]# netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:mysql *:* LISTEN udp 0 0 *:bootpc *:* Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 7132 @/com/ubuntu/upstart unix 2 [ ACC ] STREAM LISTENING 9569 /var/lib/mysql/mysql.sock ......
【例4】列出所有监听TCP的端口
➜ test netstat -lt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:8223 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:29503 0.0.0.0:* LISTEN tcp 0 0 localhost:1988 0.0.0.0:* LISTEN tcp 0 0 n227-080-096.byted:8648 0.0.0.0:* LISTEN tcp 0 0 n227-080-096.byted:8649 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN ......
如果需要列出所有监听UDP的端口,则:netstat -lu
【例5】在netstat的输出中显示 PID 和进程名称
netstat -p 可以与其它开关一起使用,这样可以添加 “PID/进程名称” 到netstat的输出中,这样调试的时候可以很方便的发现特定端口运行的程序。
# netstat -pt Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox
【例6】找出进程运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
# netstat -ap | grep ssh tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT - tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
【例7】找出运行在指定端口的进程
➜ test netstat -an|grep 80 tcp 0 0 10.227.80.96:8648 0.0.0.0:* LISTEN tcp 0 0 10.227.80.96:8649 0.0.0.0:* LISTEN tcp 0 0 10.227.80.96:34832 10.225.117.231:9370 ESTABLISHED tcp 0 0 10.227.80.96:35026 10.227.80.96:2280 TIME_WAIT tcp 0 0 10.227.80.96:16850 10.174.231.72:9427 TIME_WAIT tcp 0 0 127.0.0.1:30812 127.0.0.1:2280 ESTABLISHED tcp 0 0 10.227.80.96:43922 10.225.144.63:9436 ESTABLISHED tcp 0 0 10.227.80.96:100 10.154.16.17:4083 ESTABLISHED tcp 0 0 10.227.80.96:35160 10.227.80.96:2280 TIME_WAIT ......