使用grepcidr/bash进行IP过滤
正在尝试筛选IP列表并从列表“服务IP列表”中拒绝IP 出于某种奇怪的原因,grepcidr只在“service_IP_list”列表的前3个IP中搜索,而忽略了其余的IP,有人知道如何解决这个问题吗使用grepcidr/bash进行IP过滤,bash,Bash,正在尝试筛选IP列表并从列表“服务IP列表”中拒绝IP 出于某种奇怪的原因,grepcidr只在“service_IP_list”列表的前3个IP中搜索,而忽略了其余的IP,有人知道如何解决这个问题吗 ip_filtering() { service_ip_list=("192.168.1.1" "192.168.1.2" "192.168.1.8" "192.168.1.80" "192.168.1.20" "192.168.1.200") grepcidr "$service_ip_
ip_filtering() { service_ip_list=("192.168.1.1" "192.168.1.2" "192.168.1.8" "192.168.1.80" "192.168.1.20" "192.168.1.200")
grepcidr "$service_ip_list" <(echo "$1") >/dev/null && \
echo "$1 is a Service IP" || \
echo $1 >> live_ser_list
}
for i in 192.168.1.{1..254}
do
ip_filtering $i & disown
done
ip_筛选(){service_ip_list=(“192.168.1.1”“192.168.1.2”“192.168.1.8”“192.168.1.80”“192.168.1.20”“192.168.1.200”)
grepcidr“$service\u ip\u list”/dev/null&&\
echo“$1是一个服务IP”||\
echo$1>>实时服务列表
}
对于192.168.1中的i{1..254}
做
ip_过滤$i和拒绝
完成
它不是grepcidr,如果网络列表中的ip匹配,例如10.0.0.0/24,您可以使用/需要grepcidr,
但如果需要通过拒绝阵列中的IP来过滤IP,简单的解决方案是:
#your array
declare -a service_ip_list=("192.168.1.1" "192.168.1.2" "192.168.1.8" "192.168.1.80" "192.168.1.20" "192.168.1.200")
ip_filtering () {
#this will match your IP to the IP's from the array
if [[ " ${service_ip_list[@]} " =~ " ${1} " ]]; then
#if found in array
echo "$1 is a Service IP"
else
#if not found in array
echo $1 >> live_ser_list
fi
}
# your IP source
for i in 192.168.1.{1..254}
do
ip_filtering $i & disown
done
我假设您使用数组元素作为
“${service_ip_list[@]}”
,但在您的示例中,您只是在变量contextno中使用它,如果我这样做,它会给我:192.168.1.2:没有这样的文件或目录等等,对于每个IPI,我认为它是可以理解的,我的意思是像不,它不工作,grepcidr希望IP位于一个文件中,而不仅仅接受一个参数,使用