Also zunächst mal ist Deine Lösung nicht gut.
Du hast eigentlich nie genau 254 zum Router gehörende IPs.
Nehmen wir an es handle sich um 192.168.1.1 mit der Subnetzmaske 255.255.255.0
Dann wäre 192.168.1.0 die Netzwerkadresse und keine gültige IP.
Und die 192.168.1.255 wäre die Broadcastadresse und ebenfalls keine gültige IP.
Lautet das Ganze aber 192.168.1.0/255.255.0.0, dann sieht das plötzlich ganz anders aus.
192.168.0.0 wäre die Netzwerkadresse und 192.168.255.255 die Broadcast. Du hast also ungefähr (255*255)-2 mögliche Adressen – viel Spaß beim Warten.
Schön ist auch das interne 10er Netzwerk.
10.0.0.1 bei 255.0.0.0 macht 10.0.0.0 als Netzwerk- und 10.255.255.255 als Broadcast, also (255*255*255)-2 Adressen.
Im Gegenzug dazu könnte es auch wie folgt aussehen:
192.168.160.66/255.255.255.192
Dann hätten wir 192.168.160.64 als Netzwerk- und 192.168.160.71 als Broadcast, Du kommst also keinesfalls an beispielsweise die 192.168.160.75 ran.
Lange Rede gar kein Sinn.
Entweder Du überprüfst Deine IP mit Deiner Subnetzmaske und ackerst dort alle für Dich erreichbaren IPs ab.
(Mit Proxies, NAT und wasweißichwasnoch wird allerdings auch das eher ungenau)
Auch da hast Du das Problem, dass jeder Ping ganz schön dauert, bis der Timeout passiert.
Eine praktische Möglichkeit bietet da der Ping auf die Broadcast Adresse.
(Wie eben angedeutet muss diese an Hand Deiner IP und Deiner Subnetzmaske berechnet werden.)
Beispiel:
ping 10.20.10.255 //ggf. muss mit -b spezifiziert werden, dass man definitiv die broadcast ip pingen möchte
PING 10.20.10.255 (10.20.10.255): 56 data bytes
64 bytes from 10.20.10.128: icmp_seq=0 ttl=64 time=0.052 ms
64 bytes from 10.20.10.40: icmp_seq=0 ttl=64 time=0.492 ms
64 bytes from 10.20.10.113: icmp_seq=0 ttl=64 time=0.784 ms
64 bytes from 10.20.10.117: icmp_seq=0 ttl=64 time=0.788 ms
64 bytes from 10.20.10.139: icmp_seq=0 ttl=64 time=0.828 ms
64 bytes from 10.20.10.31: icmp_seq=0 ttl=64 time=0.881 ms
64 bytes from 10.20.10.52: icmp_seq=0 ttl=60 time=1.193 ms
64 bytes from 10.20.10.50: icmp_seq=0 ttl=60 time=1.253 ms
64 bytes from 10.20.10.51: icmp_seq=0 ttl=60 time=1.257 ms
64 bytes from 10.20.10.12: icmp_seq=0 ttl=255 time=2.314 ms
64 bytes from 10.20.10.11: icmp_seq=0 ttl=255 time=3.214 ms
64 bytes from 10.20.10.121: icmp_seq=0 ttl=64 time=99.143 ms
64 bytes from 10.20.10.114: icmp_seq=0 ttl=255 time=140.803 ms
64 bytes from 10.20.10.128: icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from 10.20.10.40: icmp_seq=1 ttl=64 time=0.232 ms
64 bytes from 10.20.10.113: icmp_seq=1 ttl=64 time=0.390 ms
64 bytes from 10.20.10.117: icmp_seq=1 ttl=64 time=0.395 ms
64 bytes from 10.20.10.31: icmp_seq=1 ttl=64 time=0.397 ms
64 bytes from 10.20.10.52: icmp_seq=1 ttl=60 time=0.490 ms
64 bytes from 10.20.10.139: icmp_seq=1 ttl=64 time=0.495 ms
64 bytes from 10.20.10.50: icmp_seq=1 ttl=60 time=0.516 ms
64 bytes from 10.20.10.51: icmp_seq=1 ttl=60 time=0.519 ms
64 bytes from 10.20.10.11: icmp_seq=1 ttl=255 time=0.942 ms
64 bytes from 10.20.10.12: icmp_seq=1 ttl=255 time=0.949 ms
64 bytes from 10.20.10.121: icmp_seq=1 ttl=64 time=326.373 ms
64 bytes from 10.20.10.128: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 10.20.10.117: icmp_seq=2 ttl=64 time=0.239 ms
64 bytes from 10.20.10.40: icmp_seq=2 ttl=64 time=0.245 ms
64 bytes from 10.20.10.139: icmp_seq=2 ttl=64 time=0.344 ms
64 bytes from 10.20.10.113: icmp_seq=2 ttl=64 time=0.396 ms
64 bytes from 10.20.10.31: icmp_seq=2 ttl=64 time=0.448 ms
64 bytes from 10.20.10.52: icmp_seq=2 ttl=60 time=0.472 ms
64 bytes from 10.20.10.50: icmp_seq=2 ttl=60 time=0.527 ms
64 bytes from 10.20.10.51: icmp_seq=2 ttl=60 time=0.531 ms
64 bytes from 10.20.10.11: icmp_seq=2 ttl=255 time=0.930 ms
64 bytes from 10.20.10.12: icmp_seq=2 ttl=255 time=1.451 ms
64 bytes from 10.20.10.114: icmp_seq=2 ttl=255 time=228.889 ms
64 bytes from 10.20.10.121: icmp_seq=2 ttl=64 time=246.799 ms
Alles anzeigen
Das lässt Du ein paar Sekunden laufen, parst die Rückgabewerte, fügst immer neue IP-Adressen hinzu und wertest dann am Ende die Liste mit den Adressen aus.
Wer darauf nicht antwortet ist entweder nicht da oder antwortet generell nicht auf ICMP PING. So oder so würde Deine Methode ihn aber auch nicht finden.
Vermutlich wäre es geiler, wenn man an die DHCP-Tabellen des Routers käme. Ist allerdings auch ein Sicherheitsrisiko.