C++ 创建 NdisProt 驱动程序的句柄
C++ Create a handle to a NdisProt driver
我尝试写入 NdisProt 驱动程序并发送原始以太网数据包。我将一些 C++ 命令导入到我的 C# 程序中,以便我可以访问驱动程序。当我尝试打开驱动程序的句柄时,我总是得到一个无效的句柄。我已经用 "NdisProt" 作为路径试过了,但没有解决。你对我得到无效句柄有什么建议吗?
private bool OpenDriver()
{
// User the CreateFile API to open a handle to the file
this.m_iHandle = CreateFile("\\.\NdisProt,
GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// Check to see if we got a valid handle
if ((int)m_iHandle <= 0)
{
// If not, then return false and reset the handle to 0
this.m_iHandle = IntPtr.Zero;
return false;
}
如果您现在有任何其他在 C# 程序中发送原始以太网数据包的解决方案,请告诉我。
感谢您的帮助!
If you now any other solutions to send raw ethernet packets in a C#
program please let me know.
Socketclass呢?
构造函数:
public Socket (System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType),
其中 socketType 可以取下一个值:SocketType.Raw
If you now any other solutions to send raw ethernet packets in a C# program please let me know.
您可以从 Windows Winsock 库导入函数并在创建套接字时使用 SOCK_RAW 标志。
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
更新:我刚刚通过添加另一个清单解决了问题,因此应用程序 运行 作为管理员。
NDIS 驱动程序的解决方案仍然无效,因此我搜索了另一个解决方案。我找到了 SharpPcap 库。使用该库,我可以修改要发送的数据包,例如更改目的地-MAC-地址。
感谢您的回答!
我尝试写入 NdisProt 驱动程序并发送原始以太网数据包。我将一些 C++ 命令导入到我的 C# 程序中,以便我可以访问驱动程序。当我尝试打开驱动程序的句柄时,我总是得到一个无效的句柄。我已经用 "NdisProt" 作为路径试过了,但没有解决。你对我得到无效句柄有什么建议吗?
private bool OpenDriver()
{
// User the CreateFile API to open a handle to the file
this.m_iHandle = CreateFile("\\.\NdisProt,
GENERIC_WRITE | GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// Check to see if we got a valid handle
if ((int)m_iHandle <= 0)
{
// If not, then return false and reset the handle to 0
this.m_iHandle = IntPtr.Zero;
return false;
}
如果您现在有任何其他在 C# 程序中发送原始以太网数据包的解决方案,请告诉我。
感谢您的帮助!
If you now any other solutions to send raw ethernet packets in a C# program please let me know.
Socketclass呢?
构造函数:
public Socket (System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType),
其中 socketType 可以取下一个值:SocketType.Raw
If you now any other solutions to send raw ethernet packets in a C# program please let me know.
您可以从 Windows Winsock 库导入函数并在创建套接字时使用 SOCK_RAW 标志。
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
更新:我刚刚通过添加另一个清单解决了问题,因此应用程序 运行 作为管理员。
NDIS 驱动程序的解决方案仍然无效,因此我搜索了另一个解决方案。我找到了 SharpPcap 库。使用该库,我可以修改要发送的数据包,例如更改目的地-MAC-地址。
感谢您的回答!