Приведённый ниже код получает список сетевых интерфейсов, и выводит их IP адреса.
#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <iostream>
int main (int argc, char* argv[])
{
struct ifconf ifc;
int numreqs = 30;
int skfd = socket(AF_INET, SOCK_DGRAM, 0);
//Получаем список интерфейсов
ifc.ifc_buf = 0;
for (;;)
{
ifc.ifc_len = sizeof(struct ifreq) * numreqs;
ifc.ifc_buf = new char[ifc.ifc_len];
if (ioctl(skfd, SIOCGIFCONF, &ifc) < 0)
{
return false;
}
if (ifc.ifc_len == sizeof(struct ifreq) * numreqs)
{
delete[] ifc.ifc_buf;
numreqs += 10;
continue;
}
break;
}
//Проходимся по списку интерфейсов
bool res = false;
struct ifreq *ifr = ifc.ifc_req;
for (int n = 0; n < ifc.ifc_len; n += sizeof(struct ifreq))
{
char addr[16];
sockaddr_in* sock = reinterpret_cast<sockaddr_in*>(&ifr->ifr_ifru.ifru_addr);
inet_ntop(AF_INET, &sock->sin_addr, addr, 16);
std::cout << ifr->ifr_name << " - " << addr << std::endl;
ifr++;
}
return 0;
}
Комментариев нет:
Отправить комментарий