パスワードを忘れた? アカウント作成
13475862 journal
日記

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

この議論は、tuneo (2938)によって テキとトモのテキ禁止として作成されたが、今となっては 新たにコメントを付けることはできません。
  • by ogino (1668) on 2017年12月09日 18時05分 (#3326649) 日記

    ご存知かもしれませんが、導入できる環境なら fping や、よく入っている nmap で -sP オプションで代用できます。Zabbix は fping を使っていたと思います。

    以前の職場で、fping を サブネット単位で並列実行していました。

    • そういう便利なモノを使えるならだれも苦労はせんのです(涙

      インターネットにつながってないわ外部からソフトは入れさせてくれないわ、というところでは泣く泣く車輪を再発明する羽目になります。

      親コメント
      • by ogino (1668) on 2017年12月10日 11時54分 (#3327012) 日記

        失礼しました。

        なお、たまに応答しない仕様の機器がありますが、大抵の機器ならブロードキャストアドレス宛の 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

        親コメント
        • ブロードキャストアドレス宛のpingってうまくいった試しがないんですが。

          何かの時にpingのmanみたら「ブロードキャストアドレスにpingするなら-bつけろ」と書いてあったんで「そんなことできるんだねぇ~」と試してみたんですが、結果は芳しくないです。

          LinuxとかWindowsとかAndroidとかつながってる拙宅のLANでLinuxPCからブロードキャストアドレス宛にping打ったら、Wifiルータしか応答しませんでした。

          親コメント
typodupeerror

ハッカーとクラッカーの違い。大してないと思います -- あるアレゲ

読み込み中...