如何查找是否正在使用IP?

时间:2017-10-27 05:30:09

标签: linux bash networking

我在服务器中有以下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而不管协议或端口。

如果有人能帮助我解决问题的解决方案或链接,我感激不尽。

1 个答案:

答案 0 :(得分:1)

也许你可以使用命令ping来检查是否正在使用特定的ip(而不是在防火墙中禁用ICMP)。如果您认为forwhile循环操作太慢,您可以尝试使用命令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