【发布时间】:2018-04-01 23:02:43
【问题描述】:
我正在尝试将我在 C 中调用 ip tuntap add ... 的 system() 调用转换为不依赖于 system() 调用的 C 代码。
基本上,当我的应用程序被强制终止时,我使用system("ip tuntap add ...") 调用调出的隧道适配器仍然存在问题。
有人告诉我,我可以使用rtnetlink 来实现我的目标。我想将以下行转换为不依赖于 system() 调用的 C 代码。我相信如果我使用rtnetlink,当我的应用程序终止时,我启动的隧道适配器将被内核破坏,这是我想这样做的主要原因。
这是我在 C 中的当前行:
system("ip tuntap add dev tun1 mode tun");
如果rtnetlink 不是我会这样做的方式,当我的应用程序被强行终止时,是否有另一种方法会破坏隧道?
【问题讨论】:
-
对。您正在寻找的是一个非持久性 TUN 适配器,这是您使用系统调用时的默认设置。
-
@JonathonReinhart 但是需要重新启动网络服务才能清除它,对吗?我不能这样做,因为一切都需要在 C 代码中完成.. :3
-
不,您不必重新启动。试试这个例子:cis.syr.edu/~wedu/seed/Labs/VPN/files/simpletun.c
-
@JonathonReinhart 我没有看到
system()在那里的任何地方被调用?我看到了一个tun_alloc函数,但是 afaik 只获取活动隧道接口的文件描述符 -
它可以创建一个新的tun设备。编译代码并使用它。