доступные хосты в сети - PullRequest
1 голос
/ 04 марта 2012

Я пытаюсь написать bash-скрипт для определения ip-адресов и mac-адресов всех хостов, доступных в сети.по какой-то причине файл Pingpacklist продолжает появляться пустым.я знаю, что записи в arp не являются постоянными, поэтому я подумал, что дам сброс arp после пинга половины сети.но он все еще не может получить записи arp для всех адресов.какие-нибудь рекомендации?

#! /bin/bash

tcpdump -i eth1 -n icmp >> Pingpacketlist &

count=0
mod=127;
for ip in 172.16.1.{1..254}; do
  let count=count+1;
  let res=$count%$mod;
  ping -c 1 -W 1 $ip > /dev/null 2> /dev/null;
  if [ $? -eq 0 ]; then    # for debugging
    echo "${ip} is up";
  else
    echo "${ip} is down";
  fi 
  if [ $res -eq 0 ]; then
    arp -n -i eth1 >> ARPResults 
  fi
done

Ответы [ 2 ]

2 голосов
/ 04 марта 2012

Если вы хотите записать пакеты с 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
2 голосов
/ 04 марта 2012

Может, вместо этого использовать nmap?

nmap -sP  172.16.1.0/24

Список всех хостов в сети, включая MAC-адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...