The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Добавление маршрута под линуксом"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Добавление маршрута под линуксом"
Сообщение от ec emailИскать по авторуВ закладки on 15-Мрт-04, 12:59  (MSK)
Не поделится ли кто примером, как на Си под Linux'ом добавить в ядро маршрут?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Добавление маршрута под линуксом"
Сообщение от ovax Искать по авторуВ закладки on 16-Мрт-04, 02:21  (MSK)
>Не поделится ли кто примером, как на Си под Linux'ом добавить в
>ядро маршрут?

Хм.. а зачем в ядро-то ?
не достаточно будет просто системе передать команду
/sbin/route add .......  ?


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Добавление маршрута под линуксом"
Сообщение от fefelov Искать по авторуВ закладки on 16-Мрт-04, 10:30  (MSK)
http://libdnet.sourceforge.net/

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Добавление маршрута под линуксом"
Сообщение от Dmitry Labutcky emailИскать по авторуВ закладки on 23-Мрт-04, 17:39  (MSK)
Hi!

>Не поделится ли кто примером, как на Си под Linux'ом добавить в
>ядро маршрут?

да запросто:

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/route.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>

extern int errno;

int main(int argc, char **argv)
{
struct rtentry route_entry;
struct sockaddr_in sa;
const char *route_dst = "1.2.3.4";
const char *route_mask = "255.255.255.0";
const char *route_gw = "1.2.2.4";

int sock_fd;

if ( (sock_fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) == -1)
{
  printf("Error opening socket. %d: %s\n", errno, strerror(errno));
  return -1;
}

memset((void *)&route_entry, 0, sizeof(route_entry));

sa.sin_family=AF_INET;
sa.sin_addr.s_addr=inet_addr(route_dst);
memcpy(&route_entry.rt_dst, &sa, sizeof(sa));
sa.sin_addr.s_addr=inet_addr(route_gw);
memcpy(&route_entry.rt_gateway, &sa, sizeof(sa));
sa.sin_addr.s_addr=inet_addr(route_mask);
memcpy(&route_entry.rt_genmask, &sa, sizeof(sa));
route_entry.rt_flags=RTF_UP|RTF_GATEWAY;
route_entry.rt_metric=1;

if (ioctl(sock_fd, SIOCADDRT, &route_entry) == -1)
printf("Error %d: %s\n", errno, strerror(errno));

close(sock_fd);

return 0;
}


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру