gpt4 book ai didi

c# - 将 TAP-Windows 设备置于 TAP 模式

转载 作者:可可西里 更新时间:2023-11-01 11:30:40 27 4
gpt4 key购买 nike

我正在使用 TAP-Windows(来自 OpenVPN 项目)创建一个界面,如所述 herehere .我的代码基于第一篇文章中提供的示例:

const string UsermodeDeviceSpace = "\\\\.\\Global\\";
string devGuid = GetDeviceGuid();
IntPtr ptr= CreateFile(UsermodeDeviceSpace+devGuid+".tap",
FileAccess.ReadWrite,
FileShare.ReadWrite,
0,
FileMode.Open,
FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED,
IntPtr.Zero);
int len;
IntPtr pstatus = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(pstatus, 1);
// Set media status to connected
DeviceIoControl (ptr,
TAP_CONTROL_CODE (6, METHOD_BUFFERED), pstatus, 4,
pstatus,
4,
out len,
IntPtr.Zero);
IntPtr ptun = Marshal.AllocHGlobal(12);
Marshal.WriteInt32(ptun, 0, 0x0100030a); // 10.0.0.1, Interface address
Marshal.WriteInt32(ptun, 4, 0x0000030a); // 10.0.0.0, Network
Marshal.WriteInt32(ptun, 8, unchecked((int)0x00ffffff)); // 255.255.255.0, Netmask
// Config TUN
DeviceIoControl (ptr,
TAP_CONTROL_CODE (10, METHOD_BUFFERED)
ptun,
12,
ptun,
12,
out len,
IntPtr.Zero);
tap = new FileStream(ptr, FileAccess.ReadWrite, true, 10000, true);
// Setup callbacks, etc. here.
while (true)
{
// Read from the device
}

设备似乎处于 TUN 模式 - 虽然我获得了数据包的有效负载,但不包括以太网 header 。强制界面以TAP模式运行的正确方法是什么?

我在 VirtualBox 中的 32 位 Windows 7 虚拟机上运行代码。

最佳答案

我正在处理这个例子。我意识到,当您调用此电话时:

IntPtr ptun = Marshal.AllocHGlobal(12);
Marshal.WriteInt32(ptun, 0, 0x0100030a); // 10.0.0.1, Interface address
Marshal.WriteInt32(ptun, 4, 0x0000030a); // 10.0.0.0, Network
Marshal.WriteInt32(ptun, 8, unchecked((int)0x00ffffff)); // 255.255.255.0, Netmask
// Config TUN
DeviceIoControl (ptr,
TAP_CONTROL_CODE (10, METHOD_BUFFERED)
ptun,
12,
ptun,
12,
out len,
IntPtr.Zero);

是接口(interface)处于TUN模式时。我所做的只是忽略它(我没有调用 DeviceIoControl),然后忽略文件流接收的所有数据包。

关于c# - 将 TAP-Windows 设备置于 TAP 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21276357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com