LINUX.ORG.RU

получить IP адреса в ЛВС


0

1

Доброго времени суток, пытаюсь написать программу сканирующую сеть.. и соответственно первым делом хочу для начала получить IP адреса каждой машины в сети...почитал про сетевые сокеты...вроде понятно..но всё же.....

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

пингуй сначала.

так предпологается что я не должен знать ip гого либо это должна сделать программа...что то типо команды arp -a в windows

artur89
() автор топика
Ответ на: комментарий от XoFfiCEr

диапазон ip-адресов пинговать надо

От пингов машины могут быть закрыты фаерволом. arp request'ы рассылать надо. Это можно делать arping'ом по всему диапазону адресов. А потом полученный список использовать например как советуют выше для nmap

xscrew ★★
()

Почитайте исходники nmap.

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

я просто конкретно под МС ВС хочу сделать так в ней nmap нету вроде, чего нибудь бы на С или QT замутить

artur89
() автор топика
Ответ на: комментарий от XoFfiCEr

В ЛВС очень редко

Что редко? Закрытые фаерволом icmp? Та же Windows Vista не отвечает на icmp ehco request by default например.

xscrew ★★
()

На каждый IP по arp запросу. Исходники arp-scan

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

Так как хосты за NATом а тот (да и сам сервер) за провайдерским файрволлом то существование своего программного файрволла у каждого хоста как бы имеет мало смысла.

XoFfiCEr ★★☆☆
()
Последнее исправление: XoFfiCEr (всего исправлений: 1)
Ответ на: комментарий от XoFfiCEr

Так как хосты за NATом а тот за провайдерским файрволлом

откуда инфа?

xscrew ★★
()

широковещательный пинг + последующая проверка аrp таблицы

zolden ★★★★★
()

честно сп...ый кусок кода из arp-scan разбавленый моим говнокодом.

typedef struct {
        Glib::ustring addr;
        Glib::ustring mask;    
        int bitmask;
} netinfo;

std::vector<Glib::ustring> EnvSingleton::getArrayIP()
{

  std::vector<netinfo> list_addr;
  std::vector<netinfo>::iterator list_addr_i;
  list_addr = getLocalAdress(); 
  std::vector<Glib::ustring> list_ip_adress;
  for (list_addr_i = list_addr.begin(); list_addr_i != list_addr.end(); 
       list_addr_i++)          
  {
    uint32_t numbits = (*list_addr_i).bitmask;
    uint32_t mask;             
    uint32_t network;          
    uint32_t ipnet_val;        
    uint32_t hoststart;        
    uint32_t hostend;          
    struct in_addr in_val;     
    unsigned i;                
  
    inet_aton((*list_addr_i).addr.c_str(), &in_val);
    ipnet_val = ntohl(in_val.s_addr);
  
    mask = 0;                  
    for (i = 0; i < numbits; i++)   
      mask += 1 << i;          
    mask = mask << (32 - i);   
    network = ipnet_val & mask;
    hoststart = 0;             
    hostend = (1 << (32 - numbits)) - 1;
    for (i = hoststart; i <= hostend; i++) 
    {
      uint32_t hostip;         
      int b1, b2, b3, b4;      
      char ipstr[16];          
  
      hostip = network + i;    
      b1 = (hostip & 0xff000000) >> 24;
      b2 = (hostip & 0x00ff0000) >> 16;
      b3 = (hostip & 0x0000ff00) >> 8;
      b4 = (hostip & 0x000000ff);     
      snprintf(ipstr, sizeof(ipstr), "%d.%d.%d.%d", b1, b2, b3, b4); 
      list_ip_adress.push_back(Glib::ustring(ipstr));
    }
  }
  return list_ip_adress;
}

код использовался для поиска в локалке машин с допуском по ssh. но опрашивать все эти адреса надо в потоке.

friniz
()
Ответ на: пингуй сначала. от artur89

сканирование - оно на то и сканирование, что перебираются все адреса в сети

AGUtilities ★★★
()

Если нет nmap, попробуй fping

fping -r0 -g 192.168.1.1/24 2>&1 | grep alive например. Диапазон свой укажи

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

а вот интересно почему в мсвс нет nmap.. угроза безопасности? лол уверен в редхате он есть

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

я просто конкретно под МС ВС хочу сделать так в ней nmap нету вроде, чего нибудь бы на С или QT замутить

а # у тебя под МСВС есть?

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

Может с МСВС перейдете? На тоже сертифицированный аналог ;)

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

Всем спасибо за идеи, получилось через исходники ping!

artur89
() автор топика
7 апреля 2014 г.

Может пригодится команда: fping -aeg 192.168.1.0/24 2> /dev/null

a - показывает хосты в сети, т.е alive e - показывает время пакетов g - генерирует список хостов

2> /dev/null - отправляет сообщения: ICMP Host Unreachable from 192.168.1.x for ICMP Echo sent to 192.168.1.x в «пустое устройство», для более чистого вывода.

Приблизительеый вывод fping -aeg 192.168.1.0/24 2> /dev/null 192.168.1.2 (1.50 ms) 192.168.1.3 (0.90 ms) 192.168.1.4 (0.93 ms) 192.168.1.94 (0.89 ms) 192.168.1.95 (1.23 ms) 192.168.1.96 (7.03 ms)

fping проверяет доступность узлов в сети путем посылки ICMP ECHO_REQUEST пакетов. В отличие от стандартной утилиты ping, можно указать сколько угодно узлов в командной строке

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

artur89 (24.12.2012 16:04:26)
legasytrash (07.04.2014 18:01:50)
Может пригодится

Непременно.

edigaryev ★★★★★
()

со свитчей и шлюзов можно информацию собирать, в первом случае её будет больше

anonymous
()
Ответ на: пингуй сначала. от artur89

Типа arp есть arping.
Но вообще, простейшим циклом итерируешься по диапазону подсети, отправляя, допустим один запрос. Далее парсишь, если ок - значит этот IP активен и уже arping/nmap обрабатываешь. Как-то писал такое.

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