Почему бы вам не сделать что-то похожее на вызов команды ifconfig на оболочке в вашем C-коде:
system("ifconfig eth0 ...");
Это избавит от необходимости иметь файловый дескриптор, но позволит вам управлять устройством с помощью команды. Выполните команду man ifconfig , чтобы узнать, как структурировать ваш запрос ifconfig для управления всем, что вам нужно сделать с интерфейсом.
Если вам нужно перейти на более низкий уровень, чем этот, то вы можете просто открыть необработанный сокет ... назначить индекс устройства Ethernet, которым вы хотите манипулировать ... и затем использовать ioctl () для настройки по мере необходимости:
if ((fd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) == -1) {
perror("socket");
}
struct ifreq req;
strncpy(req.ifr_name, "eth0", IFNAMSIZ-1);
if (ioctl(fd, SIOCGIFINDEX, &ifreq) < 0)
perror("SIOCGIFINDEX");
Тогда у вас есть ручка для eth0 ...