【问题标题】:How do I open a tun device created with 'ip tuntap'如何打开使用“ip tuntap”创建的 tun 设备
【发布时间】:2012-08-24 00:50:08
【问题描述】:

我正在尝试在 Linux 中打开 TUN 设备(希望最终在 Java 应用程序中)。由于我不想使用任何本机代码(如果可能,我想避免使用 JNI)我想通过命令行尽可能多地做。这是我正在尝试做的事情:

  • 使用ip tuntap add dev tun0 mode tun创建一个TUN接口
  • 设置它,并给它一个 IP 地址(使用ip 命令很简单)
  • 打开某种/dev/tun0文件从网络侧写入流量。

最后一步是我有点困惑的地方 - 我认为这可以在 Unix 上工作,因为网络适配器是文件,但我在 Linux 上,我认为我不能以这种方式访问​​ NIC。我知道这对于本机代码很简单(对ioctl 进行几次调用并获取文件描述符),但除非有某种方法可以从命令行执行此操作,否则它将无法正常工作。

有什么方法可以通过open 调用打开已经配置的tun 接口(配置为ip tuntap),并开始向其写入网络端IP 数据包(不使用ioctl)?

【问题讨论】:

    标签: java linux networking


    【解决方案1】:

    如果您已通过ip tuntap 设置它,那么您可以将其作为 java 的读/写文件打开,然后将整个以太网数据包写入其中。您可以打开它两次(FileInputStream/FileOutputStream)来读取和写入以太网数据包。

    【讨论】:

    • 我该如何打开它? new FileInputStream("/dev/net/tun0") 将(可能)返回未找到文件(不过我只检查过 ls
    • 啊,确实 - 抱歉,刚刚阅读了 TUN,它并没有创建实际的设备文件。不幸的是,您将需要编写一些 C 代码。如果您不想编写 JNI 代码,您可以创建一个程序来打开设备并将新文件描述符与它的 STDIN/STDOUT 桥接;请参阅stackoverflow.com/questions/11336157/… 了解如何将其与 Java 接口。
    • 你是对的 - 我没有正确阅读this,事实证明你的进程仍然需要通过一些ioctl调用打开接口,即使你已经用ip tuntap设置了它.看来我得努力学习 JNI 了 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    相关资源
    最近更新 更多