LINUX.ORG.RU
ФорумAdmin

Как получить список ip-адресов в локальной сети?


0

0

Подскажите, пожалуйста, как получить список ip-адресов всех хостов локальной сети (192.168.0.ххх)?

В сети на всех компьютерах есть либо windows, либо linux+samba, поэтому я пробовал nmblookup '*'. Но в список не попадает более трети хостов. Оказалось, что это нормальное поведение, потому что nmblookup долго ответа не ждет и многие просто не успевают ответить.

Можно ли надежно получить список всех хостов?

anonymous
Ответ на: комментарий от spirit

Спасибо за помошь. Но nmap тоже не все выводит. У меня нашлось только 13 хостов, в то время как nmblookup нашел 15, а всего их 23.

Может быть можно timeout указать какой-нибудь?

$ nmap -sP -n 192.168.0.0/24|grep "^Host"|cut -f 2 -d ' '|wc 13 13 172 $ nmblookup '*'|grep "<00>"|wc 15 30 288

anonymous
()
Ответ на: комментарий от anonymous

Сорри, форматирование подкачало:

$ nmap -sP -n 192.168.0.0/24|grep "^Host"|cut -f 2 -d ' '|wc

13 13 172

$ nmblookup '*'|grep "<00>"|wc

15 30 288

anonymous
()

#!/bin/sh

NET=192.168.0
FIRST=1
LAST=254

for $HOST in `seq $FIRST $LAST`
do
  ping -w3 -c2 $NET.$HOST >/dev/null && echo "$NET.$HOST"
done

sdio ★★★★★
()
Ответ на: комментарий от sdio

ICMP - не выход. я например всегда запрещаю кернелу отвечать на реквесты.
может быть s/ping/arping/ попробовать?

isden ★★★★★
()

arp используй.

anonymous
()

Спасибо за ответы.
В итоге дошел до написания простого скрипта на питоне,
который параллельно запускает опрос всех возможных ip'шников.
В принципе, это то же самое, что и предложенный shell-скрипт:

def ping(ip):
alive=False
PORT = 139
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(4)
try:
exit=s.connect_ex((ip, PORT))
alive=(exit!=113) # 113 - No route to host
finally:
s.close()
return alive

def add_ip_to_list(ip,ips):
if (ping(ip)):
ips.append(ip)

def get_ips():
# Запускаем параллельно опрос всех хостов подсети и ждем 1 секунду
# Этого достаточно для соединения с живыми хостами
ips=[]
for i in range(1,255):
ip='192.168.0.'+str(i)
thread.start_new_thread(add_ip_to_list, (ip,ips))
time.sleep(1)
return ips

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.