我正在尝试编写一个bash脚本,该脚本输出在端口8000(icecast)上建立的TCP连接,并从该列表中过滤内部IP地址。
这里有两个有效的示例,但我需要优化命令行的帮助。
1。
netstat -ant | grep 8000 | grep ESTABLISHED | grep -v
'192.168.1.102
2。
ss -H -nt sport eq 8000 | awk '{print $5}'| awk -F':' '{print $1}' |
grep -v '192.168.1.102'
有人可以帮我组合grep
或awk
过滤器吗?据我了解,SS命令的性能要优于netstat
命令。但是,如果有人知道更好的应用程序来获取上述信息并对其进行过滤,那么我将改用它。
SS的示例输出:
ESTAB 0 1400 192.168.3.2:8000 x.x.x.x:62090
ESTAB 0 0 192.168.3.2:8000 192.168.1.102:1033
netstat的示例:
tcp 0 1400 192.168.3.2:8000 x.x.x.x:62090 ESTABLISHED
tcp 0 0 192.168.3.2:8000 192.168.1.102:1033 ESTABLISHED
tcp 0 0 192.168.3.2:22 y.y.y.y:32897 ESTABLISHED
答案 0 :(得分:1)
请记住,Awk可以完成grep
可以做的所有事情,并且通常几乎一样快。作为一般指导,请尝试减少进程数。因此,尝试将所有管道重构为一个Awk程序。
您也想转义IP地址中的点。
netstat -ant | awk '/8000/ && /ESTABLISHED/ && ! /192\.168\.1\.102/'
这有点挑战,但绝不复杂。
ss -H -nt sport eq 8000 |
awk '{ split($5, a, /:/); if (a[1] !~ /192\.168\.1\.102/) print a[1] }'