tuneoの日記: LAN上の全ホストにPINGを投げる 4
日記 by
tuneo
某所でへろっと書いてきたスクリプト。じゅんぐりにPING投げるのは実行時間的にどうよ?と思ったので並列化までしてしまった。
#!/usr/bin/python2
import multiprocessing
import subprocess
Null = open('/dev/null', 'w+b')
def isdown(host): # returns host itself if host is down, otherwise None.
try:
subprocess.check_call(('/bin/ping', '-c', '1', host), stdout = Null, stderr = Null)
except subprocess.CalledProcessError:
return host
else:
return None
if __name__ == '__main__':
hosts = ('192.168.0.%d' % i for i in range(1, 255))
p = multiprocessing.Pool()
down_hosts = [h for h in p.map(isdown, hosts) if h]
# down_hosts = [h for h in map(isdown, hosts) if h]
for host in down_hosts:
print down_hosts
fping OR nmap (スコア:2)
ご存知かもしれませんが、導入できる環境なら fping や、よく入っている nmap で -sP オプションで代用できます。Zabbix は fping を使っていたと思います。
以前の職場で、fping を サブネット単位で並列実行していました。
Re:fping OR nmap (スコア:1)
そういう便利なモノを使えるならだれも苦労はせんのです(涙
インターネットにつながってないわ外部からソフトは入れさせてくれないわ、というところでは泣く泣く車輪を再発明する羽目になります。
Re:fping OR nmap (スコア:2)
失礼しました。
なお、たまに応答しない仕様の機器がありますが、大抵の機器ならブロードキャストアドレス宛の ping にも応答します。最初の応答で終了してしまわないよう ping -c 2 とするのがコツだったような。これもご存知でしたらすみません。
手元に Linux がないので OS X で試しています:
ogino$ ping -c 2 192.168.24.255
PING 192.168.24.255 (192.168.24.255): 56 data bytes
64 bytes from 192.168.24.154: icmp_seq=0 ttl=64 time=0.099 ms
64 bytes from 192.168.24.253: icmp_seq=0 ttl=255 time=1.040 ms
64 bytes from 192.168.24.151: icmp_seq=0 ttl=64 time=1.054 ms
64 bytes from 192.168.24.252: icmp_seq=0 ttl=255 time=1.409 ms
64 bytes from 192.168.24.156: icmp_seq=0 ttl=32 time=117.932 ms
64 bytes from 192.168.24.154: icmp_seq=1 ttl=64 time=0.151 ms
--- 192.168.24.255 ping statistics ---
2 packets transmitted, 2 packets received, +4 duplicates, 0.0% packet loss
round-trip min/avg/max/stddev = 0.099/20.281/117.932/43.674 ms
Re:fping OR nmap (スコア:1)
ブロードキャストアドレス宛のpingってうまくいった試しがないんですが。
何かの時にpingのmanみたら「ブロードキャストアドレスにpingするなら-bつけろ」と書いてあったんで「そんなことできるんだねぇ~」と試してみたんですが、結果は芳しくないです。
LinuxとかWindowsとかAndroidとかつながってる拙宅のLANでLinuxPCからブロードキャストアドレス宛にping打ったら、Wifiルータしか応答しませんでした。