Форум — Development Адрес сетевого интерфейса 0 0 Подскажите пожалуйста, как прграммно определить соответствие имени интерфейса IP адресу то есть определить какой адрес на интерфейсе eth0 или к примеру на ppp0 Ссылка
разобрать на запчасти ifconfig как это сделал например я: void getip(const std::string interface, std::string& ip) { ip = "Unknown IP"; char buf[128]; struct ifreq ifr; int sock; sock = socket (AF_INET, SOCK_DGRAM, 0); if (sock == -1) { throw std::runtime_error("can't open socket"); } strcpy(ifr.ifr_name, interface.c_str()); if (ioctl(sock, SIOCGIFFLAGS, &ifr) != 0) { throw std::runtime_error("can't get net flags"); } if ((ifr.ifr_ifru.ifru_flags & IFF_UP) == 0) { throw std::runtime_error("interface is down"); } strcpy(ifr.ifr_name, interface.c_str()); ifr.ifr_addr.sa_family = AF_INET; if (ioctl(sock, SIOCGIFADDR, &ifr) != 0) { throw std::runtime_error("can't get intarface ip"); } struct sockaddr *sap = &ifr.ifr_ifru.ifru_addr; if (sap->sa_family == 0xFFFF || sap->sa_family == 0) { throw std::runtime_error("not valid interface flags"); } struct sockaddr_in *sin = (struct sockaddr_in *) sap; if (sin->sin_family != AF_INET) { throw std::runtime_error("not valid interface flags"); } unsigned long addr; addr = (unsigned long) sin->sin_addr.s_addr; sprintf (buf, "%lu.%lu.%lu.%lu", (addr & 0xFF), ((addr >> 8) & 0xFF), ((addr >> 16) & 0xFF), ((addr >> 24) & 0xFF)); ip = buf; close (sock); } anonymous (24.11.04 11:30:26 MSK) Ссылка
char *ifname2addr(const char *ifname, char *buf, int size) { FILE *fp; setenv("if", ifname, 1); fp = popen("/usr/sbin/ifconfig $if | grep addr | cut -d : -f 2 | cut -d ' ' -f 1", "r"); if (!fp) return NULL; fgets(buf, size, fp); return buf; /* buf содержит адрес, например "127.0.0.1\n" */ } nobody ★★ (24.11.04 19:21:40 MSK) Показать ответы Ссылка
Ответ на: комментарий от nobody 24.11.04 19:21:40 MSK fclose забыл после fgets. nobody ★★ (24.11.04 19:24:06 MSK) Ссылка
Ответ на: комментарий от nobody 24.11.04 19:21:40 MSK >popen("/usr/sbin/ifconfig... Вот это Unix-way, уважаю. Не то что товарищ предложил. anonymous (25.11.04 16:56:33 MSK) Ссылка