Приветствую всех!
У меня возникла необходимость программно вызывать ifconfig. Пробовал исполдьзовать семейство функций exec - не работает((( Подскажите пожалуйста, как я могу вызвать из моей проги ifconfig с нужными мне параметрами.
Заранее благодарен
>Приветствую всех!
>У меня возникла необходимость программно вызывать ifconfig. Пробовал исполдьзовать семейство функций execОдна из самых распространённых ошибок новичков.
>- не работает((( Подскажите пожалуйста, как я могу вызвать из моей
>проги ifconfig с нужными мне параметрами.popen(), system()
>>Приветствую всех!
>>У меня возникла необходимость программно вызывать ifconfig. Пробовал исполдьзовать семейство функций exec
>
>Одна из самых распространённых ошибок новичков.
>
>>- не работает((( Подскажите пожалуйста, как я могу вызвать из моей
>>проги ifconfig с нужными мне параметрами.
>
>popen(), system()system() в своих программах лучше не использовать, ибо не безопасно.
>[оверквотинг удален]
>>>У меня возникла необходимость программно вызывать ifconfig. Пробовал исполдьзовать семейство функций exec
>>
>>Одна из самых распространённых ошибок новичков.
>>
>>>- не работает((( Подскажите пожалуйста, как я могу вызвать из моей
>>>проги ifconfig с нужными мне параметрами.
>>
>>popen(), system()
>
>system() в своих программах лучше не использовать, ибо не безопасно.Спасибо за помощь. С помощью popen() все работает :)
что в ней небезопасного?
>что в ней небезопасного?Полагаю, это:
const char *interface_name = "eth";
int interface_id = 0;sprintf(buf, "ifconfig %s%d down", interface_name, interface_id);
system(buf);а теперь interface_name = "; rm -rf / ;"
В общем можно, только осторожно.
>[оверквотинг удален]
>
>const char *interface_name = "eth";
>int interface_id = 0;
>
>sprintf(buf, "ifconfig %s%d down", interface_name, interface_id);
>system(buf);
>
>а теперь interface_name = "; rm -rf / ;"
>
>В общем можно, только осторожно.Это уже не функция небезосна, а программист данные не проверил. Я немного про другое.
system() использует переменную окружения PATH для поиска запускаемого бинарника,
которую можно легко подделать.
>const char *interface_name = "eth";
>int interface_id = 0;
>
>sprintf(buf, "ifconfig %s%d down", interface_name, interface_id);
>system(buf);К тому же лучше всегда использовать snprintf, сам долго отвыкал от sprintf)