Как узнать IP и MAC адрес моего компа в сети на C++. Для определения мы будем пользоваться функциями gethostname и gethostbyname из библиотеки winsock.h. Если у вас два и более сетевых подключений, программа покажет IP адрес первого в очереди.
#include <winsock.h>
#include <windows.h>
int main(int argc, char* argv[])
{
const int WSVer = 0x101;
WSAData wsaData;
hostent *h;
char Buf[128];
if (WSAStartup(WSVer, &wsaData) == 0)
{
if (gethostname(&Buf[0], 128) == 0)
{
h = gethostbyname(&Buf[0]);
if (h != NULL) MessageBox(0,inet_ntoa (*(reinterpret_cast<in_addr *>(*(h->h_addr_list)))),0,0);
else MessageBox(0,"Вы не в сети. И IP адреса у вас нет.",0,0);
}
WSACleanup;
}
return 0;
}
Также можно воспользоваться WinAPI функцией GetAdaptersInfo. Она тебе вернет информацию по всем сетевым адаптерам системы.WinAPI фукнции очень полезная вещь, рекомендую тебе почаще листать справочник.
Узнать MAC адрес можно как предыдущим способом, с помощью GetAdaptersInfo. Но также и другим:
#include <stdio.h>
#include <windows.h>
#include <Winsock2.h>
#include <Iphlpapi.h>
///-------- cpp-файл ----------
#include "stdafx.h"
char ip[]="192.168.100.1";
int main(int argc, char* argv[])
{
//Будем использовать сокеты
WSADATA WsaData;
DWORD _ip=inet_addr(ip);
if (WSAStartup(0x0202, &WsaData)==NULL)
printf("WSA Starup OK!\n");
//Создаём UDP-сокет и отсылаем по нему любые данные
SOCKET udp_s;
SOCKADDR_IN udp_sin;
udp_s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(udp_s!=SOCKET_ERROR)
{
udp_sin.sin_family = AF_INET;
udp_sin.sin_port = htons(5232); //Шлём на любой порт.
udp_sin.sin_addr.s_addr = _ip;
if(sendto(udp_s, "TEST", 5, NULL, (SOCKADDR*)&udp_sin, sizeof(udp_sin))>0)
{ //Пакет отослан. Вытаскиваем MAC-адрес из системы
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)
{
printf("IP:%s MAC:%X-%X-%X-%X-%X-%X\n", ip,
pIpNetTable->table[i].bPhysAddr[0],
pIpNetTable->table[i].bPhysAddr[1],
pIpNetTable->table[i].bPhysAddr[2],
pIpNetTable->table[i].bPhysAddr[3],
pIpNetTable->table[i].bPhysAddr[4],
pIpNetTable->table[i].bPhysAddr[5]);
delete[] pIpNetTable;
closesocket(udp_s);
WSACleanup();
return 0;
}
}
printf("MAC-address not found\n");
delete[] pIpNetTable;
}
else printf("ERROR Open IPMAC table\n");
}
else printf("Send data ERROR!\n");
closesocket(udp_s);
}
else printf("ERROR open socket\n");
WSACleanup(); //Освобождаем ресурсы
return 0;
}
Написать комментарий