调用winpcap驱动写arp多功能工具

一、winpcap驱动简介

winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。

(编者注:WinpCap开发包可以到以下两个网址下载: (1)http://winpcap.polito.it/ , (2)VC知识库工具栏目 )

开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:

1> 捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;

2> 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;

3> 在网络上发送原始的数据报;

4> 收集网络通信过程中的统计信息。

winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据报。也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报。因此,它不能用于QoS调度程序或个人防火墙。

目前,winpcap开发的主要对象是windows NT/2000/XP,这主要是因为在使用winpcap的用户中只有一小部分是仅使用windows 95/98/Me,并且M$也已经放弃了对win9x的开发。因此本文相关的程序T-ARP也是面向NT/2000/XP用户的。其实winpcap中的面向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。

本文讨论的是packet.dll所提供的各种函数,因为它们完全可以实现本文所希望的各项要求。但是如果你有其他特别的或更高级的要求,winpcap也提供了另一个动态连接库wpcap.dll。虽然wpcap.dll依靠于packet.dll,但是它却提供了一种更简单,直接,有力的方法来更好的利用编程环境。比如捕获一个数据报,创建一个数据报过滤装置或将监听到的数据报转存到某个文件等,wpcap.dll都会为你提供更加安全的实现方法。

二、Packet.dll相关数据结构及函数

本文的目的之一在于介绍如何利用winpcap驱动写ARP工具,因此有必要介绍一些相关的数据结构和函数,要不然看着一行行代码和函数,也许会有些不知所云。

首先介绍一些相关的数据结构:

1. typedef struct _ADAPTER ADAPTER //描述一个网络适配器;

2. typedef struct _PACKET PACKET //描述一组网络数据报的结构;

3. typedef struct NetType NetType //描述网络类型的数据结构;

4. typedef struct npf_if_addr npf_if_addr //描述一个网络适配器的ip地址;

5. struct bpf_hdr //数据报头部;

6. struct bpf_stat //当前捕获数据报的统计信息。

下面,将介绍T-ARP用到的各个函数,他们都是在packet.dll中定义的:

1> LPPACKET PacketAllocatePacket(void)

如果运行成功,返回一个_PACKET结构的指针,否则返回NULL。成功返回的结果将会传送到PacketReceivePacket()函数,接收来自驱动的网络数据报。

2> VOID PacketCloseAdapter(LPADAPTER lpAdapter)

关闭参数中提供的网络适配器,释放相关的ADAPTER结构。

3> VOID PacketFreePacket(LPPACKET lpPacket)

释放参数提供的_PACKET结构。

4> BOOLEAN PacketGetAdapterNames(LPSTR pStr,PULONG BufferSize)

返回可以得到的网络适配器列表及描述。

时间: 2024-09-23 22:03:26

调用winpcap驱动写arp多功能工具的相关文章

arcgis api for js共享干货系列之一自写算法实现地图量算工具

原文:arcgis api for js共享干货系列之一自写算法实现地图量算工具 众所周知,使用arcgis api for js实现地图的量算工具功能,无非是调用arcgisserver的Geometry服务(http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer)提供的Areas and Lengths以及Lengths,如图: 但是我这里提供另一种实现的思路,就是自己写算法来实现距离以及面积的

驱动人生硬件检测功能怎么使用

  驱动人生硬件检测功能使用方法来咯~有些朋友不知道驱动人生硬件检测怎么用,这个实用功能使用起来是很简单的,下面就来了解一下详细内容吧. 对于电脑小白来说,初次购买电脑或装机稍不留神很容易被商家蒙骗,对硬件的一些基本信息不懂自行获取.然而,对于现在市面上的很多硬件检测软件,功能单一,检测精确度不够,能全面又准确检测电脑硬件的软件少之又少,根据用户反馈,并结合了之前的版本,驱动人生在做好驱动安装.升级.修复和备份等"本职"功能以及各类软件安装更新外,针对硬件检测这一块特别改进了. 驱动人

driver-camera hal调用camera驱动的连接方式

问题描述 camera hal调用camera驱动的连接方式 Camera.java--->Camera.java(framework)--->android_hardware_camera.cpp(jni)---->Camera.cpp--->ICameraService ---(通过binder机制)---->CameraService.cpp---->CameraHardwareInterface.h->QualcommCamera->Qualcomm

编程-如何调用已安装软件的部分功能,来降低软件使用的难度?

问题描述 如何调用已安装软件的部分功能,来降低软件使用的难度? 最近参加学校的项目,前期只是想通过已有的视频制作软件来制作并生成源文件(非线性视频编辑工具生成)上交完成项目.但近期指导老师给出建议说,单纯的视频制作和编程无太大关联可能不符合项目初衷.于是现在想自己做出一个交互界面,使用户只需将音频.视频.文字等素材以及制作模板导入后自动输出成为视频.由于见识与能力有限不知道以什么方式才能实现这种功能调用(毫无头绪),希望大牛给予指点.谢谢 真心求助

Java怎么调用c/c++写的库

问题描述 Java怎么调用c/c++写的库 接口供应商给我们发来aa.h , aa.dll 文件 还有一个api文档.向各位大神求救,搞了一天都不懂,真心痛苦 解决方案 java通过jni可以调用C++写的dllhttp://www.cnblogs.com/xiehy/p/3365682.html 解决方案二: http://blog.csdn.net/cskerrydn/article/details/4719521 解决方案三: 你都有API文档了,就是你JNI的时候设置好对应的DLL名称,

PHP jQuery+Ajax结合写批量删除功能

为了美观,我还是引入了bootstrap的模态框,我引入的是自己的数据库 library中的一张表 名为:maninfo表 是一张个人信息表 表的加载我就不写了,比较简单,  大概写一下需要的按钮和html部分就可以了 <button type="button" class="btn btn-primary" id="plscdz" >批量删除</button> 全选: <input type="check

MathType手写面板菜单功能介绍

  MathType手写面板菜单功能介绍          首先,要在MathType的编辑窗口中打开输入面板,至于打开MathType的方法就不赘述了,可以从Word中打开,也可以直接从桌面或者资源管理器中打开,这都无所谓.在打开MathType后,直接在面板中点击"编辑"--"打开数学输入面板". 编辑MathType菜单中的"编辑"--"打开数学输入面板" 在点击"打开数学输入面板"以后,就会弹出手写

驱动人生&quot;随身Wifi&quot;功能

  出差.旅游没有wifi怎么办?驱动人生教你把笔记本无线网卡"化身"热点,轻轻松松一键连wifi,神马路由器.迷你路由等等硬件可以忽略了. 步骤1 打开驱动人生软件,在主界面上能够看到右上角的"Wif共享"功能图标,点击按钮打开功能设置,下面跟着编者一起来玩转驱动人生的wifi功能吧! 步骤2 打开wifi功能设置主界面后,可看到wifi名称.wifi密码填写框;驱动人生5的无线WIFI共享功能会自动为你获取WIFI名称和密码,你可以通过勾选"显示密码&

驱动人生温度检测功能在哪

  1.打开驱动人生,小伙伴们可以看到驱动人生主界面上有些许不同.主界面下方增加了"温度监控",打开温度监控就能看到自己电脑的温度情况了 2. 如小编检测自己电脑的温度,打开温度监控,驱动人生便会在任务栏显示电脑的温度检测情况.小编电脑的CPU已达83℃,这是电脑发出的一个危险信号,需要给它降温了.而其他的主板温度等都是健康的状态. CPU在工作时温度是25-75℃,闲时是40--50℃,较忙是50--65℃,全速工作时是65--78℃.一般正常温度是30-60℃,温度过低CPU不能启