从netstat输出中提取IP

9
netstat输出包含类似以下内容的信息:...
tcp        0      0 0.0.0.0:80       221.126.149.99:51973    ESTABLISHED 23879/apache2
tcp        0      0 0.0.0.0:80        66.249.68.154:40883     ESTABLISHED 23899/apache2
tcp        0      0 0.0.0.0:80       66.249.68.81:41200      ESTABLISHED 23892/apache2
tcp        0      0 0.0.0.0:80       66.249.67.121:59355     ESTABLISHED 23905/apache2
tcp        0   4465 0.0.0.0:80       110.75.175.27:48139     ESTABLISHED 23901/apache2

我使用这些命令

netstat -anpt|grep apache2 |grep ESTABLISHED | awk -F "[ :]" '{print $4}'

我无法获取IP地址,有什么提示吗?
5个回答

14

这将返回您连接到的唯一IP地址列表:

netstat -anpt | grep apache2 |grep ESTABLISHED | awk '{ print $5 }' | cut -d: -f1 | sort -u

我想我也需要换眼镜了 =P


3
你可以尝试一下。
netstat -anpt|awk 'BEGIN {FS="[ :]+"};/ESTABLISHED/ && /apache/{print $6}'  

由于某些原因,我数了6个字段,而其他人只数了4个... 我应该换新眼镜吗?:)

希望对你有所帮助!


你不是唯一一个。我建议将grep模式移至awk内部。 - glenn jackman
@glenn jackman同意。已编辑。有时,在形式良好的问题中,当OP发布他的解决方案时,我觉得最好尽可能少地修改,因为这样可以更容易地理解错误。也许我错了。 - Dr. belisarius

2

您离成功很近了。您只需要更改字段分隔符正则表达式,使其不将单个空格或冒号视为字段分隔符:

netstat -anpt|grep apache2 |grep ESTABLISHED | awk -F "[ :]*" '{print $4}'

2
netstat -anpt | awk '/apache2/&&/ESTABLISHED/{sub(/:*/,"",$4);print $4} ' 

awk的操作应该是:{sub(/:.*/,"",$5);print $5} - glenn jackman
1
为什么是$5?我没有使用任何FS,而是默认的。 - ghostdog74
它曾经是$4,但现在涨到了$5。代码膨胀。 - Lizz

-1
 netstat -ant | grep 80 | wc -l

这将计算“netstat -ant”命令输出中列出的80的数量,但这种方法不够准确。 - Laith Leo Alobaidy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接