2012-09-20 55 views
2

我在Windows 7机器上安装了TAP-WIN32适配器V9。我想用 TUN从接口读取IP数据包。我跟着从 http://www.varsanofiev.com/inside/using_tuntap_under_windows.htm在Windows中使用TUN驱动程序

的C#示例我修改了代码像下面

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包的正确方法吗?

+0

对于我来说,我可以从TUN接口读取IP数据包,但是我的问题是,当我转发这些数据包并在我的ubuntu服务器上写入tun0时,我得到的数据包是'ETHERNET FRAME CHECK SEQUENCE NOT CORRECT '作为回应。 为了你能够读取IP数据包,设置P2P像你这样后,你需要做一些路由: '路由添加掩码255.255.255.255 <路由器/调制解调器网关IP>'' 添加路由128.0.0.0 mask 128.0.0.0 ' 'route add 0.0.0.0 mask 128.0.0.0 ' – user2759156

回答

2

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