Вешаться на определенный интерфейс

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
pazlo
проходил мимо

Вешаться на определенный интерфейс

Непрочитанное сообщение pazlo » 2010-11-17 19:06:39

Доброе время суток! Не подскажите, если ли под никсы или окна софтина, которая могла бы биндить софтину на определенный интерфейс.
Вот например: есть прога XXX, она простая и написана так, что не рассчитана на использование конкретного интерфейса, а биндится сразу на все. Мне надо чтоб она могла биндится, скажем на eth1.

Код: Выделить всё

# if_binder /usr/bin/XXX eth1
Т.е. что-то типа такой команды чтоб было:)

Очень благодарю за ответ:)

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

pazlo
проходил мимо

Re: Вешаться на определенный интерфейс

Непрочитанное сообщение pazlo » 2010-11-17 19:16:06

Можно в принципе фаером все разрулить, но мне надо именно так:) Кстати, забыл уточнить: не на интерфейс, а на ip. А то ведь у интерфейсов могут быть еще и алиасы.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Вешаться на определенный интерфейс

Непрочитанное сообщение hizel » 2010-11-17 21:18:44

написать обертку вокруг socket функций и подсунуть программе
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Вешаться на определенный интерфейс

Непрочитанное сообщение hizel » 2010-11-17 21:25:20

В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

pazlo
проходил мимо

Re: Вешаться на определенный интерфейс

Непрочитанное сообщение pazlo » 2010-11-18 5:43:48

hizel писал(а):по аналогии с http://www.linux.org.ru/forum/admin/3367875
Спасибо большое за совет, почти помогло:) А как быть если прога использует 2 порта?

pazlo
проходил мимо

Re: Вешаться на определенный интерфейс

Непрочитанное сообщение pazlo » 2010-11-18 6:27:46

Разобрался! bind вызывается каждый раз при биндинии порта. Я просто не программист, поэтмоу не сразу понял что к чему. Выложу на всякий случай исходник, который юзаю у себя:

Код: Выделить всё

#define _GNU_SOURCE

#include <stdio.h>
#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <dlfcn.h>

typedef int (* BindFn)(int s, const struct sockaddr *a, socklen_t al);
int port=10000; //сюда вписываем слушаемый порт
int bind(int s, const struct sockaddr *a, socklen_t al)
{
   port++; // делаем port+1
   BindFn real_bind_fn = dlsym(RTLD_NEXT, "bind");

   if (a->sa_family == AF_INET)
   {
      struct sockaddr_in new_addr;

      memcpy(&new_addr, a, sizeof(*a));
      new_addr.sin_port = htons(port /* Your port here */);

      return real_bind_fn(s, (const struct sockaddr *)&new_addr, al);
   }

   return real_bind_fn(s, a, al);
}

Идея проста как 3 пальца!:) Также знающему исходник не сложно дописать так, чтоб биндилась прога на разные порты, не отличающиеся на 1. А мне хватило и этого! Спасибо за ответы!

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Вешаться на определенный интерфейс

Непрочитанное сообщение hizel » 2010-11-18 9:15:10

разве вам не нужно на одпределенный ip вешать?
типа

Код: Выделить всё

new_addr.sin_addr.s_addr = htonl('192.168.0.1')
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.