Если вы хотите записать пакеты с tcpdump
, я бы предложил использовать опцию -w
(которая сохраняет двоичное представление пакетов в файл), а затем проанализировать его после каждого шага.Примерно так:
tcpdump -i eth1 -w Pingpacketlist icmp
А потом прочитайте это позже так:
tcpdump -r Pingpacketlist -n
А если серьезно, если бы я пытался выполнить то, что вы делаете, я бы просто использовал nmap
.Вы можете использовать nmap
для обнаружения IP-адресов и MAC-адресов в вашей сети следующим образом:
nmap -oX nmap.xml -sP 172.16.1.0/24
В качестве выходных данных вы получите файл (nmap.xml
) с таким содержимым:
</host>
<host><status state="up" reason="arp-response"/>
<address addr="172.16.1.3" addrtype="ipv4"/>
<address addr="00:1A:70:A9:63:BE" addrtype="mac" vendor="Cisco-Linksys"/>
<hostnames>
</hostnames>
<times srtt="1804" rttvar="5000" to="100000"/>
</host>
Вам не нужно выводить XML, если вы этого не хотите;см. ответ Уэсли для другого примера nmap.
Если вы действительно хотите свернуть свой собственный, рассмотрите возможность просмотра таблицы arp после каждого успешного пинга, например:
for ip in 192.168.1.{1..254}; do
ping -c 1 -W 1 $ip > /dev/null 2> /dev/null;
if [ $? -eq 0 ]; then
echo "${ip} is up";
arp -n -i eth0 $ip | grep ether >> ARPResults
else
echo "${ip} is down";
fi
done