fping 文件中的主机并 return down ips
fping hosts in file and return down ips
我想使用 fping 来 ping 一个文件中包含的多个 ip,并将失败的 ip 输出到一个文件中,即
hosts.txt
8.8.8.8
8.8.4.4
1.1.1.1
ping.sh
#!/bin/bash
HOSTS="/tmp/hosts.txt"
fping -q -c 2 < $HOSTS
if ip down
echo ip > /tmp/down.log
fi
所以我想在 down.log 文件中以 1.1.1.1 结尾
这是获得所需结果的一种方法。但是请注意;我没有在脚本中的任何地方使用 fping。如果 fping 的使用对您来说至关重要,那么我可能完全忽略了这一点。
#!/bin/bash
HOSTS="/tmp/hosts.txt"
declare -i DELAY= # Amount of time in seconds to wait for a packet
declare -i REPEAT= # Amount of times to retry pinging upon failure
# Read HOSTS line by line
while read -r line; do
c=0
while [[ $c < $REPEAT ]]; do
# If pinging an address does not return the word "0 received", we assume the ping has succeeded
if [[ -z $(ping -q -c $REPEAT -W $DELAY $line | grep "0 received") ]]; then
echo "Attempt[$(( c + 1))] $line : Success"
break;
fi
echo "Attempt[$(( c + 1))] $line : Failed"
(( c++ ))
done
# If we failed the pinging of an address equal to the REPEAT count, we assume address is down
if [[ $c == $REPEAT ]]; then
echo "$line : Failed" >> /tmp/down.log # Log the failed address
fi
done < $HOSTS
用法:./script [delay] [repeatCount] -- 'delay' 是我们等待 ping 响应的总秒数,'repeatCount' 是我们重试 ping 的次数在确定地址已关闭之前发生故障。
这里我们逐行读取 /tmp/hosts.txt
并使用 ping
评估每个地址。如果 ping 一个地址成功,我们将继续下一个地址。如果某个地址失败,我们将按照用户指定的次数重试。如果该地址无法通过所有 ping,我们会将其记录在我们的 /tmp/down.log
.
中
检查 ping 是否 failed/succeeded 的条件对于您的用例可能不准确,因此您可能需要对其进行编辑。不过,我希望这能让大家理解总体思路。
fping的数据解析起来似乎有些困难。它允许解析存活但未死亡的主机的数据。作为解决这个问题并允许使用 -f 同时处理多个主机的方法,所有活动的主机都放在一个名为 alive 的变量中,然后循环遍历 /tmp/hosts.txt 文件中的主机并进行 grepped针对变量 alive 来破译宿主是活的还是死的。 return 代码为 1 表示 grep 无法找到活动主机,因此添加到 down.log。
alive=$(fping -c 1 -f ipsfile | awk -F: '{ print }')
while read line
do
grep -q -o $line <<<$alive
if [[ "$?" == "1" ]]
then
echo $line >> down.log
fi
done < /tmp/hosts.txt
我想使用 fping 来 ping 一个文件中包含的多个 ip,并将失败的 ip 输出到一个文件中,即
hosts.txt
8.8.8.8
8.8.4.4
1.1.1.1
ping.sh
#!/bin/bash
HOSTS="/tmp/hosts.txt"
fping -q -c 2 < $HOSTS
if ip down
echo ip > /tmp/down.log
fi
所以我想在 down.log 文件中以 1.1.1.1 结尾
这是获得所需结果的一种方法。但是请注意;我没有在脚本中的任何地方使用 fping。如果 fping 的使用对您来说至关重要,那么我可能完全忽略了这一点。
#!/bin/bash
HOSTS="/tmp/hosts.txt"
declare -i DELAY= # Amount of time in seconds to wait for a packet
declare -i REPEAT= # Amount of times to retry pinging upon failure
# Read HOSTS line by line
while read -r line; do
c=0
while [[ $c < $REPEAT ]]; do
# If pinging an address does not return the word "0 received", we assume the ping has succeeded
if [[ -z $(ping -q -c $REPEAT -W $DELAY $line | grep "0 received") ]]; then
echo "Attempt[$(( c + 1))] $line : Success"
break;
fi
echo "Attempt[$(( c + 1))] $line : Failed"
(( c++ ))
done
# If we failed the pinging of an address equal to the REPEAT count, we assume address is down
if [[ $c == $REPEAT ]]; then
echo "$line : Failed" >> /tmp/down.log # Log the failed address
fi
done < $HOSTS
用法:./script [delay] [repeatCount] -- 'delay' 是我们等待 ping 响应的总秒数,'repeatCount' 是我们重试 ping 的次数在确定地址已关闭之前发生故障。
这里我们逐行读取 /tmp/hosts.txt
并使用 ping
评估每个地址。如果 ping 一个地址成功,我们将继续下一个地址。如果某个地址失败,我们将按照用户指定的次数重试。如果该地址无法通过所有 ping,我们会将其记录在我们的 /tmp/down.log
.
检查 ping 是否 failed/succeeded 的条件对于您的用例可能不准确,因此您可能需要对其进行编辑。不过,我希望这能让大家理解总体思路。
fping的数据解析起来似乎有些困难。它允许解析存活但未死亡的主机的数据。作为解决这个问题并允许使用 -f 同时处理多个主机的方法,所有活动的主机都放在一个名为 alive 的变量中,然后循环遍历 /tmp/hosts.txt 文件中的主机并进行 grepped针对变量 alive 来破译宿主是活的还是死的。 return 代码为 1 表示 grep 无法找到活动主机,因此添加到 down.log。
alive=$(fping -c 1 -f ipsfile | awk -F: '{ print }')
while read line
do
grep -q -o $line <<<$alive
if [[ "$?" == "1" ]]
then
echo $line >> down.log
fi
done < /tmp/hosts.txt