我有以下命令来连接当前的IP:
netstat -ntu | awk '{print $5}' | egrep -o -e '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' | sort | uniq -c | awk '{if ($1 > 50) print $2" # "$1" times."}' | sort -n
当我运行上面的命令时,会得到以下结果:
68.4.90.74 # 185 times. 77.42.241.230 # 258 times. 78.40.177.38 # 658 times. 79.171.81.237 # 798 times. 79.172.252.26 # 435 times.
运行此命令以获取有关上述IP的详细信息
netstat -noap | grep 68.4.90.74
会给你(简单):
tcp 0 0 xxx.xxx.xxx.xxx:80 68.4.90.74:56484 ESTABLISHED 10561/httpd keepalive (6398.07/0/0) tcp 0 0 xxx.xxx.xxx.xxx:53 68.4.90.74:56480 ESTABLISHED 10519/httpd keepalive (6379.57/0/0) tcp 0 0 xxx.xxx.xxx.xxx:53 68.4.90.74:56481 ESTABLISHED 9817/httpd keepalive (6379.56/0/0) tcp 0 0 xxx.xxx.xxx.xxx:53 68.4.90.74:56483 ESTABLISHED 9838/httpd keepalive (6379.56/0/0) tcp 0 0 xxx.xxx.xxx.xxx:80 68.4.90.74:56482 ESTABLISHED 10505/httpd keepalive (6379.34/0/0)
我的问题是如何更新第一个代码以通过无端口80连接IP虽然以下代码可以获取通过特定端口连接的IP:
netstat -ntu | awk '/\:80\ / {print $5}' | egrep -o -e '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' | sort | uniq -c | awk '{if ($1 > 50) print $2" # "$1" times."}' | sort -n
答案 0 :(得分:0)
这个awk脚本为您完成了大部分工作:
netstat -ntu | awk '/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ && !($5 ~ /:80$/){split($5,a,":");++seen[a[1]]}END{for(i in seen)print i, "#", seen[i], "times."}'
第一种模式与您的相似,但我使用+
而不是*
来匹配一个或多个数字。第二种模式确保第5个字段不会以:80
结尾。仅处理与第一个模式匹配但不匹配第二个模式的行。
将第5个字段拆分为数组a
并保留数组seen
中所有IP地址的计数。最后,遍历seen
中的所有元素并打印输出。