2

我正在尝试将system()我在 C 中的调用转换ip tuntap add ...为不依赖于调用的 C 代码system()

基本上,system("ip tuntap add ...")当我的应用程序被强行终止时,我使用调用调出的隧道适配器留在那里是一个问题。

我被告知我可以使用rtnetlink来实现我的目标。我想将以下行转换为不依赖system()调用的 C 代码。我相信如果我使用rtnetlink,当我的应用程序终止时,我提出的隧道适配器将被内核破坏,这是我想要这样做的主要原因。

这是我在 C 中的当前行:

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

如果rtnetlink不是我将如何去做,当我的应用程序被强制终止时,是否有另一种方法会破坏隧道?

4

1 回答 1

3

@ 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);

当它被调用时,如果它不存在,它将创建新的隧道并返回隧道的文件描述符。如果它已经存在,它将简单地返回隧道的文件描述符。

当它创建隧道时,如果您的进程死亡,它将主动破坏隧道和任何关联的路由。

于 2018-04-02T18:33:18.613 回答