这里介绍一个用C语言和网络数据包和分析开发工具libpcap及winpcap实现的简易网络Sniffer。
2网络嗅探器程序实现
在c环境下编程,源码如下:
#include
#include
//必须加路径,必须把头文件packet32.h包含进去
#include "../../Include/packet32.h"
#include "../../Include/ntddndis.h"
#define Max_Num_Adapter 10
// Prototypes原形
void PrintPackets(LPPACKET lpPacket); //发包
char AdapterList[Max_Num_Adapter][1024]; //设备列表
// 主程序开始
int main()
{
LPADAPTER lpAdapter = 0; //define a pointer to an ADAPTER structure设备指针
LPPACKET lpPacket; //define a pointer to a PACKET structure包指针
int i;
DWORD dwErrorCode;
DWORD dwVersion;
DWORD dwWindowsMajorVersion;
WCHAR AdapterName[8192]; //网络适配器设备列表 //Unicode strings (WinNT)
WCHAR *temp,*temp1;
char AdapterNamea[8192]; //网络适配器设备列表 //ASCII strings (Win9x)
char *tempa,*temp1a;
int AdapterNum=0,Open;
ULONG AdapterLength;
char buffer[256000]; // 容纳来自驱动器的数据的缓冲区
struct bpf_stat stat;
// 获得本机网卡名
AdapterLength=4096;
printf("Packet.dll test application. Library version:%s/n", PacketGetVersion());
printf("Adapters installed:/n");
i=0;
下面这段代码是用来在不同版本下得到网络适配器名:
Win9x 和WinNT中的网卡名称是分别用ASCII和UNICODE实现的,所以首先要得到本地操作系统的版本号.:
dwVersion=GetVersion();
dwWindowsMajorVersion= (DWORD)(LOBYTE(LOWORD(dwVersion)));
这里首先用到的Packet.dll函数是PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize,通常它是与驱动程序通信并被调用的第一个函数,它将返回的用户本地系统中安装的网络适配器的名字放在缓冲区pStr中;BufferSize是缓冲区的长度:
C语言实现网络嗅探器
最新推荐文章于 2024-04-30 07:45:00 发布