The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
C/C++ .... system('iptables.......'), !*! ivanches, 03-Май-10, 19:00  [смотреть все]
Доброго времени суток уважаемые форумчане!
Подскажите, как разрешить одну проблемку. Пытаюсь сделать защиту для игрового сервера, написан клиент и сервер, последний пока тестовый, т.к. может выдавать только строку в консоли :)
Принцип работы - в связке с iptables, последний должен быть настроен. Политика на все входящие:
-P INPUT DROP
Все входящие пакеты отбрасываются, далее цепочки исключений -A INPUT..... -j ACCEPT разрешаеи всё , что нужно, протоколы  и т.п. только порт 2106 не должен быть в исключении(!!!!!), т.к. этот порт игрового сервера авторизации, исключения для этого порта [u]должно выполняться программно[/u] учитывая ip(в дальнейшем и MAC) звонящего клиента.
В чём затык? Затык в том, что у iptables нет API, разрабы рекомендуют пользоваться system(), а в system можно прописать лишь строковую [u]константу[/u] , т.е. например:
system("iptables -A INPUT -s 10.154.177.45 -p tcp --dport 2106 -j ACCEPT");

Но нужно , что бы IP подставлялся извлекаясь из входящего пакета:
system("iptables -A INPUT -s %s %s\n",  inet_ntoa(ss.sin_addr) ,"-p tcp --dport 2106 -j ACCEPT");

в таком варианте компилятор выдаёт ошибку. Подскажите , есть ли решение и как оно выглядит. Всем заранее спасибо!
  • C/C++ .... system('iptables.......'), !*! ivanches, 21:04 , 03-Май-10 (1)
    >[оверквотинг удален]
    >ip(в дальнейшем и MAC) звонящего клиента.
    >В чём затык? Затык в том, что у iptables нет API, разрабы
    >рекомендуют пользоваться system(), а в system можно прописать лишь строковую [u]константу[/u]
    >, т.е. например:
    >
    system("iptables -A INPUT -s 10.154.177.45 -p tcp --dport 2106 -j ACCEPT");

    >Но нужно , что бы IP подставлялся извлекаясь из входящего пакета:
    >
    system("iptables -A INPUT -s %s %s\n",  inet_ntoa(ss.sin_addr) ,"-p tcp --dport 2106 
    >-j ACCEPT");

    >в таком варианте компилятор выдаёт ошибку. Подскажите , есть ли решение и
    >как оно выглядит. Всем заранее спасибо!

    Уф... а ларчик просто открывался :))
    http://www.developpez.net/forums/d127481/c-cpp/cpp/debuter/c.../
    Всё , разобрался наконец...
    Может кому пригодится:

    char buffer[1024];
    sprintf(buffer, "iptables -A INPUT -s %s %s\n", inet_ntoa(ss.sin_addr)," -p tcp --dport 2106 -j ACCEPT");
    system(buffer);




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

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