Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.66.178] |
|
Сообщ.
#1
,
|
|
|
Я знаю, что через NetBIOS, но на асме у меня не получается!!!!
Помогите! |
Сообщ.
#2
,
|
|
|
Как, говоришь?...
А хрен его знает! |
Сообщ.
#3
,
|
|
|
У меня есть исходничек на C++, но когда я его перевёл он у меня не рабоал(он у меня и на C++ не работал)
так что люди ПОМОГИТЕ!!! |
Сообщ.
#4
,
|
|
|
Можно через NetBIOS, однако этот сервис может и не работать. Метод определения MAC-адреса де бест это чтение из ARP-таблицы. (SenfARP() под 9х не работает). Т.е. если ты вообще каким-бы то нибыло образом можешь достучаться до хоста, то и MAC вытащишь.
Есть работающий исход на C. Могу намылить или выложить завтра. |
Сообщ.
#5
,
|
|
|
OK!
Vukladuvay |
Сообщ.
#6
,
|
|
|
Итак, если ты достучался до хоста любым протоколом основаном на IP (например ICMP он же ping) то его MAC-адрес (или MAC шлюза к нему) будет неизбежно помещён в таблицу соотв. MAC<->IP. Записи уничтожаются системой через некоторое время, если нет обращений к этому IP. Посмотреть её можно командой arp -a. Програмно доступ к этой таблице организуется так:
//Функция пытается получить MAC хоста 2-мя способоми: //--Вытягивает из ARP если известен IP //--Спрашивает через NetBIOS если есть HostName bool GetHostMAC(void *MAC, const char *HostName, DWORD _ip) { if(_ip!=0) { MIB_IPNETTABLE * pIpNetTable = (MIB_IPNETTABLE *) new char[0xFFFF]; ULONG cbIpNetTable = 0xFFFF; if (NO_ERROR == GetIpNetTable (pIpNetTable, &cbIpNetTable, TRUE)) { for (DWORD i = 0; i < pIpNetTable->dwNumEntries; i++) { if(pIpNetTable->table[i].dwAddr==_ip&&pIpNetTable->table[i].dwType!=2) { memcpy(MAC,pIpNetTable->table[i].bPhysAddr,6); delete[] pIpNetTable; return true; } } delete[] pIpNetTable; } } //Если из ARP вытянуть не удалось //Пытаемся через NetBios NCB SNcb; UCHAR rc = 0; UCHAR Status[256]; memset( &SNcb, 0, sizeof(SNcb) ); SNcb.ncb_command = NCBRESET; SNcb.ncb_lana_num = 0; rc=Netbios( &SNcb ); char Name[255]; strcpy(Name,HostName); while( lstrlen(Name) - 15) lstrcat(Name, " "); memset(&SNcb, 0, sizeof(NCB)); SNcb.ncb_command = NCBASTAT; SNcb.ncb_buffer = (unsigned char*)Status; SNcb.ncb_length = 256; lstrcpy((char*)SNcb.ncb_callname, Name); SNcb.ncb_lana_num = 0;//lana_num; rc = Netbios( &SNcb ); if(rc==NRC_GOODRET) { memcpy(MAC,Status,6); return true; } else return false; } /* Следует понимать, что если хост находится в другой подсети, то ты получишь в лучшем случае MAC-адрес шлюза к нему (роутера, прокси, свича, и т.д.). Header: Declared in Iphlpapi.h. Library: Use Iphlpapi.lib. |