Packet32包中的函数说明:

No.2. PacketOpenAdapter (打开网卡)

根据传入的设备名,打开它。

LPADAPTER PacketOpenAdapter( 
LPTSTR AdapterName 
);

Parameters: 
AdapterName: [in] 要打开的设备的名字。 
Return Values: 
如果打开成功,返回一个指针,它指向一个正确初始化了的ADAPTER Object。否则,返回NULL。

Usage: 
[C/C++] 
C/C++ Usage Sample 
LPADAPTER adapter; 
adapter = PacketOpenAdapter(pStr+rewind);

Remarks: 
  这个函数尝试加载并启动packet driver,这样,管理driver对于应用程序来说就十分的透明了。 
  Windows9X版本的NPF driver用的是ASCII编码,而WindowsNTx用的是Unicode编码。所以提请注意这个输入参数AdapterName,在Windows9X下,必须是正确的编码格式!在WindowsNTx下,这个函数能够监测到ASCII编码,并在送给driver 之前先转换为Unicode编码。 这个函数的操作大致为:

  首先调用OpenSCManager,以Administrators的身份连接Service Control Manager,权限是SC_MANAGER_ALL_ACCESS。这也说明,使用Packet.dll你必须是本机管理员组成员。 
  如果可以连接SCM,检查NPF注册表项是否存在。 
  如果存在,说明driver已经安装了,就不需要我们调用PacketInstallDriver了。 NPF注册表项:

HKEY_LOCAL_MACHINE/ 
  SYSTEM/ 
   CurrentControlSet/ 
    Services/ 
     NPF

  如果不存在此键,则调用PacketInstallDriver安装当前路径下的 driver:npf.sys。 
  如果这次PacketInstallDriver安装也失败了,就到系统路径下查找并安装这个驱动。 
  如果以上操作都成功的话,调用OpenService打开NPF服务。如果服务存在的话,就调用QueryServiceStatus查询当前服务状态。这就是我们的driver的状态。 
  如果这个服务没有启动,就调用StartService启动之。

  确认服务启动之后,检查AdapterName是否是ASCII编码,是的话,就转换为Unicode。

由于一般输入参数AdapterNAme类似于这样:

/Device/NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}

所以,我们会重新组织一个设备名SymbolicLink: “Packet_”的前缀 + AdapterName[8] 也就是: //./Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}

先尝试着CreateFile函数能不能马上用这个SymbolicLink名字打开设备。 
如果可以,就调用PacketSetReadEvt函数打开一个open事件等。 
否则,调用DefineDosDevice定义一个新的MS-DOS设备: 
名字类似于” Packet_NPF_{A67CEC3B-C099-47E0-B096-480B01FAF348}”。 
通过这个DOS设备名,我们的应用层程序才能向驱动发出请求。接着,调用CreateFile函数来建立并打开一个联系设备的文件句柄(GENERIC_WRITE| GENERIC_READ,OPEN_EXISTING)。之后,调用PacketSetReadEvt函数打开一个open事件等。

监听以太网(二) Packet32包说明相关推荐

  1. 监听以太网(一) Packet32包说明

    简述  监听网络上的所有数据,是一个比较有趣的题目.流传比较广的一些监听程序,它们都使用了一个更加著名的开发包Packet32.比如,ntsniff.EthernetSpy.ntpacket等,还有赫 ...

  2. 监听以太网(四) Packet32函数SDK

    Packet32包中的函数说明: No.3. PacketSetHwFilter (设置过滤器) 设置一个hardware filter.比如,Filter参数传递NDIS_PACKET_TYPE_P ...

  3. 监听以太网(三) Packet32数据结构说明

    Packet32包中的数据结构: 第一个重要的数据结构:_ADAPTER(关于Network Adapter的) typedef struct _ADAPTER  {  // 一个打开的NPF dri ...

  4. linux 监听数据包,linux下网络监听与发送数据包的方法(即libpcap、libnet两种类库的使用方法)...

    linux下可以用libpcap函数库实现监听数据包,使用libnet 函数库发送数据包 安装: 在命令行下apt-get install 就可以了 libpcap的使用: /*author hjj ...

  5. linux下网络监听与发送数据包的方法(即libpcap、libnet两种类库的使用方法)

    linux下可以用libpcap函数库实现监听数据包,使用libnet 函数库发送数据包 安装: 在命令行下apt-get install 就可以了 libpcap的使用: /*author hjjd ...

  6. oracle——监听(二、sqlplus连接数据库)

    一.引言 这里主要是讲的cmd中直接连接数据库,至于直接用客户端中的sqlplus得需要配置tnsnames文件. 二.连接数据库操作   SQLPlus在连接时通常有四种方式     1.操作系统认 ...

  7. Linphone callState 电话状态的监听状态(二)

    Linphone callState 电话状态的监听状态 callState是一个观察者模式 接着上一篇的说, 这篇主要是涉及到linphone中c层的注册监听机制. 主要是代码追踪和代码过程. li ...

  8. 安卓使用无障碍服务监听微信和QQ的收款信息

    导读: 资深的安卓程序员想必都了解,安卓的通知监听服务(NotificationListenerService)可以监听通知栏的信息,从通知栏信息里获取到我们想要的收款信息(比如收款类型.收款金额). ...

  9. Linux7/Redhat7/Centos7 安装Oracle 12C_监听配置及DBCA安装数据库_05

    文章目录 一.监听配置 二.创建数据库 一.监听配置 # 切换到oracle用户 su - oracle# 启动监听图形化页面 netca 二.创建数据库 dbca

最新文章

  1. kotlin定义变量
  2. JDK和JRE的区别-zz
  3. 零基础学前端开发技术之第七章 浮动塌陷
  4. struts2 中文件的位置问题
  5. java fast math,Java FastMath.signum方法代码示例
  6. 谈谈软件工程设计的艺术
  7. python中有数组吗_python里面有数组吗
  8. java中static和this_理解Java中this和static的含义
  9. 线性回归(单神经元,多神经元)和多层感知机(多个神经元)对比
  10. sync是同步还是非同步_高速AD项目学习笔记——实现sync同步的经验
  11. 很多人问中国网络安全行业怎么样?这篇文看完让你彻底了解中国网络安全行业的全景
  12. Python Traceback (most recent call last)【StopIteration】
  13. 如何挑选高质量的数据中心?
  14. h61 nvme硬盘_切割SN520amp;amp;对比主流NVME2242amp;amp;无硬盘盒迁移系统
  15. 人工智能越来越“能”
  16. 英语修辞手法( rhetorical devices)
  17. 如何离线安装所有依赖包
  18. linux 上端口占用的程序
  19. 手机智能控制汽车系统作用详解
  20. iOS12网页视频播放点击全屏按钮会导致闪退

热门文章

  1. 数据库-笛卡尔积-内连接
  2. 字符串的比较相关方法
  3. 获取商品列表(Feign)
  4. spring的aop配置-配置将通知织入目标对象
  5. Base64编码 - Java加密与安全
  6. python是什么专业的研究生好考_明年考研,我的专业是电子信息工程,请问考什么学科研究生最合适?...
  7. 利用python进行数据分析第二版pdf百度云_参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码...
  8. 200728学习日报二维数组和字符数组
  9. Asp.net MVC Filter解析和实例说明
  10. java---随机小结