/* June 2nd,2002 * Project for graduation qualification By Bby Team 19 */ #include <stdio.h> #include <conio.h> //必须加路径,必须把头文件packet32.h包含进去 #include "....Includepacket32.h" #include "....Includentddndis.h" #define Max_Num_Adapter 10 // Prototypes原形 //发包 void PrintPackets(LPPACKET lpPacket); //设备列表 char 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:%sn", PacketGetVersion()); printf("Adapters installed:n"); i=0; |
下面这段代码是用来在不同版本下得到 *** 适配器名: Win9x 和WinNT中的网卡名称是分别用ASCII和UNICODE实现的, 所以首先要得到本地操作系统 的版本号:
这里首先用到的Packet.dll函数是PacketGetAdapterNames(PTSTR pStr, PULONG BufferSize,通常它是与驱动程序通信并被调用的之一个函数, 它将返回的用户本地系统中安装 的 *** 适配器的名字放在 缓冲区pStr中;BufferSize是缓冲区的长度:
[1] [2] 下一页
然后,将所选择的设备打开,这里可以设置为“混杂”模式打开, 也可以是“直接”模式打开。 代码如下:
将网卡设置为“混杂”模式,代码如下: 这里用到函数PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter), 它在到来的包上设置了一个硬件过滤器,如操作成功,返回TRUE。 AdapterObject是过滤器所在的网卡 设备指针;过滤器的常量Filter定义在头文件ntddndis.h 中,包括有: ·NDIS-PACKET-TYPE-PROMISCUOUS:设置混杂模式,每个到来的包都会被网卡接受; ·NDIS-PACKET-TYPE-DIRECTED:只有直接到主机网卡的包才会被接受; ·NDIS-PACKET-TYPE-BROADCAST:只接受广播包; ·NDIS-PACKET-TYPE-MULTICAST:只接受到主机所在的组的多播包; ·NDIS-PACKET-TYPE-ALL-MULTICAS:接受每个多播的包。
然后在driver中置512K的缓冲: 这里用到函数PacketSetBuff(LPADAPTER AdapterObject,int dim), 它被用于设置AdapterObject指向的网卡的驱动程序的缓冲区,成功则返回TRUE。 Dim是新的缓冲区的大小, 当它被设定时,旧缓冲区中的数据将被丢弃,其中存储的包也会失去。 需要注意的地方:驱动器缓冲区的大小设置是否恰当,将影响截包进程的性能, 设置应能保证运行快且不会丢包。这里设置的是512000Byte。
PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout) 函数的功能是,设置与AdapterObject指定网卡绑定的读操作超时的值,timeout以毫秒为单位, 0表示没有超时, 当没有包到时,read就不返回。
|
//allocate and initialize a packet structure that will be used to //receive the packets. // 当定位失败时,提示错误: if((lpPacket = PacketAllocatePacket())==NULL){ printf("nError: failed to allocate the LPPACKET structure."); return (-1); } |
PacketInitPacket(lpPacket,(char*)buffer,256000); |
//main capture loop |
// 直到有键盘键入: while(!kbhit()) { // capture the packets 捕获包 // 捕获包失败时,提示错误: if(PacketReceivePacket(lpAdapter,lpPacket,TRUE)==FALSE){ printf("Error: PacketReceivePacket failed"); return (-1); } // 打印包中的数据,调用自定义函数PrintPackets() PrintPackets(lpPacket); } |
//print the capture statistics // 得到统计值 // 当无法从内核读取状态时,提示错误: if(PacketGetStats(lpAdapter,&stat)==FALSE){ printf("Warning: unable to get stats from the kernel!n"); } // 打印“XX包被截取;XX包被丢弃”: else printf("nn%d packets received.n%d Packets lost",stat.bs_recv,stat.bs_drop); |
// 释放空间 PacketFreePacket(lpPacket); 用函数PacketCloseAdapter(LPADAPTER lpAdapter)来释放ADAPTER结构lpAdapter,并关闭网卡指针: // close the adapter and exit // 关闭设备退出 PacketCloseAdapter(lpAdapter); return (0); } // 主程序结束 |
什么叫Truecrypt? TrueCrypt在2017年五月淘汰以前是一款出色的开源系统磁盘加密系统软件。客户能够 根据键入客户建立的登陆密码语句来对其全部系统文件开展数据加密。它还具备容许客户掩...
Nmap出示了四项基本要素(服务器发觉、端口扫描器、服务项目与版本号探测、OS探测)及丰富多彩的脚本制作库。Nmap即能运用于简易的信息网络扫描仪,也可以用在高級、繁杂、特殊的自然环境中:比如扫描仪...
大家第一季的网络黑客渗入基础教程主要解读了端口扫描器,找寻端口号系统漏洞,并运用了2020年才出的CVE-2017-7269系统漏洞开展了一次实战演练检测。 大家第二季而言最时兴的We...
道,可道,非常道;名,可名,十分名。不清楚有几个听过?今日给大伙儿聊一聊那些日子十分火的黑客软件。 一、中国菜刀 中国菜刀是应用十分普遍的一款Webshell可视化工具,技术专业的网...
特别友情提示:最近路由器密码泄漏事件非常多,公布一组各类路由器默认账号密码,你是否中招?亲赶紧改密码吧!! 品牌:ViKing 用户名:adsl 密码:adsl1234 品牌:实达默认IP:...
什么叫Scapy? Scapy是一种十分火爆且有效的数据文件解决专用工具,能够 根据实际操作数据文件来工作中。Scapy能够 在普遍的协议书范畴内编解码数据文件,将其发送至网上,捕捉,关系推送恳求和...