The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"C/C++ .... system('iptables.......')"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"C/C++ .... system('iptables.......')"  +/
Сообщение от ivanches (ok) on 03-Май-10, 19:00 
Доброго времени суток уважаемые форумчане!
Подскажите, как разрешить одну проблемку. Пытаюсь сделать защиту для игрового сервера, написан клиент и сервер, последний пока тестовый, т.к. может выдавать только строку в консоли :)
Принцип работы - в связке с iptables, последний должен быть настроен. Политика на все входящие:
-P INPUT DROP
Все входящие пакеты отбрасываются, далее цепочки исключений -A INPUT..... -j ACCEPT разрешаеи всё , что нужно, протоколы  и т.п. только порт 2106 не должен быть в исключении(!!!!!), т.к. этот порт игрового сервера авторизации, исключения для этого порта должно выполняться программно учитывая ip(в дальнейшем и MAC) звонящего клиента.
В чём затык? Затык в том, что у iptables нет API, разрабы рекомендуют пользоваться system(), а в system можно прописать лишь строковую константу , т.е. например:
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ообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "C/C++ .... system('iptables.......')"  +/
Сообщение от ivanches (ok) on 03-Май-10, 21:04 
>[оверквотинг удален]
>ip(в дальнейшем и MAC) звонящего клиента.
>В чём затык? Затык в том, что у iptables нет API, разрабы
>рекомендуют пользоваться system(), а в system можно прописать лишь строковую константу
>, т.е. например:
>
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);

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "C/C++ .... system('iptables.......')"  +/
Сообщение от Андрей (??) on 04-Май-10, 00:42 
>Уф... а ларчик просто открывался :))
>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);

рекомендуется использовать snprintf(buffer, 1024, .....); так как это позволяет предотвратить переполнение buffer если параметры формата очень длинные.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "C/C++ .... system('iptables.......')"  +/
Сообщение от phpcoder email(??) on 04-Май-10, 09:54 
>рекомендуется использовать snprintf(buffer, 1024, .....);

+1 про snprintf().

(Можно даже snprintf(buffer, sizeof(buffer), ...)) чтобы размер буфера вычислялся автоматически.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

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




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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