我在服务器中有以下IP
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
我需要知道是否正在使用这些IP?
我可以找到使用lsof,但它太慢了
for ip in ${server_ip_list[@]}; do
lsof -i @$ip &>/dev/null && echo "$ip is used" || echo "$ip is unused"
done
下面的命令更快但我需要指定端口和协议
true &>/dev/null </dev/tcp/192.168.1.1/80 && echo used || echo unused
我正在寻找一个更快的命令,使用该命令我可以确定是否使用IP而不管协议或端口。
如果有人能帮助我解决问题的解决方案或链接,我感激不尽。
答案 0 :(得分:1)
也许你可以使用命令ping
来检查是否正在使用特定的ip(而不是在防火墙中禁用ICMP
)。如果您认为for
或while
循环操作太慢,您可以尝试使用命令parallel
同时执行命令。
代码示例如
ip_check(){
ip="$1"
ping -c 1 -W 1 "$ip" &> /dev/null
if [[ $? -eq 0 ]]; then
echo 'used'
else
echo 'unused'
fi
}
export -f ip_check
cat ip_file.txt | parallel -k -j 0 ip_check 2> /dev/null