【问题标题】:Using TUN driver in windows在 windows 中使用 TUN 驱动程序
【发布时间】:2012-09-20 13:22:22
【问题描述】:

我已经在我的 Windows 7 机器上安装了 TAP-WIN32 Adapter V9。我想用 TUN 从接口读取 IP 数据包。我遵循了来自的 C# 示例 http://www.varsanofiev.com/inside/using_tuntap_under_windows.htm

我修改了如下代码

IntPtr ptun = Marshal.AllocHGlobal(8);       
Marshal.WriteInt32(ptun, 0, 0x0a030001);
Marshal.WriteInt32(ptun, 4, unchecked((int)0x00ffffFF));
bool val = DeviceIoControl (ptr, TAP_CONTROL_CODE (5, METHOD_BUFFERED) /*POINT TO POINT */, ptun, 8,ptun, 8, out len, IntPtr.Zero);

但是,我似乎仍然没有收到 IP 数据包。我在另一端运行 tcpdump 并 它抱怨“错误的链接层封装”

这是尝试从 TUN 接口获取 IP 数据包的正确方法吗?

【问题讨论】:

  • 对我来说,我可以从 TUN 接口读取 IP 数据包,但我的问题是,当我转发这些数据包并写入我的 ubuntu 服务器上的 tun0 时,我收到带有 @987654324 的数据包@ 作为回应。为了让你能够读取IP数据包,像你一样设置p2p之后,你需要做一些路由:route add <server_ip> mask 255.255.255.255 <router/modem gateway ip>route add 128.0.0.0 mask 128.0.0.0 <tun/tap ip>route add 0.0.0.0 mask 128.0.0.0 <tun/tap ip>
  • 你应该看看 openvpn 源代码。我在 openvpn 源代码中看到了属于 tun 模式的常量。例如,我的意思是 TAP_WIN_IOCTL_CONFIG_TUN。
  • TAP_WIN_IOCTL_CONFIG_TUN 定义在github.com/OpenVPN/tap-windows6/blob/…

标签: tun


【解决方案1】:

不,这不是正确的方法。 很遗憾,但是 tap/tun 驱动程序只能在 windows 的 tap 模式下工作。 这意味着您可以接收以太网数据包,而不是IP。 让我们考虑一下当你有一些目标地址 X 的 IP 数据包的情况。在以太网层发送这个数据包之前,操作系统会创建一个 ARP 查询,嘿,IP X,你的 MAC 是什么? 在这种情况下,您必须实现 ARP 层。 ARP协商后,系统将发送以太网封装的IP包。

【讨论】:

  • 谢谢伙计。我还试图将驱动程序设置为 TUN 模式。没办法吧? :(
猜你喜欢
  • 2010-11-03
  • 1970-01-01
  • 2011-12-18
  • 2017-11-02
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多