bash를 사용하여 여러 IP를 핑합니까?


17

확인을 위해 매일 핑 해야하는 10 개의 IP 번호가 있습니다. BASH 스크립트를 사용하여 어떻게 할 수 있습니까? cron을 사용하여 해당 작업을 자동화 할 수 있습니다. BASH 스크립트 만 원합니다.

감사합니다.


아래 답변에서 Google의 IP, yahoo, msn 등을 언급했습니다. 직접 시도했습니다. {} 및을 (를) 삽입하려면 IP 사이에서 작동하지 않습니다. 그것이 미래에 누군가를 도울 수 있기를 바랍니다. 읽어 주셔서 감사합니다.
rɑːdʒɑ

답변:


18

귀하의 IP 범위에는 대칭이 없으며 노드가 10 개뿐이므로 텍스트 파일에 나열하는 것이 좋습니다. 목록이 포함 된 파일은 list.txt아래 표시된 것처럼 각 줄에 ip 목록이 포함되어 있다고 생각합니다 .

10.12.13.14
172.15.48.3
192.168.45.54
...
48.114.78.227

이 스크립트를 사용할 수 있습니다

#!/bin/bash
# Program name: pingall.sh
date
cat /path/to/list.txt |  while read output
do
    ping -c 1 "$output" > /dev/null
    if [ $? -eq 0 ]; then
    echo "node $output is up" 
    else
    echo "node $output is down"
    fi
done

crontab에서 30 분 간격으로 노드의 실행 상태를 업데이트하려면,

*/30 * * * * /path/to/pingall.sh > /path/to/log.txt

log.txt 출력

$ cat /path/to/log.txt
Fri Jan 31 15:06:01 IST 2014
node 10.12.13.14 is up
node 172.15.48.3 is up
node 192.168.45.54 is up
...
node 48.114.78.227 is down

당신이 기대했던 것이 아닙니까?
souravc

이것은 정확히 OP가 찾고자하는 것 같습니다. google.com, yahoo.com 등의 웹 사이트는 여러 서버를 사용하여 요청을 처리하므로 도메인 이름으로 ping하는 것이 좋습니다. 다음 주에 핑리스트에서 IP를 변경해야합니다.)
정확한

잘 작동하고 Travis CI 환경에서 사용하는 약간 수정 된 답변을 게시했습니다.
MitchellK


1

이 스크립트를 확인하십시오.

   #!/bin/bash
    for i in `seq ${2} ${3}`
    do
        ping -c 1 ${1}.${i} > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "${1}.${i} responded."
        else
            echo "${1}.${i} did not respond."
        fi
    done

예를 들어 ./script 192.168.1 0 10을 실행하려면 ips 192.168.1.0 ~ 192.168.1.10을 확인하고 ping이 정상이면 에코가 응답하고 그렇지 않으면 응답하지 않습니다.

주의 : 범위와 IP가 항상 같은 경우 $ 1 $ 2 $ 3을 정적 변수로 대체 할 수 있습니다.


IP의 범위가 다릅니다. 그 뒤에 기준이 있습니다. 어쨌든 대답 해 주셔서 감사합니다. +1
rɑːdʒɑ

네 질문에 그 내용을 적어주세요. 감사합니다 +에 대한
Maythux

문제의 조건을 100 % 해결하지 않더라도 매우 유용 할 수있는 깔끔하고 간단한 스크립트 (예 : 임베디드 장치). 감사합니다. +1해야합니다.
Sopalajo de Arrierez

1

5 개의 IP가 있다고 가정하고 (답변 만 줄이기 위해) 핑할 수 있습니다

#!/usr/bin/bash    
for i in xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxxx 
do
ping -c 5 $i
done

참고 : 괄호 안, IP 사이에 쉼표 (,) 없음.

희망이 도움이됩니다.

전의:

[raja @ scripts]$ cat ping.sh
for i in 74.125.236.70  98.139.183.24  65.55.206.228  91.189.94.156 198.252.206.24
do
ping -c 5 $i 
done 
[raja @ scripts]$ ./ping.sh
PING 74.125.236.70 (74.125.236.70) 56(84) bytes of data.
64 bytes from 74.125.236.70: icmp_seq=1 ttl=128 time=11.5 ms
64 bytes from 74.125.236.70: icmp_seq=2 ttl=128 time=11.0 ms
64 bytes from 74.125.236.70: icmp_seq=3 ttl=128 time=10.9 ms
64 bytes from 74.125.236.70: icmp_seq=4 ttl=128 time=16.5 ms
64 bytes from 74.125.236.70: icmp_seq=5 ttl=128 time=18.2 ms

--- 74.125.236.70 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4025ms
rtt min/avg/max/mdev = 10.966/13.682/18.291/3.120 ms
PING 98.139.183.24 (98.139.183.24) 56(84) bytes of data.
64 bytes from 98.139.183.24: icmp_seq=1 ttl=128 time=244 ms
64 bytes from 98.139.183.24: icmp_seq=2 ttl=128 time=253 ms
64 bytes from 98.139.183.24: icmp_seq=3 ttl=128 time=255 ms
64 bytes from 98.139.183.24: icmp_seq=4 ttl=128 time=251 ms
64 bytes from 98.139.183.24: icmp_seq=5 ttl=128 time=243 ms

--- 98.139.183.24 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4251ms
rtt min/avg/max/mdev = 243.511/249.623/255.275/4.674 ms
PING 65.55.206.228 (65.55.206.228) 56(84) bytes of data.
From 10.22.96.94 icmp_seq=5 Packet filtered

--- 65.55.206.228 ping statistics ---
5 packets transmitted, 0 received, +1 errors, 100% packet loss, time 14002ms

PING 91.189.94.156 (91.189.94.156) 56(84) bytes of data.
64 bytes from 91.189.94.156: icmp_seq=1 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=2 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=3 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=4 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=5 ttl=128 time=240 ms

--- 91.189.94.156 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4242ms
rtt min/avg/max/mdev = 240.060/240.222/240.309/0.626 ms
PING 198.252.206.24 (198.252.206.24) 56(84) bytes of data.
64 bytes from 198.252.206.24: icmp_seq=1 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=2 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=3 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=4 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=5 ttl=128 time=242 ms

--- 198.252.206.24 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4251ms
rtt min/avg/max/mdev = 237.600/238.575/242.291/1.933 ms

Q.에서 언급 한 것처럼 cron으로 구현을 보여주지 않았습니다. 또한 스크립트가 ping 요청의 결과를 어떻게 알 수 있습니까?
정확한

스크립트 만 원한다고 언급했습니다. 크론은 질문의 일부가 아닙니다. Cron은 왜이 스크립트가 필요한지 언급 하고이 스크립트의 목적을 cron 작업으로 언급했습니다.
rɑːdʒɑ

@hash 사랑하는 친구에게 물어보기 전에 시도해보십시오. 감사합니다.
rɑːdʒɑ

나는 스크립트가 작동하지 않는다고 말한 적이 없다. 그러나 Q가 cron직업을 언급 할 때, 직업 결과를 사용자에게 알리는 수단이 필요하거나 다른 것을 제안 하는가?
정확한

내 목적은 cron job이며,이 BASH 스크립트가 필요한 이유를 의미하지만 내 요구 사항은 bash @hash입니다.
rɑːdʒɑ

1
echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1

grep을 사용하는 경우 핑이 아닌 노드 만 참조

echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1 | grep -b1 100

1

그렇게 간단합니다 : parallel --gnu명령을 사용한 다음 명령을 사용하십시오 .

예제 IP를 얻으십시오.

$ dig +trace google.com |ipx

127.0.0.1
127.0.0.1
199.7.91.13
199.7.91.13
192.48.79.30
192.48.79.30
173.194.33.161
173.194.33.165
173.194.33.163
173.194.33.164
173.194.33.174
173.194.33.160
173.194.33.167
173.194.33.166
173.194.33.162
173.194.33.169
173.194.33.168
216.239.32.10
216.239.32.10

$ parallel --gnu ping -c1 ::: `dig +trace google.com |ipx`
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.018 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.018/0.018/0.018/0.000 ms
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.017 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.017/0.017/0.017/0.000 ms
PING 173.194.33.132 (173.194.33.132) 56(84) bytes of data.
64 bytes from 173.194.33.132: icmp_req=1 ttl=54 time=20.5 ms

--- 173.194.33.132 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 20.526/20.526/20.526/0.000 ms
PING 173.194.33.131 (173.194.33.131) 56(84) bytes of data.
64 bytes from 173.194.33.131: icmp_req=1 ttl=54 time=20.7 ms
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.