LINUX.ORG.RU

Ответ на: комментарий от Anoxemian

т.е. хочу написать программу, которая получает список сетевых интерфейсов не используя утилиту ifconfig

anonymous
()
Ответ на: комментарий от anonymous

> хочу написать программу, которая получает список сетевых интерфейсов не используя утилиту ifconfig

struct ifconf ifc;
struct ifreq* ifr;
union {
	unsigned int ip;
	unsigned char ip_a[4];
} ipaddr;
int sd = socket(PF_INET, SOCK_DGRAM, 0);
ifc.ifc_len = 100 * sizeof(struct ifreq);
ifc.ifc_buf = malloc(ifc.ifc_len);
ioctl(sd, SIOCGIFCONF, &ifc);
ifr = ifc.ifc_req;
for (i = 0; i < ifc.ifc_len/sizeof(struct ifreq); i++)
{
	ipaddr.ip = ((struct sockaddr_in*) &ifr->ifr_addr)->sin_addr.s_addr;
	printf("%s: %d.%d.%d.%d\n", ifr->ifr_name, ipaddr.ip_a[0], ipaddr.ip_a[1], ipaddr.ip_a[2], ipaddr.ip_a[3]);
	ifr++;
}
free(ifc.ifc_buf);

ShprotX
()
Ответ на: комментарий от ShprotX

Приведённый выше код с использованием SIOCGIFCONF - хоть и длинный, зато позволяет выявить также и алиасы интерфейсов. А в /proc/net/dev перечислены только физические. Так что выбирай что лучше подходит!

garikello
()
Ответ на: комментарий от garikello

> Приведённый выше код с использованием SIOCGIFCONF - хоть и длинный, зато позволяет выявить также и алиасы интерфейсов.

зато он не позволяет выявить неподнятые интерфейсы (в линуксе)

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.