Netstat
Netstat
Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来,你可以查看80端口有没有打开。
语法及选项
1 | netstat(选项) |
1 | -a或--all:显示所有连线中的Socket; |
例子
列出所有连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:https *:* LISTEN
tcp 0 440 172.22.203.148:ssh 1.203.10.198:51439 ESTABLISHED
tcp 0 0 172.22.203.148:http 39.116.52.213:45566 ESTABLISHED
udp 0 0 172.22.203.148:ntp *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 125319903 /var/lib/mysql/mysql.sock
unix 2 [ ] DGRAM 125678271
unix 2 [ ] STREAM CONNECTED 125330402
unix 2 [ ] STREAM CONNECTED 125330400
unix 2 [ ] DGRAM 125320497
unix 2 [ ] STREAM CONNECTED 125303610上面命令会列出来服务器上所有的tcp、udp及unix套接字等连接信息。
只列出 TCP 或 UDP 协议的连接
使用 -t 选项列出 TCP 协议的连接:
1
2
3
4
5
6
7
8netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:https *:* LISTEN
tcp 0 440 172.22.203.148:ssh 1.203.10.198:51439 ESTABLISHED使用 -u 选项列出 UDP 协议的连接:
1
2
3
4Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 172.22.203.148:ntp *:*
udp 0 0 *:ntp *:*禁用反向域名解析,加快查询速度
当你不想让主机,端口和用户名显示,使用netstat -n。例如上面的例子中会显示mysql、ssh、http等信息。
1
2
3
4
5
6
7Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 40 172.22.203.148:22 1.203.80.198:51439 ESTABLISHED如果只是不想让这三个名称中的一个被显示,使用以下命令:
1
2
3netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users
持续输出netstat信息
-c
每隔一秒输出网络信息。1
netstat -act
上面例子会每隔一秒打印一次所有的tcp连接信息。
只列出监听中的连接
任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。使用 -l 选项列出正在监听的套接字。
1
2
3
4
5
6
7netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:https *:* LISTEN上面例子会列出所有监听的tcp连接。如果我们想找到Nginx服务器是哪个进程,就可以使用这个命令:
1
2netstat -nltp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10236/nginx其中
-p
用于显示进程信息打印网络接口
netstat 也能打印网络接口信息,-i 选项就是为这个功能而生。
1
2
3
4
5netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 66299097 0 0 0 56635148 0 0 0 BMRU
lo 65536 0 490435979 0 0 0 490435979 0 0 0 LRU上面输出的信息比较原始。我们将
-e
选项和-i
选项搭配使用,可以输出用户友好的信息。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17netstat -ie
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:16:3E:16:15:19
inet addr:172.22.203.148 Bcast:172.22.203.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:66299089 errors:0 dropped:0 overruns:0 frame:0
TX packets:56635140 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:34498067027 (32.1 GiB) TX bytes:96455017529 (89.8 GiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:490435979 errors:0 dropped:0 overruns:0 frame:0
TX packets:490435979 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:33910368878 (31.5 GiB) TX bytes:33910368878 (31.5 GiB)配合 watch 命令监视和某个IP的所有连接
1
watch -d -n0 "netstat -t | grep 1.203.80.198"
统计连接状态
1
2
3netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
CLOSE_WAIT 2
ESTABLISHED 4状态说明
1
2
3
4
5
6
7
8
9
10
11CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
参考
本站采用「署名 4.0 国际」进行许可。