
私は ipsweep という簡単なプログラムを持っています。このプログラムが行うことは、IP アドレスを ping し、使用中の IP を表示することだけです。
私が最初にやったことはこれです:
#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip
done
動作しましたが、必要のない情報が表示されています。必要なのは、使用中の IP アドレスだけです。各 IP について、次の情報が表示されました。
そこで、次のようなフィルターを追加してみました| 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
現在、コンソールには IP のみが表示されていますが、ユーザーであるかどうかに関係なく、すべての IP が表示されます (使用中の IP のみが必要です。繰り返しますが)。私は 5 時間この問題を解決しようとしていますが、まだできません。if を使用すれば解決できることはわかっていますが、書き方がわかりません。
答え1
ping 終了コードを使用してホストが稼働中かどうかを判断します。
#!/bin/bash
for ip in {1..254}; do
ping -q -c 1 $1.$ip >2 2>&- && printf %s.%s\\n $1 $ip
done
答え2
まず、単一のパケットで接続性をチェックするのは賢明ではありませんが、
# 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
成功例と失敗例の両方に、--- 192.168.100.122 ping statistics ---
で検出している " " 行が含まれていますgrep ping
。
代わりにそうすることもできますgrep ", 0% packet loss"
。