c语⾔实现⽹络嗅探程序代码,⼀个简易⽹络嗅探器的实现源代
码.doc
⼀个简易⽹络嗅探器的实现源代码
内部收益率摘要:本⽂介绍⼀个⽤C语⾔和⽹络数据包分析开发⼯具实现的简易⽹络Sniffer。 要害词:⽹络;数据包;Sniffer 引⾔ ⽬前,已经有不少的Sniff⼯具软件,如Windows环境下,最富盛名的⼯具是Netxray和Sniffer pro,⽤它们在 Windows环境下抓包来分析,⾮常⽅便。在UNIX环境下如Sniffit,Snoop,Tcpdump,Dsniff 等都是⽐较常见的。这⾥介绍⼀个⽤C语⾔和⽹络数据包和分析开发⼯具libpcap及winpcap实现的简易⽹络Sniffer。 ⽹络嗅探器程序框图 ⾸先给出流程如图1所⽰。 图1 流程图
阿拉伯音乐⽹络嗅探器程序实现 在c环境下编程,源码如下:
/* June 2nd,2002* Project for graduation qualification By Bby Team 19 */#include <stdio.h>#include <conio.h> //必须加路径,必须把头⽂件packet32.h包含进去#include "..\..\Include\packet32.h"#include "..\..\Include\ntddndis.h"#define
陈宝成事件
并行空间Max_Num_Adapter 10// Prototypes原形//发包void PrintPackets(LPPACKET lpPacket);//设备列表char 索爱mp4
AdapterList[Max_Num_Adapter][1024];// 主程序开始int main(){ //define a pointer to an ADAPTER strUCture设备指针 LPADAPTER lpAdapter = 0; //define a pointer to a PACKET structure包指针 LPPACKET lpPacket; int i; DWord dwErrorCode; DWORD dwVersion; DWORD dwWindowsMajorVersion; //Unicode strings (WinNT) WCHAR AdapterName[8192]; //⽹络适配器设备列表 WCHAR *temp,*temp1; //ASCII strings (Win9x) char AdapterNamea[8192]; //⽹络适配器设备列表 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是缓冲区的长度:
爱的拐点if (!(dwVersion >= 0&& dwWindowsMajorVersion >= 4)){ //是Windows NT // 不到设备列表
if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){ printf("Unable to retrieve the list of the
adapters!\n"); return -1; } // 到设备列表 temp=AdapterName; temp1=AdapterName; while ((*temp!='\0')(*(temp-1)!='\0')) {