Доброго времени суток уважаемые форумчане!
Подскажите, как разрешить одну проблемку. Пытаюсь сделать защиту для игрового сервера, написан клиент и сервер, последний пока тестовый, т.к. может выдавать только строку в консоли :)
Принцип работы - в связке с 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");
в таком варианте компилятор выдаёт ошибку. Подскажите , есть ли решение и как оно выглядит. Всем заранее спасибо!
>[оверквотинг удален]
>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);
>Уф... а ларчик просто открывался :))
>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 если параметры формата очень длинные.
>рекомендуется использовать snprintf(buffer, 1024, .....);+1 про snprintf().
(Можно даже snprintf(buffer, sizeof(buffer), ...)) чтобы размер буфера вычислялся автоматически.