Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Сканер


Автор: lenin_yo 7.10.2007, 10:33
Нужна функция с помощью которой можно узнать айп и мак всех пользователей сети.
Может у кого есть идеи как ее написать?Или мож ктото пытался сделать чтото подобное?

Автор: GrayCardinal 7.10.2007, 12:27
Под линем есть такая вещь - "nmblookup" ($ nmblookup "*"). Под виндой - не знаю.......

Автор: jonie 8.10.2007, 19:50
зная IP можно узнать MAC и наоборот. Поищи про ARP прооткол.
Зная маску можно узнать теоретическое количество ip выделенных на подсеть...
имея сниффер можно проследить сетевую активность (и получить ip и MAC=и хостов (усложняется если вы за машрутизатором)).
а вот прям таких :
Цитата

Нужна функция с помощью которой можно узнать айп и мак всех пользователей сети.
несуществует.

Автор: lenin_yo 9.10.2007, 09:36
Если есть ip выделеные на подсеть сеть,то это совсем не означает, что все они задействованы. Разве что пинговать все по очереди, создавать базу офигенных размеров.И все же необходима функция для определения мака.
Возможно чето типа GetHostInfo.. 

Автор: SenkraD 9.10.2007, 11:21
lenin_yo, http://www.cracklab.ru/pro/cpp.php?r=network&d=zdrt21 подходит?

Автор: lenin_yo 9.10.2007, 14:14
Цитата

это подходит?

Это не совсем то, мне необходима ф-ция для определения мака сетевого компа.

Автор: lenin_yo 9.10.2007, 14:30
А вот ARP похоже то что нужно.Только ща попробую с этим протоколом разобраться.
Таблицу arp можно просмотреть с помощью cmd. Ввести arp с флагом -а.
Осталось, только росчехлить, как со своей программы получить эту таблицу.

Может кто поможет? smile 

Автор: jonie 9.10.2007, 21:46
кодгда-то для себя писал такое :
Код

#include <stdio.h>
// IP helper funct
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iphlpapi.h>

#define SIZEOF(x) sizeof(x)/sizeof(x[0])

#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"iphlpapi.lib")


/*
    Get MAC from IP (using IPHelper function)
    params : targetIP
*/
int main(int argc, char **argv)
{
    try{
        if(argc<2){
            
            throw L"USAGE : ip2mac.exe IP_ADDR";
        }
        ULONG AddrLen=6;
        ULONG MacAddr[2];
        IPAddr ipaddr = inet_addr(argv[1]);
        memset(MacAddr,0xFF,sizeof(MacAddr));
        if(SendARP(ipaddr,0,MacAddr,&AddrLen)!= NO_ERROR) throw L""/*(L"SendARP Failed!")*/;
        PBYTE lpMAC = reinterpret_cast<PBYTE>(MacAddr);
        for(;AddrLen;AddrLen--,lpMAC++){
            wprintf(L"%02X",*lpMAC);
        }
    }
    catch(TCHAR* mes){
        fwprintf(stderr,L"%s",mes);
        return 1;
    }
    catch(...){
        fwprintf(stderr,L"Unexcepted Error!");
        return 1;
    }
    return 0;
}

мб поможет чем)

Автор: lenin_yo 10.10.2007, 09:37
SendARP и IPAddr не распознаются.
iphlpapi.h и iphlpapi.lib скачал и закинул в папку с С++.
Может это из за того, что у меня компилятор 5.02?

Автор: jonie 12.10.2007, 23:49
Цитата

Может это из за того, что у меня компилятор 5.02?
лучше всеже юзать компилятор С\С++ языка....
Цитата

SendARP и IPAddr не распознаются.
 ?
код рабочий. ищите нормальный компилятор и т.д. т.п.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)