⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rawethernet.cpp

📁 这是一个关于以太网络适配器驱动设计的例子。
💻 CPP
字号:
//////////////////////////////////////////////////////////
// RawEthernet.cpp文件


#include <windows.h>
#include <winioctl.h>
#include <ntddndis.h>
#include <stdio.h>
#include "protoutils.h"

int main()
{
	// 启动服务
	if(!ProtoStartService())
	{
		printf(" ProtoStartService() failed %d \n", ::GetLastError());
		return -1;
	}
	// 打开控制设备对象
	HANDLE hControlDevice = ProtoOpenControlDevice();
	if(hControlDevice == INVALID_HANDLE_VALUE)
	{
		printf(" ProtoOpenControlDevice() failed() %d \n", ::GetLastError());
		ProtoStopService();
		return -1;
	}
	// 枚举绑定的下层适配器
	CPROTOAdapters adapters;
	if(!adapters.EnumAdapters(hControlDevice))
	{
		printf(" Enume adapter failed \n"); 
		ProtoStopService();
		return -1;
	}
	
	// 创建一个原始封包(至少应为16个字节长)
	BYTE bytes[] =  {0xff,0xff,0xff,0xff,0xff,0xff,  // 目的MAC地址
					 0x00,0x02,0x3e,0x4c,0x49,0xaa,  // 源MAC地址
					 0x08,0x00,					     // 协议
					 0x01,0x02,0x03,0x04,0x05,0x06}; // 通常数据
	// 打印出每个下层适配器的信息,发送数据
	for(int i=0; i<adapters.m_nAdapters; i++)
	{
		char sz[256];
		wsprintf(sz, "\n\n Adapter:	%ws \n Symbolic Link: %ws \n\n ", 
								adapters.m_pwszAdapterName[i], adapters.m_pwszSymbolicLink[i]);
		printf(sz);

		CAdapter adapter;
		adapter.OpenAdapter(adapters.m_pwszSymbolicLink[i]);
		// 在此适配器上发送原始数据
		int nSend = adapter.SendData(bytes, sizeof(bytes));
		if(nSend > 0)
			printf(" Packet sent: %d bytes \n", nSend);
		else
			printf(" Packet sent failed \n");
	}

	::CloseHandle(hControlDevice);
	ProtoStopService();
	return 0;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -