Linux 系统有很多用于快速处理数据的工具如 grep
, awk
, cut
, sort
, uniq
, sort
可以帮助我们分析网络情况 , 他们非常非常地好用 , 如果你熟练掌握他们的使用技巧 , 他们则可以帮你快速定位问题 ; 接下来一步步来查看访问系统的 IP 情况
通过 netstat -ntu
, 找出通过 tcp 和 udp 连接服务器的 IP 地址列表 :
# netstat -ntu
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 23.105.193.199:29631 219.133.170.172:49136 ESTABLISHED
tcp 0 0 23.105.193.199:59562 172.217.11.67:443 ESTABLISHED
tcp 0 0 23.105.193.199:29631 219.133.170.172:5493 ESTABLISHED
tcp 0 0 23.105.193.199:33782 172.217.5.78:443 ESTABLISHED
tcp 0 0 23.105.193.199:37098 216.58.193.194:443 ESTABLISHED
tcp 0 0 23.105.193.199:29666 219.133.170.172:10904 ESTABLISHED
tcp 0 0 23.105.193.199:29631 219.133.170.172:43688 ESTABLISHED
tcp 0 0 23.105.193.199:46806 74.125.28.188:5228 ESTABLISHED
tcp 0 0 23.105.193.199:29631 219.133.170.172:52865 ESTABLISHED
tcp 0 0 23.105.193.199:33780 172.217.5.78:443 ESTABLISHED
tcp 0 0 23.105.193.199:29631 219.133.170.172:59935 ESTABLISHED
这是所有与服务器连接的外部 IP 信息列表 , 可以看到第五列是所有的外部 IP 信息 ;
使用 grep
将 tcp
过滤出来 :
# netstat -ntu | grep tcp
tcp 0 0 23.105.193.199:29631 219.133.170.172:19386 ESTABLISHED
tcp 0 0 23.105.193.199:29631 219.133.170.172:43857 ESTABLISHED
tcp 0 0 23.105.193.199:29631 219.133.170.172:49136 ESTABLISHED
tcp 0 0 23.105.193.199:29631 219.133.170.172:5493 ESTABLISHED
tcp 0 0 23.105.193.199:60876 172.217.5.74:443 ESTABLISHED
tcp 0 0 23.105.193.199:29666 219.133.170.172:10904 ESTABLISHED
tcp 0 0 23.105.193.199:33790 172.217.5.78:443 ESTABLISHED
tcp 0 0 23.105.193.199:59566 172.217.11.67:443 ESTABLISHED
tcp 0 0 23.105.193.199:46806 74.125.28.188:5228 ESTABLISHED
tcp 0 0 23.105.193.199:33780 172.217.5.78:443 ESTABLISHED
tcp 0 0 23.105.193.199:29631 219.133.170.172:39416 ESTABLISHED
也可以使用
egrep
过滤多个条件# netstat -ntu | egrep 'tcp|udp'
使用 awk 将第五列单独截出来 :
# netstat -ntu | grep tcp | awk '{print $5}'
219.133.170.172:19386
219.133.170.172:43857
219.133.170.172:12527
172.217.5.77:443
219.133.170.172:53970
219.133.170.172:5493
172.217.5.74:443
173.194.78.188:5228
219.133.170.172:10904
172.217.11.74:443
172.217.5.78:443
219.133.170.172:39416
使用 cut 将列信息以 :
为分隔符再分成不同的列 , 显示第一个 field :
# netstat -ntu | grep tcp | awk '{print $5}' | cut -d: -f1
219.133.170.172
219.133.170.172
219.133.170.172
219.133.170.172
173.194.78.188
219.133.170.172
172.217.11.74
172.217.5.78
172.217.11.67
219.133.170.172
使用 sort 默认字符顺序将字段值排序 :
# netstat -ntu | grep tcp | awk '{print $5}' | cut -d: -f1 | sort
172.217.11.67
172.217.11.74
172.217.5.78
173.194.78.188
219.133.170.172
219.133.170.172
219.133.170.172
219.133.170.172
219.133.170.172
使用 uniq 将已经排序好的字段计算不同值的数目 :
# netstat -ntu | grep tcp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
1 172.217.11.67
1 172.217.11.74
1 172.217.5.78
1 173.194.78.188
5 219.133.170.172
uniq -c
根据相近的值计算和 , 因此之前需要排序好
使用 sort -nr 数字降序方式再排一下结果 :
# netstat -ntu | grep tcp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
4 219.133.170.172
1 173.194.202.188
1 172.217.2.238
1 172.217.11.67
使用
sort -n
, 可以按照数字升序排
使用 head 或 tail 取头部几行或尾部几行 :
# netstat -ntu | grep tcp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -2
4 219.133.170.172
1 173.194.202.188
原文链接 https://www.linuxidc.com/Linux/2012-05/61126.htm
作者 Github : tojohnonly , 博客 : EnskDeCode