使用netstat -ant结果
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.200.14:80 192.168.200.14:12345 TIME_WAIT
tcp 0 0 192.168.200.14:80 53.54.56.56:54321 TIME_WAIT
tcp 0 0 ::1:80 ::1:25195 TIME_WAIT
我想仅从外部ip地址汇总TIME_WAIT连接数(不包括127.0.0.1,192.168.x.x,一些本地IP地址,ipv6)。
请帮助我使用awk命令,现在我正在使用:
netstat -nat |awk '/TIME_WAIT/&&/:80/' | wc -l
汇总端口80上的所有TIME_WAIT连接
netstat -nat |awk '/TIME_WAIT/&&/:80/{split($5,a,":");b[a[1] FS $6]++}END{for (i in b) print b[i],i}'
汇总每个IP地址80端口的TIME_WAIT连接。 非常感谢你。
答案 0 :(得分:2)
您没有提供任何预期的输出,并且您的示例输入遗漏了很多,而且您的描述缺少很多重要信息,所以这是一个非常猜测但也许这就是您正在寻找或接近它:
$ cat tst.awk
BEGIN {
targetPort = 80
skipIps = "127.0.0.1 192.168.x.x"
gsub(/[.]/,"[.]",skipIps)
gsub(/x/,"[[:digit:]]+",skipIps)
gsub(/ +/,"|",skipIps)
skipIps = "^("skipIps")$"
}
{
split($4,addr,/:/)
localIp = addr[1]
localPort = addr[2]
split($5,addr,/:/)
foreignIp = addr[1]
foreignPort = addr[2]
}
(foreignIp !~ skipIps) (localPort == targetPort) && /TIME_WAIT/ { cnt++ }
END { print cnt }
$ awk -f tst.awk file
3
答案 1 :(得分:2)
你几乎就在那里
$ ... | awk '/TIME_WAIT/
&& $5 !~ /^127\.0\.0\.1/
&& $5 !~ /^192\.168/ {split($5,ip,":");
a[ip[1]]++;
sum++}
END{for(k in a)
print k,a[k];
print "============== ====";
print "Total: ",sum}' | column -t