问题标签 [tun]
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.
android - 安卓VPN服务。为什么所有流量都经过 TUN 设备?
我使用VpnService创建了一个 TUN 设备。为什么 TUN 接口在我设备的其他网络接口中具有最高优先级?
更新#1
这就是我配置 TUN 设备的方式:
更新#2
这是route -n
没有TUN 设备的输出:
这是route -n
使用TUN 设备的输出:
sockets - 如何发送未触及的 tun 数据包?
我有一个软件,它使用 TUN 设备读取数据包,处理数据包并将它们发送出去。现在我问自己,如果可能的话,发送“tun 数据包”而不接触它们。通过 TUN 设备,我得到 IP 数据包,但通过 RAW 套接字,我只能发送自定义传输层数据包……是否有可能从 TUN 设备获取这个数据包并通过网卡发送出去?
linux-kernel - 从 tun 设备读取()而不删除从操作系统缓冲区读取的数据
短版。是否有 Linux API 允许从文件描述符中读取(类似于 read())而不实际从操作系统缓冲区中删除数据?某种方式将 read() 拆分为等价于 front() (读取而不删除)和 pop() (删除)。
情景。我有一个 TUN 设备,用于通过我自己的网络堆栈传送 IP 数据报。问题是,特别是当上面的应用程序使用 UDP 时,TUN 设备可能会被操作系统充斥着数据,我的堆栈无法足够快地管理这些数据。
目标。我想:一旦数据报到达 TUN 设备,就读取它,而不将其从内核缓冲区中删除,检查数据报,确定下面的专有协议栈的其余部分是否可以处理它,如果可以,则弹出() 来自内核缓冲区的数据,否则将数据保留在那里。
为什么。不从内核缓冲区中弹出()之所以不同,是因为上面的应用程序实际上可以意识到网络协议的较低层是拥塞的(因为它自己的网络接口上的 write() 或 send() 会失败),并采取相应的行动。如果数据被删除,就像普通的 read() 一样,应用程序对拥塞没有任何线索,并继续泛滥。
linux - 2 个 TAP 接口之间的 Linux 桥接器需要 IP?
我正在尝试在服务器上设置 openvpn,以便我有 2 个不同的 tap 接口(tap0 和 tap1),然后是一个连接这些接口的桥接器。这个想法是 tap0 上的客户端将能够与 tap1 上的客户端对话,反之亦然。
桥接器中不涉及物理 NIC,并且桥接器接口设置为没有 ip/网络掩码/广播。
当它们都连接时,我可以在它们之间 ping 通,但是在尝试 tcpdump 桥接接口时我看不到流量。
我对一些事情有点困惑:
我是否需要在网桥接口上配置一个 ip?我不太明白它的原因,因为它所做的只是让虚拟接口相互通信
网桥接口没有分配 ip/网络掩码/广播的事实是我在 tcpdumping 接口时看不到网桥接口上的 ping 流量的原因吗?
如果对第 2 点的回答是肯定的,我认为不可能使用 iptables 来阻止/允许该接口上的流量,对吗?如果是这样,有没有其他方法可以在这样的界面上完成对 iptables 的处理?
android - 是否可以在使用 VpnService.Builder 创建的 Android 中的 TUN 设备上启用多播?
我正在创建一个 Android VPN 应用程序,每当我尝试将入站多播数据包传送到测试应用程序时,我都会遇到困难。当我的 VPN 应用程序将入站多播 IP 数据包(IP 标头的目标地址字段具有多播范围内的地址)写入 TUN 设备的文件描述符端时,我没有看到数据包出现在测试应用程序上用于接收多播数据包。但是,我确实看到测试应用程序正在接收单播数据包。我还看到我的测试应用程序在 VPN 应用程序不在混合中时接收多播数据包,所以我知道它能够接收多播数据。
我怀疑我的 VPN 应用程序创建的 TUN 设备默认不启用多播功能,我还没有找到 Android 公开的任何方法来这样做。有谁知道是否可以为 TUN 设备启用多播?或者,我可能完全错过了其他东西吗?
我使用以下代码使用 VpnService.Builder 类创建 TUN 设备
我使用以下代码创建文件描述符以将 IP 数据包发送到 TUN 设备
android - Android VPN 阻止来自 tun0 的流量
我在 Android 设备上创建了 VPN 客户端,创建 tun0 后,所有流量都通过 tun0 路由。我想阻止通过 tun0 的流量。请让我知道是否可以通过 tun0 阻止流量。
linux - 使用 Linux::TunTap 读取数据包
我已经编写了一个 perl 脚本,它通过 Linux::TunTap 将数据包读入用户空间,而且一切似乎都运行良好:
现在的问题是:如何将表示从 tuntap 设备读取的原始 IP 数据包的字符串转换为适当的数据结构以进行处理?特别是我在源、目的地和序列号之后。
显然,原始 IP 数据包在其原始格式中不是很容易被人类阅读。这是通过 tuntap 接口发送 ping 后的输出:
{{{�}/��8V�| !"#$%&'()*+,-./0123456ET��@@4
我如何从这里开始以编程方式处理这些数据?
linux - 使用 perl 确定 IPv4 数据包的源端口
我有一个 perl 脚本,它从 TunTap 接口读取和处理 IPv4 数据包。稍微精简一下,看起来是这样的:
出于路由的原因,我需要知道数据的源端口。我还没有找到一种方法来做到这一点NetPacket::IP
,那么有没有不同的方法来确定呢?我目前只是NetPacket::IP
出于调试原因使用,所以我并没有真正设置该模块,特别是如果一个不同的模块允许我提取除了序列号、大小、源 IP 和目标 IP 之外的源端口。
android - 如何解决 ioctl 操作不允许?
我想打开一个虚拟接口tun,但是当我使用函数 ioctl (ioctl(fd,TUNSETIFF,&ifr)) 时,它总是返回ioctl operation not allowed 。
在情况 1 中,ioctl 通过(它使用 fd-socket、ioctl-SIOCGIFFLAGS):
但在 case2 中,ioctl 返回 -1(不允许操作)(它使用 fd-open、ioctl-TUNSETIFF)。
表明
我如何通过ioctl
案例 2?
c - TIOCOUTQ 或 TUN/TAP 接口的等效功能?
我正在尝试使用 TUN 接口测试无线设备的最大吞吐量,并且我想避免发送缓冲区溢出,这将导致数据包在实际到达设备之前被丢弃。因此,理想情况下,我想使用 TIOCOUTQ 查询发送缓冲区,以确保队列中始终有数据而不会溢出。我创建了一个如下所示的简单测试。
如果创建 sock 以使其通过标准以太网设备进行路由,则输出非零,但如果创建 sock 以使其通过 TUN 接口进行路由,则输出全为零。在这种情况下,没有进程消耗数据,所以我认为缓冲区会填满。我在我的实际应用程序中得到了相同的行为,我确实有一个消耗数据的进程。
所以我想知道我的结论是否正确,TIOCOUTQ 根本不适用于 TUN 接口,是否可能有其他方法来确定发送缓冲区状态。