Страница 1 из 1
Вешаться на определенный интерфейс
Добавлено: 2010-11-17 19:06:39
pazlo
Доброе время суток! Не подскажите, если ли под никсы или окна софтина, которая могла бы биндить софтину на определенный интерфейс.
Вот например: есть прога XXX, она простая и написана так, что не рассчитана на использование конкретного интерфейса, а биндится сразу на все. Мне надо чтоб она могла биндится, скажем на eth1.
Т.е. что-то типа такой команды чтоб было:)
Очень благодарю за ответ:)
Re: Вешаться на определенный интерфейс
Добавлено: 2010-11-17 19:16:06
pazlo
Можно в принципе фаером все разрулить, но мне надо именно так:) Кстати, забыл уточнить: не на интерфейс, а на ip. А то ведь у интерфейсов могут быть еще и алиасы.
Re: Вешаться на определенный интерфейс
Добавлено: 2010-11-17 21:18:44
hizel
написать обертку вокруг socket функций и подсунуть программе
Re: Вешаться на определенный интерфейс
Добавлено: 2010-11-17 21:25:20
hizel
Re: Вешаться на определенный интерфейс
Добавлено: 2010-11-18 5:43:48
pazlo
Спасибо большое за совет, почти помогло:) А как быть если прога использует 2 порта?
Re: Вешаться на определенный интерфейс
Добавлено: 2010-11-18 6:27:46
pazlo
Разобрался! 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. А мне хватило и этого! Спасибо за ответы!
Re: Вешаться на определенный интерфейс
Добавлено: 2010-11-18 9:15:10
hizel
разве вам не нужно на одпределенный ip вешать?
типа
Код: Выделить всё
new_addr.sin_addr.s_addr = htonl('192.168.0.1')