я просто хочу использовать команду iptables в моей программе c - PullRequest
0 голосов
/ 20 марта 2010

Я разрабатываю простой код c для вызова команды iptables в соответствии с необходимостью. я просто хочу отбросить пакеты с определенного ipaddress, используя мой код c. Вот почему я должен использовать команду iptables в соответствии с данными ввода. Можно ли вызвать команду с помощью кода C? если это то как ??? заранее спасибо ..

Ответы [ 2 ]

2 голосов
/ 20 марта 2010

Предполагая, что ваша программа работает от имени пользователя 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-адрес

1 голос
/ 20 марта 2010

Это можно сделать без использования семейства команд system () или exec * (), однако я уверен, что вы также заинтересованы в фактическом завершении вашего проекта:)

Если, однако, вам нужна только элементарная функциональность iptables в вашей программе или требуется точная обработка ошибок, вы можете получить исходный код для пакета iptables.

Расширенное предупреждение: изучение хуков iptables ioctl и соответствующих модулей сетевого фильтра, как известно, является задачей разжижения ума.

...