fping主机文件并返回ips

时间:2017-07-10 18:31:24

标签: bash ping

我想使用fping来ping一个文件中包含的多个ips,并将失败的ips输出到一个文件中,即

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结束

2 个答案:

答案 0 :(得分:1)

这是获得所需结果的一种方法。但请注意;我在脚本的任何地方都没有使用fping。如果使用fping对你来说至关重要,那么我可能完全错过了这一点。

#!/bin/bash

HOSTS="/tmp/hosts.txt"

declare -i DELAY=$1 # Amount of time in seconds to wait for a packet
declare -i REPEAT=$2 # 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 [延迟] [repeatCount] - &#39;延迟&#39;是我们等待ping响应的总秒数,&#39; repeatCount&#39;是在决定地址失效之前我们在失败时重试ping的次数。

我们逐行阅读/tmp/hosts.txt并使用ping评估每个地址。如果ping一个地址成功,我们继续下一个地址。如果地址失败,我们会再次尝试用户指定的次数。如果地址未通过所有ping,我们会将其记录在/tmp/down.log

检查ping失败/成功的条件可能对您的用例不准确,因此您可能需要对其进行编辑。不过,我希望这能得到全面的了解。

答案 1 :(得分:1)

似乎从fping解析数据有点困难。它允许解析活着但未死的主机的数据。作为解决问题的方法并允许与-f同时进行多个主机处理,所有活动的主机都放在一个名为alive的变量中,然后/tmp/hosts.txt文件中的主机被循环通过并进行grepped变量有效以破译主机是活着还是死亡。返回码为1表示grep无法在alive中找到主机,因此是down.log的补充。

alive=$(fping -c 1 -f ipsfile | awk -F: '{ print $1 }')
while read line
do 
    grep -q -o $line <<<$alive
    if [[ "$?" ==  "1" ]]
    then
           echo $line >> down.log
    fi
done < /tmp/hosts.txt