问题标签 [tun-tap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
447 浏览

freebsd - 如何在 FreeBSD 中使用 SIOCIFDESTROY?

我的应用程序创建了一个点击界面,一切正常。但是在 FreeBSD 上,当它退出时,点击界面仍然存在。要删除它,我必须手动运行以下命令:

但我想在我的应用程序中以编程方式执行此操作。我在哪里可以找到 SIOCIFDESTROY 的文档?这是我在应用退出时尝试过的操作:

此时err为零,但app结束时点击界面依然存在。任何人都知道我可能还缺少什么?

0 投票
1 回答
2646 浏览

linux - 通过 TCP 连接创建 VPN

我需要通过 TCP 连接创建一个虚拟 IP 网络。宿主系统是Linux,带有TUN/TAP内核驱动,很容易接收和重新注入虚拟网络的IP包。

困难的部分是将接收到的 IP 数据包传输到另一台主机。由于一些非技术原因,我只能通过 TCP 协议而不是 UDP 传输数据包。通过 UDP 传输 IP 数据包很容易,但使用 TCP 就变得很棘手,原因如下:

UDP 协议不支持重传/重排序,就像 IP 一样。因此,如果为每个接收到的虚拟 IP 数据包发送一个 UDP 数据包,内核 TCP/IP 协议栈仍会看到虚拟 IP 数据包丢失/重复/重新排序(如果这些“功能”,TCP/IP 需要这些数据包才能正常工作)丢失,虚拟网络上的 TCP 连接速度会受到影响)。如果通过 TCP 传输 IP 数据包,则所有必需的“功能”都将丢失,除非以某种方式模拟它们。

看来我必须在 TCP 连接上伪造某种数据包重复/丢失/重新排序,或者修补内核 TCP/IP 协议栈。这两种选择都不容易。

我的问题还有其他更简单的解决方案吗?还是我只是走错了方向?我全是耳朵。

==== 更新 ====

我正在考虑使用原始 IP 套接字(它可以在仍然使用 TCP 数据包的同时轻松摆脱物理网络上的所有 TCP 重新传输/重新排序的东西)来传输接收到的虚拟网络 IP 数据包。但是在接收主机上,我怎样才能只接收我感兴趣的数据包并将所有其他 IP 数据包返回到内核 TCP/IP 堆栈?

0 投票
1 回答
453 浏览

c++ - 不完整类型“struct ifmediareq”(ioctl)

我正在尝试重写一些源代码,并且具有以下功能:

但是,当我尝试编译时,出现以下错误:

如果我注释掉 SIOCGIFMEDIA 行,一切都编译得很好。知道我做错了什么吗?这也是我包含的一个片段:

0 投票
0 回答
1544 浏览

c++ - tun/tap 接口的 write() 返回“无效参数”

我已成功创建并附加到一个水龙头界面。我也可以毫无问题地从界面读取。但尝试写入它失败报告“无效参数”。代码如下:

有什么帮助吗?

0 投票
0 回答
1261 浏览

linux - 在 linux 机器上创建 tun/tap 接口是否有最大限制?此外,将约束置于极限的参数是什么?

我一直在研究 ns-3(通信网络模拟器)通信模拟器,其中有一个称为 TapBridge 机制的规定,用于将外部数据源连接到通信节点。但是,对于每个数据源,需要在 linux OS 桥上创建一个 tap 设备,并与 ns-3 中的一个节点建立连接。我需要连接许多数据源(比如 5000 个),因此我应该创建这么多分接头设备并与 ns-3 中的通信节点建立相应的连接。在 linux 机器上创建 tun/tap 接口的最大限制是多少?此外,将约束置于该限制的参数是什么?

提前致谢。——盖利

0 投票
0 回答
1007 浏览

networking - iptables NAT 不适用于来自 TAP 接口的数据包

iptables MASQUERADE NAT 规则未应用于来自 TAP 接口的数据包。

我有一个应用程序绑定到两个 TAP 接口,用于在路由期间进行一些数据包操作。

我正在使用iptables将 netfilter 标记应用于在两个物理接口之一上接收到的数据包,并使用ip 规则将数据包路由到我的 TAP 接口之一。当数据包从我的应用程序中出来时,它会返回到主路由表并从适当的物理接口发出。

我在两个物理接口之一上有一个 MASQUERADE NAT 规则,但是当数据包被传输时,NAT 没有被应用。我认为这是因为它已经通过了 iptables。

您能否在 iptables 中将数据包标记为“新”,以便它再次遍历完整的 iptables 链?

0 投票
1 回答
778 浏览

linux - 为什么将原始字节数据发送到分接头设备时缺少前导 4 字节数据?

我正在学习 linux 的 tun/tap 设备,有一个小问题我无法弄清楚这是我所做的:

1:创建一个tap设备,名称为“tap1”,获取文件描述符:tapfd

2:准备一个足够大的数组,比如:buf[2048]

3:将一个以太网帧写入buf,里面是一个ip(udp)包,共74bytes。以笨拙的方式完成它,例如:

4:调用write(),将上面提到的[74bytes]发送到[tapfd]

5:使用“tcpdump -i tap1 -vv”查看,结果如下:

total = 56bytes + 12bytes mac src&dst + 2bytes eth type = 70 bytes,那么,前导 4bytes 在哪里?

首先,我认为前导 4 字节应该是“前导码和帧定界符开始”,但正如 wiki 所说,前导码是 7 个八位字节,帧定界符开始是 1 个八位字节。

6:然后我在我的 [buf] 中插入 4 个字节,现在 buf 就像:

然后再次检查,这一次,tcp dump 告诉我这是一个合法的以太网帧!

有用!但为什么?为什么缺少前 4 字节?(请忽略错误的 udp 校验和)

0 投票
0 回答
159 浏览

networking - 使用 TAP 嗅探或修改传入的 eth 数据包

我试过https://github.com/TOGoS/TUN2UDP

这允许我这样做:

我想做的是:

换句话说,我想在第 2 层拦截传入的数据包并控制阻止、修改或传递它们。

我认为也许桥接 ETH 和 TAP 是关键,但我无法弄清楚如何以我需要的方式以编程方式访问这个桥接器。

0 投票
1 回答
2257 浏览

linux - 使用 tun 设备发送原始 IP 数据包

我正在尝试通过TUN 设备以编程方式构造和发送 IP 数据包。

我已经设置了 TUN 设备和正确的路由:

这导致:

IP 转发开启:# echo 1 > /proc/sys/net/ipv4/ip_forward

我已经为tun0数据包设置了 NAT:

然后我有 python 脚本来生成ICMP数据包:

我可以看到来自tun0接口的数据包:

但是wlp3s0接口是静默的,因此似乎数据包没有经过 NAT 并路由到wlp3s0接口,这是我的 WLAN 卡。

有什么我想念的想法吗?

0 投票
1 回答
11596 浏览

ubuntu-16.04 - 如何在 Ubuntu 16.04 上安装 tun

我尝试在 Ubuntu 16.04 上安装 tun,它会生成 tun.ko,但它仍然无法正常工作。

1

Unname -a Linux 主机名 4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

2

apt-get 安装 linux-source-4.10.0

3

cd /usr/src/linux-source-4.10.0 menuconfig->设备驱动->网络设备支持->通用TUN/TAP设备驱动支持

然后将其保存为 tun.config。

4

制作模块,它在/drivers/net/下生成tun.ko,没有错误,然后将其复制到lib/modules/4.10.0-42-generic/kernel/net/tun.ko。

它仍然不起作用。命令“modinfo tun”不输出任何内容。

关于 Ubuntu 16.04 上的安装 tun 有什么建议吗?