Предполагая, что ваша программа работает от имени пользователя root, просто используйте fork () и exec () и передайте команду iptables в exec (). Что-то вроде
if (0 == fork()) {
execl("/sbin/iptables", ...); // supply the proper arguments to iptables.
}
Edit: я вижу от других людей, что system () лучше, чем fork / exec.
Похоже, Неха не знает, как использовать sprintf для форматирования команды, чтобы она содержала IP-адрес, который хранится в некоторой другой переменной. Я думаю, это должно выглядеть так:
char *host_to_block = ....
char comm[1000];
snprintf(comm, sizeof(comm), "iptables -A INPUT -s %s -j DROP", host_to_block);
system(comm);
Обратите внимание, что это будет уязвимость безопасности , если у вас нет кода для проверки того, что host_to_block содержит IP-адрес, а не какую-либо другую команду оболочки. Вы можете использовать следующий вопрос для справки, если источник строки еще не известен как действительный:
как проверить IP-адрес