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?
Sie sollten NMAP verwenden:
nmap -T5 -sP 192.168.0.0-255
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 ...
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
Probieren Sie beide Befehle aus und überzeugen Sie sich selbst, warum arp schneller ist:
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
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
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
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