问题标签 [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.
c++ - 使用 tun/tap 接口的错误序列号
我正在尝试使用 tun/tap 将 TCP 数据包读入结构,因此将 IFF_TUN 标志设置为使用 tun 设备(无以太网标头)。
我有这样的结构(我不关心字节序问题):
Tcp 标头:
IPv4 标头:
并像这样读取数据包:
到目前为止,一切都很好。但是当我尝试读取 TCP 序列号时,我得到了错误的数字:
tshark 输出显示 seq=0 (如下所示):
但我的代码输出是7be53b39
linux - 无法使用自定义(桥接)tap 设备在 QEMU VM 中加载 XDP 程序
我最近尝试在 QEMU VM 中加载 XDP 程序(使用virtio-net-pci
作为 NIC 驱动程序,并将设备作为后端)。这样做似乎需要我的 NIC 具有队列的 vCPU*2 功能,这可以通过在 QEMU 启动命令 ( ... -netdev tap,queues=<N> ...
) 中声明它来完成。如果我没有用足够数量的队列声明 NIC 并尝试加载 XDP 程序,我会收到以下内核消息和错误:
到目前为止,这完全不是问题,尽管我知道为什么需要这样做(我已经成功地在我的主机上加载了相同的 XDP 程序,它只有一个队列)。
但我的目标是让 QEMU 使用我的自定义分接设备,该设备已连接到主机上的网桥。而不是让 QEMU 为我创建一个新的。
为了使用自定义 Tap 设备,我使用以下命令启动 VM:
tap0
所谓的自定义水龙头设备在哪里。
上面的 QEMU 命令不会启动 VM,错误信息是:
通过删除选项ifname=tap0
或queues=4
,它可以正常启动。
似乎它告诉我我不能同时声明具有多队列和桥接抽头设备的 NIC。但尴尬的是我需要在桥接分接头设备上执行 XDP 程序。
有谁知道为什么桥接分接头设备不能与启用多队列的 NIC 一起使用?
PS内核版本:5.4.33
QEMU版本:4.2.0 (Debian 1:4.2-3ubuntu6.2)
感谢您阅读我的问题!
rust - 在 MacOS 上使用 tun_tap_mac crate
我正在尝试在 MacOS 上使用tun_tap_mac 板条箱,但在入门时遇到了麻烦。这是我的代码:
我收到了这个错误:
我尝试使用 sudo 进行构建,但遇到了同样的问题。MacOS 没有setcap
-like 功能,文档似乎很稀疏。看起来这个板条箱是从原始 tun_tap 分叉来支持 Mac 的,但我真的找不到任何其他帮助。有什么建议吗?
openvpn - 如何创建一个tun接口?
这是我第一次管理虚拟接口,我想在 linux 上创建一个临时 TUN 接口我正在关注本教程https://backreference.org/2010/03/26/tuntap-interface-tutorial/但我有很多对某些适应症的理解较差。
首先,我从 .tar 文件夹中下载了 simpletun.c 文件,但我不明白如何处理它,也不知道在哪里保存它。
在此行中运行时:
~# openvpn --mktun --dev tun0
2021 年 4 月 9 日星期五 12:41:46 错误:无法打开 TUN/TAP dev /dev/net/tun:没有这样的文件或目录 (errno=2)
2021 年 4 月 9 日星期五 12:41:46 因致命错误退出
在 root 的终端中,似乎没有找到 dev/net/tun,即使我创建了它。我有一种我理解错了的感觉。你能帮我理解我具体应该做什么才能让它发挥作用吗?
问候,
霉变
networking - Qemu 网络选项:tap vs bridge
我刚开始学习如何在项目中使用 Qemu。我试图使用桥接网络运行 Qemu,并且想知道网络选项、tap 和 bridge 之间有什么区别。
我阅读了 Qemu 文档中的网络选项部分,但无法理解其中的区别。该文档提到“-netdev tap”用于配置具有 ID id 的主机 TAP 网络后端,而“-netdev bridge”用于将主机 TAP 网络接口连接到主机桥设备。我还查看了这个网站:https : //wiki.archlinux.org/title/QEMU#Tap_networking_with_QEMU,但仍然无法理解使用“-netdev tap”与“-netdev bridge”之间的区别。
任何人都可以通过解释为 Qemu 使用“-netdev tap”和“-netdev bridge”之间的区别来帮助我吗?
谢谢你。
c - 运行创建 TUN 接口的代码,并在我的代码中模拟 TCP 侦听端口。所以收到的 SYN 包在代码中用 SYN+ACK 响应
我有一个从 TUN0 接口读取 IP 数据包的简单服务器。在这段代码中,我试图在端口 80 上模拟 TCP 侦听端口的行为,因此将其称为服务器。所以如果我收到 SYN 请求,我会用 SYN+ACK 响应来响应它。
我反复检查我的代码 SYN+ACK 数据包是否被忽略,并且我不断重新传输 SYN 数据包。为什么会这样?
我的 SYN+ACK 数据包似乎很好。其他人也检查了它,如果需要,请参阅下面的完整数据包捕获。但是我的客户端忽略了我的服务器代码对其 TCP SYN 数据包的 SYN+ACK 数据包响应。
我检查了netstat
我还禁用了 Linux Reverse 的路径过滤
但是我的 netstat 没有显示任何丢弃的数据包。那么我的客户端只是忽略我的服务器的 SYN+ACK 数据包的另一个原因可能是什么。我不断从客户端重新传输 SYN 数据包。Linux内核中是否有一些神奇的工作拒绝SYN + ACK数据包并且没有人知道它。我是否需要iptable
配置或其他东西,我认为最初不需要,但我还能做什么。
这是初始 SYN 和 SYN+ACK 的十六进制转储
同步+确认
数据包捕获显示:
这是完整的数据包捕获:
https://drive.google.com/file/d/1hF8FeQcZqGvAZzxHHRRtO2BOl8Y1Yymn/view?usp=sharing
内核版本:内核 5.13.0-22-generic