web-dev-qa-db-ja.com

ネットワーク範囲をpingして応答性の高いホストを返す最も速い方法は?

制約:
1。スピードが重要です。
2。 pingを1回許可されています。

Pythonまたはshellscriptingを使用するかどうかを議論しています。bashよりも速い方法はありますか?

現在のコードは次のとおりです。

for ip in $(seq int1 int2); do
    ping -c 1 xxx.xxx.xxx.$ip | grep "bytes from" &
done

これより速いものはありますか?

44
user1552586

NMAPを使用する必要があります。

nmap -T5 -sP 192.168.0.0-255
74
Roman Newaza

次の(悪)コードは、nmapメソッドと同じくらい速くTWICE以上を実行します

for i in {1..254} ;do (ping 192.168.1.$i -c 1 -w 5  >/dev/null && echo "192.168.1.$i" &) ;done

標準のnmapで約10秒かかります

nmap -sP 192.168.1.1-254

25秒かかります...

32
Mike Redrobe

ユニークなリストについてはこれを試してください。

ping -c 5 -b 10.10.0.255 | grep 'bytes from' | awk '{ print $4 }' | sort | uniq

別の方法(ライブホストを取得する):

fping -ag 192.168.1.0/24

12
Sunny R Gupta

これらのコマンドを両方試して、arpが高速である理由を確認してください。

PING:

iPの$(seq 1 254); do ping -c 1 10.185.0。$ ip>/dev/null; [$? -eq 0] && echo "10.185.0。$ ip UP" || :;やった

ARP:

iPの$(seq 1 254); do arp -n 10.185.0。$ ip | grepアドレス; [$? -eq 0] && echo "10.185.0。$ ip UP" || :;やった

3
brendonmartino

これはpython 192.168.0.0-192.168.0.100の範囲のpingのコードです。あなたが安心してforループを変更できます。

# -*- coding: utf-8 -*-
import socket
import os
import sys

up_ip =[] #list to store the ip-addresses of server online
for x in range(100):  #here range is 0-100. You can change the range according to your comfort
    server_ip = '192.168.0.'+ str(x)
    rep = os.system('ping -c 1 ' + server_ip)

    if rep == 0:
        upip.append(server_ip)
        print '*******************Server Is Up****************\n'
    else:
        print 'server is down \n'

print up_ip
1
Vilas Joshi

このスクリプトは、WindowsのGit Bash(MINGW64)で実行され、pingの結果に応じてメッセージを返します。

#!/bin/bash
#$1 should be something like "19.62.55"

if [ -z "$1" ]
  then
    echo "No identify of the network supplied, i.e. 19.62.55"
else
    ipAddress=$1

    for i in {1..256} ;do 
    (
        {
        ping -w 5 $ipAddress.$i ; 
        result=$(echo $?);
        } &> /dev/null


        if [ $result = 0 ]; then
            echo Successful Ping From : $ipAddress.$i
        else
            echo Failed Ping From : $ipAddress.$i
        fi &);
    done

fi
0
DiegoRG