您的位置:首页 > 理论基础 > 计算机网络

网络监听编程指南(使用WinPCap)

2009-03-19 10:36 232 查看
相信很多人对网络监听很感兴趣。不论开发者是技术粉丝还是不轨分子,网络监听作为一个技术方向在许多领域都有极大用途。
dmax22cn闲作此简文,目的是帮助同学们快速入门,高手就不用浪费宝贵时间了。
我们知道:在WIN或UNIX中一般使用socket套结字来实现软件的网络功能。
不过对于较低层次的开发,例如网络监听,我们是不会满足socker这样的高层接口的,因为它在协议栈中的层次很高,封装了很多东东,使开发者看不清庐山真面目。
那么,如何才能更接近的观察数据链路层的数据桢呢?要知道:如果能看到这层封装的数据,那么上层的就尽收眼底了。 当然如果你钟情于物理层窃听,嘿嘿,那就不关软件的事咯。
数据链路层,也就是TCP/IP模型的MAC层。看到MAC大家应该熟悉了吧。我们的网卡都有MAC地址的啊。网卡有数据链路控制器,支持对物理层的自动成桢和排序、纠错,因此访问MAC层就是与网卡的对话,也算是软件可访问的极低层次了。
在WINDOWS中,WINPCAP提供了API,使我们能绕过socket而直接访问数据链路(MAC)层。
最简易最一般的流程如下:
PacketGetAdapterNames:得到一个char *
=〉解析char *获得有效网卡名:char *内存中返回多个网卡名,用'/0'分隔,结尾是2个连续的'/0'
=〉PacketOpenAdapter:返回网卡句柄
=〉PacketSetHwFilter:第二个参数为NDIS_PACKET_TYPE_PROMISCUOUS(网卡设为"混杂"方式),如果此宏名编译不过就直接写0x0002
=〉PacketSetBuff:设定内核缓存(一定要设)
=〉PacketSetReadTimeout:设接收一次的等待时间
=〉PacketAllocatePacket:初始化一个包
=〉PacketInitPacket:将我们程序中分配的内存指定给初始化的包
=〉PacketReceivePacket:一般用while中滴用该函数实现监听循环
=〉PacketFreePacket(pck);
=〉PacketCloseAdapter(adapter);
可以在VC中写个main()来做上面的流程。
编译时,工程要在属性中增加LINKlib,.h,都在WINPCAP提供的开发包中,去它的网站免费下吧。
监听之后该干吗?当然是解析(decode),这是另外一档子事了,各位要先认真学习下各层协议才能去decode。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐