
У меня есть простая программа, которую я называю ipsweep. Все, что она должна делать, это пинговать IP-адрес и показывать используемые 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, независимо от того, находятся ли они в пользовании или нет (мне нужны только используемые, повторяю). Я пытаюсь решить это уже 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"
.