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);
- C/C++ .... system('iptables.......'), Андрей, 00:42 , 04-Май-10 (2)
>Уф... а ларчик просто открывался :)) >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/C++ .... system('iptables.......'), phpcoder, 09:54 , 04-Май-10 (3)
>рекомендуется использовать snprintf(buffer, 1024, .....);+1 про snprintf(). (Можно даже snprintf(buffer, sizeof(buffer), ...)) чтобы размер буфера вычислялся автоматически.
|