【发布时间】:2022-10-17 05:44:17
【问题描述】:
我有一个这样的命令:
/bin/netstat -an | /usr/bin/awk -vmax=100 '/tcp/{split($5,a,":"); if(a[1] > 0 && a[1]!="0.0.0.0" && a[1]!="127.0.0.1" && a[1]!="111.222.111.222" ... 50 addresses... && a[1]!="211.112.211.112"){c[a[1]]++}} END{for(ip in c){if(c[ip]>max){print ip}}}' | while read ip; do /sbin/iptables -m comment --comment "SCAN BLOCK" -I INPUT 1 -s $ip -j DROP; done
如何缩短它以从文件中读取 IP 地址,或者从命令上方的数组列表中读取 IP 地址,或者类似的东西,因为我现在有近 100 个 IP,并且在一个大命令行中都一个接一个。
基本上,如何使命令像这样:
/bin/netstat -an | /usr/bin/awk -vmax=100 '/tcp/{split($5,a,":"); if(a[1] > 0 && a[1]!="read from file"){c[a[1]]++}} END{for(ip in c){if(c[ip]>max){print ip}}}' | while read ip; do /sbin/iptables -m comment --comment "SCAN BLOCK" -I INPUT 1 -s $ip -j DROP; done
【问题讨论】:
-
while read line; do <your stuff> ; done < ip_list.txt或类似的东西。