it-swarm.com.de

Der schnellste Weg, um einen Netzwerkbereich zu pingen und reaktionsfähige Hosts zurückzugeben?

Einschränkungen:
1. Geschwindigkeit ist wichtig.
2. Ich darf einmal pingen. 

Ich diskutiere, ob Python oder Shellscripting verwendet werden soll. Gibt es eine Methode, die schneller als bash ist?

Hier ist der aktuelle Code,

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

Etwas schneller als das?

39
user1552586

Sie sollten NMAP verwenden:

nmap -T5 -sP 192.168.0.0-255
70
Roman Newaza

Der folgende (böse) Code läuft mehr als ZWEIMAL so schnell wie die nmap-Methode

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

dauert etwa 10 Sekunden, wobei die Standardnap

nmap -sP 192.168.1.1-254

dauert 25 Sekunden ...

30
Mike Redrobe

Versuchen Sie dies für eine eindeutige Liste.

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

eine andere Methode (holt Live-Hosts):

fping -ag 192.168.1.0/24

12
Sunny R Gupta

Probieren Sie beide Befehle aus und überzeugen Sie sich selbst, warum arp schneller ist:

KLINGELN:

für ip in $ (seq 1 254); ping -c 1 10.185.0. $ ip>/dev/null; [$? -eq 0] && echo "10.185.0. $ ip UP" || :; erledigt

ARP:

für ip in $ (seq 1 254); do arp -n 10.185.0. $ ip | grep Adresse; [$? -eq 0] && echo "10.185.0. $ ip UP" || :; erledigt

3
brendonmartino

Dies ist Python-Code für den Ping im Bereich von 192.168.0.0-192.168.0.100. Sie können für die Schleife wechseln, während Sie trösten.

# -*- 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

Dieses Skript wird auf Git Bash (MINGW64) unter Windows ausgeführt und gibt abhängig vom Ping-Ergebnis eine Meldung zurück.

#!/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