Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: API для работы с сетевым оборудованием в Linux.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Oops
Здравствуйте!!!
Пишу программку, в которой нужно работать с сетью.
Тоесть через эту программку можно менять IP адрес сетевого интерфейса, маску, путь, также она работает в фоне и отслеживает состояние сети.
Тоесть если сеть упала (выдернули сетевой кабель) программка сообщает об этом, если сеть заработала снова (подключили сетевой кабель) она также сообщает.
Я думаю есть специальные API функции для работы с сетевым оборудованием в Linux.
Посоветуйте кто знает, как это лучше сделать, где и что почитать?
Спасибо!!!
kurtis
Чисто теоретически, если задача разовая то нужно смотреть как задаются сетевые настройки в конкретном дистрибутиве, например если есть какой-то демон, то у него обычно есть конфигурационный файл в /etc/*.conf (например) и дальше задача сводиться к редактированию текстового файла и затем перезапуска соответствующего демона (или есть поддержка, то заставить демон перечитать файл конфигурации).
Если круг задач покрывается утилитой ifconfig, то можно ограничиться вызовом функции system() предварительно через sprintf сформировав аргументы.
Если же задача не разовая и решать ее нужно будет часто, но в разных вариациях, то тут уже нужно смотреть исходники net-tools (куда входит ifconfig) и разбираться как оно работает.
По поводу подключения/отключения сетевого кабеля, возможно стоит смотреть в сторону sysfs и procfs (/sys/* и /proc/*), возможно из них можно будет выцепить что-то полезное.
Сам я в этом еще нуб, но думаю что скоро подтянуться более опытные люди и дадут вам более исчерпывающие ответы.
DRUID3
man ipconfig ? laughing.gif ... Если нужны именно API то они в его сорцах )))...
Oops
Спасибо, посмотрим.
Вот нашел книгу по Linux API : http://kernelbook.sourceforge.net/kernel-api.pdf думаю там можно кое чего посмотреть.
Demeny
Цитата(Oops @ Nov 4 2010, 13:59) *
Я думаю есть специальные API функции для работы с сетевым оборудованием в Linux.
Посоветуйте кто знает, как это лучше сделать, где и что почитать?
Спасибо!!!

Практически всё, что Вам придёт в голову сотворить с сетевыми интерфейсами в Linux, можно сделать с помощью ioctl() вызовов, посылаемых открытому сокету. Вот простой пример получения текущего IP-адреса конкретного сетевого интерфейса:
Код
#include <sys/socket.h>
#include <sys/ioctl.h>
.....................
struct ifreq ifr;
int sock_fd, result;
struct sockaddr_in* sa;
.....................
strcpy(ifr.ifr_name, "eth0");
sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
result = ioctl(sock_fd, SIOCGIFADDR, &ifr);
close(sock_fd);
if(result<0)
{
  printf("Error: invalid network interface\n");
  return -1;
}
sa = (struct sockaddr_in*) &ifr.ifr_addr;
printf("eth0 IP is %s\n", inet_ntoa(sa->sin_addr));
DRUID3
Цитата(Demeny @ Nov 9 2010, 11:31) *
Практически всё, что Вам придёт в голову сотворить с сетевыми интерфейсами в Linux, можно сделать с помощью ioctl() вызовов, посылаемых открытому сокету.

Вообще-то да, а я почему-то подумал, что вопрошающему нужно работать на более низком уровне, например рулить MAC-адресацией... laughing.gif рефлексы...
S_agent
если у Вас есть X-ы, можете глянуть http://en.wikipedia.org/wiki/NetworkManager

а вообще, читайте ldd http://www.makelinux.net/ldd3/chp-17-sect-3.shtml и пользуйте ioctrl


Цитата(DRUID3 @ Nov 7 2010, 21:55) *
man ipconfig ? laughing.gif ... Если нужны именно API то они в его сорцах )))...


тогда уж скорее man ifconfig santa2.gif
DRUID3
Цитата(S_agent @ Nov 9 2010, 15:49) *
тогда уж скорее man ifconfig santa2.gif

biggrin.gif biggrin.gif biggrin.gif Да... страшно туплю... Видимо в мозгу уже DMA... от глаз в руки пересылаем одно, а в регистры памяти пишем совсем другое smile.gif
S_agent
Цитата(DRUID3 @ Nov 9 2010, 16:20) *
biggrin.gif biggrin.gif biggrin.gif Да... страшно туплю... Видимо в мозгу уже DMA... от глаз в руки пересылаем одно, а в регистры памяти пишем совсем другое smile.gif

biggrin.gif
Oops
Большое спасибо!!!
edo
Цитата(Oops @ Nov 4 2010, 13:59) *
Здравствуйте!!!
Пишу программку, в которой нужно работать с сетью.
Тоесть через эту программку можно менять IP адрес сетевого интерфейса, маску, путь, также она работает в фоне и отслеживает состояние сети.
Тоесть если сеть упала (выдернули сетевой кабель) программка сообщает об этом, если сеть заработала снова (подключили сетевой кабель) она также сообщает.
Я думаю есть специальные API функции для работы с сетевым оборудованием в Linux.
Посоветуйте кто знает, как это лучше сделать, где и что почитать?
имхо лучше начать не с того, чтобы строить свой велосипед, а посмотреть - что написано до вас.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.