Reduzieren Sie nur einen bestimmten Teil eines Bash-Ausgabebefehls

Reduzieren Sie nur einen bestimmten Teil eines Bash-Ausgabebefehls

Ich habe ein einfaches Programm, das ich „ipsweep“ nenne. Es soll lediglich eine IP-Adresse anpingen und die verwendeten IPs anzeigen.

Das habe ich beim ersten Mal gemacht:

#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip
done

Es hat funktioniert, aber es werden Informationen angezeigt, die ich nicht brauche. Ich brauche nur die verwendeten IP-Adressen. Für jede IP wurde Folgendes angezeigt:

Bildbeschreibung hier eingeben

Also habe ich versucht, einige Filter hinzuzufügen wie| grep "ping" | cut -d " " -f 2

#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip | grep "ping" | cut -d " " -f 2 &
done

Jetzt zeigt die Konsole nur die IPs an, aber sie zeigt ALLE IPs an, egal ob sie im Benutzer sind oder nicht (ich brauche nur die, die verwendet werden, ich wiederhole). Ich versuche seit 5 Stunden, das zu lösen, aber ich schaffe es immer noch nicht. Ich weiß, dass das mit einem „wenn“ gelöst werden könnte, aber ich weiß nicht, wie ich es schreiben soll.

Bildbeschreibung hier eingeben

Antwort1

Verwenden des Ping-Exit-Codes, um zu ermitteln, ob der Host aktiv ist:

#!/bin/bash
for ip in {1..254}; do
  ping -q -c 1 $1.$ip >2 2>&- && printf %s.%s\\n $1 $ip
done

Antwort2

Erstens ist es unklug, die Konnektivität mit einem einzelnen Paket zu prüfen, aber:

# IP address 192.168.100.1 exists, 192.168.100.122 does not.
walt@bat:~(0)$ ping -c 1 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=63 time=2.76 ms

--- 192.168.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.763/2.763/2.763/0.000 ms
walt@bat:~(0)$ ping -c 1 192.168.100.122
PING 192.168.100.122 (192.168.100.122) 56(84) bytes of data.

--- 192.168.100.122 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

Sowohl das Erfolgs- als auch das Fehlerbeispiel enthalten die --- 192.168.100.122 ping statistics ---Zeile " ", mit der Sie die Erkennung durchführen grep ping.

Sie könnten grep ", 0% packet loss"stattdessen:

verwandte Informationen