WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Какой самый простой способ...

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Какой самый простой способ...
Susik опубликован 02-12-2001 23:06 MSK   Click Here to See the Profile for Susik   Click Here to Email Susik  
Как проще всего (тока чтобы без ошибок) можно получить ИП-адрес своей машины и ее мак-адрес?
server_mouse опубликован 03-12-2001 10:10 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Ну во первых NetBIOS. Технология проста -- посылаем запрос через NetBios, ежели нас послали (нет там например нетбиоса) вытаскиваем адрес из ARP-таблицы (если хост вообще существует, то после отправки нетбиосной месаги он должен быть занесён в табл. ARP).
Примерно так:

bool GetHostMAC(void *MAC, const char *HostName, DWORD _ip)
{
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 ); //Сбросили NetBIOS

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); //Получили MAC через NetBIOS
return true;
}
else
{
if(_ip!=0) //Ладно, придётся достать его из ARP...
{ //Конечно если нам известен его IP
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;
}
}
return false; //Нда... Скорее всего такого компа нет.
}
}

Susik опубликован 03-12-2001 23:59 MSK     Click Here to See the Profile for Susik  Click Here to Email Susik     
А чисто локальными средствами винды без посылания широковещательных запросов?
(желательно чтобы сеть как объект для посылания туда всяких данных не использовалась при получении этих параметров)

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.