0 Linux查看连接到服务器特定端口的所有IP地址
我们以80端口为例,执行过程中,由于列表过长,可能存在一段时间等待。如果要查看其它端口,替换即可。
netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
最终输出如下:
97 114.198.236.100
56 67.166.157.194
44 170.248.43.76
38 141.0.9.20
37 49.248.0.2
37 153.100.131.12
31 223.62.169.73
30 65.248.100.253
29 203.112.82.128
29 182.19.66.187
接着我们分解来看这条命令
1. netstat -tn 2>/dev/null
我们使用netstat[1]命令列出所有服务和客户端的连接。
- -n 将最终的外部连接以数字形式展示(ip地址),而不是通过主机名或域名形式展示
- -t 仅展示tcp连接
未指定-n外部连接以主机名形式展示
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 set-bf-hit-dsp-qua:9511 set-bf-eat-dsp-tri:37273 ESTABLISHED
指定-n后以ip地址形式展示
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.54.191.131:9511 10.54.167.143:37273 ESTABLISHED
2>/dev/null
将标准错误输出重定向到/dev/null
2. grep :80
仅筛选出连接80端口的ip,这里可以替换为我们想要检查的端口。
tcp 0 0 64.91.*.*:80 114.198.236.100:12763 TIME_WAIT
tcp 0 0 64.91.*.*:80 175.136.226.244:51950 TIME_WAIT
tcp 0 0 64.91.*.*:80 175.136.226.244:51951 TIME_WAIT
tcp 0 0 64.91.*.*:80 149.238.193.121:65268 TIME_WAIT
tcp 0 0 64.91.*.*:80 114.198.236.100:44088 ESTABLISHED
tcp 0 0 64.91.*.*:80 175.136.226.244:51952 TIME_WAIT
3. awk ‘{print $5}’
因为netstat命令第5列列出了连接到本服务外部地址信息。所以要筛选出第5列数据。
114.198.236.100:12763
175.136.226.244:51950
175.136.226.244:51951
149.238.193.121:65268
114.198.236.100:44088
175.136.226.244:51952
4. cut -d: -f1
由于要统计IP的数量,我们将筛选的结果按冒号(:)切分,并筛选出切分后第一列数据。
- -d 指定切分符号
- -f 指定了要展示切分后的哪列数据,这个是和-d配合使用。
114.198.236.100
175.136.226.244
175.136.226.244
149.238.193.121
114.198.236.100
175.136.226.244
5. sort | uniq -c | sort -nr
接着对第4步的结果进行排序,随后统计每个IP的数量,最终对统计的结果按降序排序输出
sort后得到如下结果:
114.198.236.100
114.198.236.100
149.238.193.121
175.136.226.244
175.136.226.244
175.136.226.244
uniq -c –分组统计数量
2 114.198.236.100
1 149.238.193.121
3 175.136.226.244
sort -nr 对结果按降序排序
3 175.136.226.244
2 114.198.236.100
1 149.238.193.121
6. head
最后我们通过head命令展示前10行数据
参考
[1]netstat命令详解,https://www.howtogeek.com/513003/how-to-use-netstat-on-linux/