在Windows中使用TUN驱动程序

前端之家收集整理的这篇文章主要介绍了在Windows中使用TUN驱动程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Windows 7机器上安装了TAP-WIN32适配器V9.我想用
TUN从接口读取IP数据包.我跟着C#样本
http://www.varsanofiev.com/inside/using_tuntap_under_windows.htm

修改了下面的代码

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

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

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

解决方法

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

猜你在找的Windows相关文章