реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> API для работы с сетевым оборудованием в Linux.
Oops
сообщение Nov 4 2010, 10:59
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



Здравствуйте!!!
Пишу программку, в которой нужно работать с сетью.
Тоесть через эту программку можно менять IP адрес сетевого интерфейса, маску, путь, также она работает в фоне и отслеживает состояние сети.
Тоесть если сеть упала (выдернули сетевой кабель) программка сообщает об этом, если сеть заработала снова (подключили сетевой кабель) она также сообщает.
Я думаю есть специальные API функции для работы с сетевым оборудованием в Linux.
Посоветуйте кто знает, как это лучше сделать, где и что почитать?
Спасибо!!!
Go to the top of the page
 
+Quote Post
kurtis
сообщение Nov 7 2010, 19:39
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Чисто теоретически, если задача разовая то нужно смотреть как задаются сетевые настройки в конкретном дистрибутиве, например если есть какой-то демон, то у него обычно есть конфигурационный файл в /etc/*.conf (например) и дальше задача сводиться к редактированию текстового файла и затем перезапуска соответствующего демона (или есть поддержка, то заставить демон перечитать файл конфигурации).
Если круг задач покрывается утилитой ifconfig, то можно ограничиться вызовом функции system() предварительно через sprintf сформировав аргументы.
Если же задача не разовая и решать ее нужно будет часто, но в разных вариациях, то тут уже нужно смотреть исходники net-tools (куда входит ifconfig) и разбираться как оно работает.
По поводу подключения/отключения сетевого кабеля, возможно стоит смотреть в сторону sysfs и procfs (/sys/* и /proc/*), возможно из них можно будет выцепить что-то полезное.
Сам я в этом еще нуб, но думаю что скоро подтянуться более опытные люди и дадут вам более исчерпывающие ответы.
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 7 2010, 19:55
Сообщение #3


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



man ipconfig ? laughing.gif ... Если нужны именно API то они в его сорцах )))...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Oops
сообщение Nov 8 2010, 17:03
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



Спасибо, посмотрим.
Вот нашел книгу по Linux API : http://kernelbook.sourceforge.net/kernel-api.pdf думаю там можно кое чего посмотреть.
Go to the top of the page
 
+Quote Post
Demeny
сообщение Nov 9 2010, 09:31
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(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));


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 9 2010, 12:45
Сообщение #6


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(Demeny @ Nov 9 2010, 11:31) *
Практически всё, что Вам придёт в голову сотворить с сетевыми интерфейсами в Linux, можно сделать с помощью ioctl() вызовов, посылаемых открытому сокету.

Вообще-то да, а я почему-то подумал, что вопрошающему нужно работать на более низком уровне, например рулить MAC-адресацией... laughing.gif рефлексы...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
S_agent
сообщение Nov 9 2010, 13:49
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-10-05
Из: Ukraine, Kiev
Пользователь №: 9 300



если у Вас есть 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
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Nov 9 2010, 14:20
Сообщение #8


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



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

biggrin.gif biggrin.gif biggrin.gif Да... страшно туплю... Видимо в мозгу уже DMA... от глаз в руки пересылаем одно, а в регистры памяти пишем совсем другое smile.gif


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
S_agent
сообщение Nov 9 2010, 14:31
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-10-05
Из: Ukraine, Kiev
Пользователь №: 9 300



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

biggrin.gif
Go to the top of the page
 
+Quote Post
Oops
сообщение Nov 11 2010, 20:43
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



Большое спасибо!!!
Go to the top of the page
 
+Quote Post
edo
сообщение Nov 27 2010, 13:25
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 8-08-07
Пользователь №: 29 664



Цитата(Oops @ Nov 4 2010, 13:59) *
Здравствуйте!!!
Пишу программку, в которой нужно работать с сетью.
Тоесть через эту программку можно менять IP адрес сетевого интерфейса, маску, путь, также она работает в фоне и отслеживает состояние сети.
Тоесть если сеть упала (выдернули сетевой кабель) программка сообщает об этом, если сеть заработала снова (подключили сетевой кабель) она также сообщает.
Я думаю есть специальные API функции для работы с сетевым оборудованием в Linux.
Посоветуйте кто знает, как это лучше сделать, где и что почитать?
имхо лучше начать не с того, чтобы строить свой велосипед, а посмотреть - что написано до вас.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 10:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016