Преобразуйте `ip tuntap add` system() в код C

Я пытаюсь преобразовать system() звоните, у меня есть в C, который звонит ip tuntap add ... код C, который не полагается на system() вызов.

В основном проблема в том, что туннельный адаптер, который я использую system("ip tuntap add ...") вызов для вызова остается там, когда мое приложение принудительно прекращается.

Мне сказали, что я могу использовать rtnetlink для достижения своей цели. Я хотел бы преобразовать следующую строку в код C, который не зависит от system() вызов. Я полагаю, что если я использую rtnetlink, то туннельный адаптер, который я использую, будет уничтожен ядром при завершении работы моего приложения, и это главная причина, по которой я хочу это сделать.

Это моя текущая строка в C:

system("ip tuntap add dev tun1 mode tun");

Если rtnetlink не такой, как я хотел бы сделать это, есть ли другой метод, который разрушит туннель, когда мое приложение будет принудительно завершено?

1 ответ

Решение

@ Jonathon Reinhart ответил на это в комментариях:

То, что вы ищете, это непостоянный адаптер TUN. Вместо того, чтобы использовать

system("ip tuntap add dev tun1 mode tun");

Посмотрите на tun_alloc функция в этом файле: simpletun.c

Вы могли бы назвать это что-то вроде:

int tun_fd = tun_alloc("tun1", IFF_TUN | IFF_NO_PI);

Когда он вызывается, он создаст новый туннель, если он не существует, и вернет дескриптор файла для туннеля. Если он уже существует, он просто вернет дескриптор файла для туннеля.

Когда он создает туннель, если ваш процесс умирает, он будет активно разрушать туннель и любые связанные маршруты.

Другие вопросы по тегам