Приведённый ниже код получает список сетевых интерфейсов, и выводит их 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; }
Комментариев нет:
Отправить комментарий