发明内容
为了克服上述方案中的不足,本发明提供了一种识别搭建代理环境的方法。该方法通过判断端点设备数据包的特征,来识别端点设备发送和接收的数据包中的网络协议内容,通过识别是端点设备本身的数据包,还是通过端点设备的代理行为转发的数据包。用以判断端点设备本身是否搭建了代理环境,解决了非法设备通过私自搭建代理环境的端点设备,违规接入网络的问题。本发明可以广泛应用于各种网络结构。
端点设备没有搭建代理环境发送和接收数据包的特征:发送的数据包的源地址是端点设备本地网卡的地址,接收的数据包的目的地址是端点设备本地网卡的地址。
端点设备搭建了代理环境发送和接收数据包的特征:发送的数据包的源地址不是端点设备本地网卡的地址,接收的数据包的目的地址不是端点设备本地网卡的地址。
基于上述数据包的特征,通过端点设备安装NDIS中间层驱动,判断发送和接收的数据包的地址是否为本地网卡的地址,来识别端点设备本身是否搭建了代理环境,达到禁止代理数据包通讯的目的。
为了实现上述目的,本发明采用如下技术方案:
一种识别搭建代理环境的方法,包括如下步骤:
a. 安装运行NDIS中间层驱动,初始化NDIS中间层驱动:
编写NDIS中间层驱动,编辑NDIS中间层驱动所需的INF文件;
在NDIS中间层驱动的初始化函数中;
向NDIS中间层驱动注册其MiniPort驱动,NDIS中间层驱动通过调用NdisIMRegisterLayeredMiniport对NDIS_MINIPORT_CHARACTERISTICS相关函数进行注册,该调用导出Miniport相关函数,包含InitializeHandler、SendHandler、SendPacketsHandler、TransferDataHandler函数;
向NDIS中间层驱动注册其Protocol驱动,NDIS中间层驱动通过调用NdisRegisterProtocol对NDIS_PROTOCOL_CHARACTERISTICS相关函数进行注册,该调用导出Protocol相关函数,包含BindAdapterHandler、ReceiveHandler、ReceivePacketHandler、TransferDataCompleteHandler函数;
b. 在应用层获取本地所有网卡信息,并监听本地网卡信息发生的变化:
获取本地所有网卡信息,包含网卡的IP(IPV4或IPV6)地址、MAC地址;
b1. 监听本地网卡信息发生的变化,当本地网卡信息发生变化时,重新获取发生变化的网卡信息,继续执行步骤c;
c. 传递本地所有网卡信息并保存至NDIS中间层驱动内存:
将所述获取的本地所有网卡信息保存到NDIS中间层驱动内存中,用于判断NDIS中间层驱动接收或发送的数据包是否为与本地网卡交互的数据包;
d. 解析NDIS中间层驱动接收或发送数据包中的本机地址信息:
发送数据包,指通过包含SendHandler、SendPacketsHandler函数传递的数据包;
接收数据包,指通过包含ReceiveHandler、ReceivePacketHandler函数传递的数据包;
所述本机地址信息,包括接收数据包中解析出的目的地址信息或发送数据包中解析出的源地址信息;
通过NdisQueryPacket函数获取NDIS_PACKET对应的数据包长度;
通过NdisQueryBufferSafe和NdisGetNextBuffer获取NDIS_PACKET对应的数据包内容;
e. 判断数据包是否为与本地网络交互的数据包:
将NDIS中间层驱动接收数据包或发送数据包中解析出的本机地址信息与本地网卡信息进行比对;
e1. 如果数据包中的本机地址信息与本地网卡信息一致,则认为数据包是与本地网络交互的数据包,而非代理行为转发的数据包,继续传递数据包;
e2. 如果数据包中的本机地址信息与本地网卡信息不一致,则认为数据包是代理行为转发,则停止传递数据包。
本发明的有益效果是:通过端点设备安装NDIS中间层驱动,在NDIS中间层驱动中判断端点设备发送和接收数据包的地址,是否是端点设备本地网卡的地址,从而识别出端点设备本身是否搭建了代理环境,该方法判断用时短、识别速度快、通用性高,适用于各个操作系统,解决了非法设备通过端点设备私自搭建代理环境,违规接入网络的问题。
具体实施方式
下面将结合附图及实施例,对本发明做进一步详细描述。
本发明的一种识别搭建代理环境的方法,本实施例的应用环境如图2所示,包括外部计算机、内部计算机、交换机、服务器;所述外部计算机通过网卡W1连接内部计算机的网卡N1,所述内部计算机的网卡N2连接交换机的以太网端口J1,所述服务器通过网卡F1连接交换机的以太网端口J2;
在服务器的网卡F1上配置IPv4地址为192.168.0.10,配置IPv4子网掩码为255.255.255.0;
在内部计算机的网卡N2上配置IPv4地址为192.168.0.5,配置IPv4子网掩码为255.255.255.0;
在内部计算机上设置连接共享,打开内部计算机的“控制面板”,选择“网络和共享中心”,选择“更改适配器设置”,会看到内部计算机的两个网卡,右键单击网卡N2,选择“属性”菜单,在网卡N2的属性窗体里,点击“共享”页,开启“允许其他网络用户通过此计算机的Internet连接来连接”选项,家庭网络连接选项选择“网卡N1”,点属性窗体终端“确定”按钮,提示“Internet连接共享被启用时,您的LAN适配器将被设置成使用IP地址192.168.137.1。计算机可能会失去与网络上其他计算机的连接。如果这些计算机有静态IP地址,您应该将它们设置成自动获取IP地址。您确定要启用Internet连接共享吗”选择“是”按钮,查看内部计算机网卡N1的详细信息,内部计算机网卡N1的IPv4地址被设置为192.168.137.1,IPv4子网掩码被设置为255.255.255.0,内部计算机上设置连接共享完毕;
设置外部计算机上网卡W1的IP地址,打开外部计算机的“控制面板”,选择“网络和共享中心”,选择“更改适配器设置”,会看到外部计算机的网卡W1,右键单击网卡W1,选择“属性”菜单,在网卡W1的属性窗体里的“网络”页中双击选择“Internet 协议版本4(TCP/IPv4)”,弹出“Internet 协议版本4(TCP/IPv4)属性”页面,选择“使用下面的IP地址”,IP地址配置为192.168.137.22,子网掩码配置为255.255.255.0,默认网关配置为192.168.137.1;
以上环境搭建并配置完毕后,外部计算机访问服务器的数据包会从外部计算机的网卡W1发送给内部计算机网卡N1,经过内部计算机的代理机制后,又从内部计算机网卡N2发送给服务器F1,在内部计算机的网卡N1上会抓取到由外部计算机网卡W1(IP地址192.168.137.22)发送给服务器F1(IP地址192.168.0.10)的数据包,在内部计算机的网卡N2上会抓取到由本地网卡N2(IP地址192.168.0.5)发送给服务器F1(IP地址192.168.0.10)的数据包;因此,在内部计算机上阻止发送给网卡N1的IP地址为192.168.0.10的数据包,就不会产生从内部计算机网卡N2发送给服务器的数据包。
本实施例具体采用如下设备:
交换机:Huawei Quidway S3900;
服务器:航天联志 2000R;
内部计算机:Windows7 SP1 旗舰版 PC机;
外部计算机:Windows7 SP1 旗舰版 PC机。
实施例
本实施例,其中内部计算机安装了管理软件是合法计算机,搭建了代理环境,外部计算机没有安装管理软件是非法计算机;
本发明的一种识别搭建代理环境的方法,包含如下步骤:
a. 安装运行NDIS中间层驱动,初始化NDIS中间层驱动:
编写NDIS中间层驱动nmfmgr.sys,编辑NDIS中间层驱动所需的INF文件nmfmgr.inf,在内部计算机上安装驱动nmfmgr.sys;
在nmfmgr.sys驱动的初始化函数中,注册NDIS中间层驱动,初始化内部变量;
向NDIS中间层驱动注册其MiniPort驱动,定义NDIS_MINIPORT_CHARACTERISTICS的变量MChars,对MChars进行赋值,定义其回调函数,MajorNdisVersion为4,MinorNdisVersion为0,定义回调函数InitializeHandler、QueryInformationHandler、SetInformationHandler、TransferDataHandler、HaltHandler、ReturnPacketHandler、SendHandler、SendPacketsHandler,其他回调函数设置为NULL,通过调用NdisIMRegisterLayeredMiniport函数对MChars进行注册;
向NDIS中间层驱动注册其Protocol驱动,定义NDIS_PROTOCOL_CHARACTERISTICS的变量PChars,对PChars进行赋值,定义其回调函数,MajorNdisVersion为4,MinorNdisVersion为0,Name为nmfgmr,定义回调函数OpenAdapterCompleteHandler、CloseAdapterCompleteHandler、SendCompleteHandler、TransferDataCompleteHandler、ResetCompleteHandler、RequestCompleteHandler、ReceiveHandler、ReceiveCompleteHandler、StatusHandler、StatusCompleteHandler、BindAdapterHandler、UnbindAdapterHandler、UnloadHandler、ReceivePacketHandler、PnPEventHandler,其他回调函数设置为NULL,通过调用NdisRegisterProtocol对PChars相关函数进行注册;
b. 在应用层获取本地所有网卡信息,并监听本地网卡信息发生的变化:
在内部计算机上注册应用层程序nmfmgr.exe为系统服务,在nmfmgr.exe启动后获取内部计算机上本地所有网卡信息,获取到网卡N1的IP地址为192.168.137.1,获取到网卡N2的IP地址为192.168.0.5;
c. 传递本地所有网卡信息并保存到NDIS中间层驱动内存:
将变化的网卡信息,即内部计算机网卡N1的IP为192.168.137.1,网卡N2的IP为192.168.0.5,通知nmfmgr.sys,并保存到nmfmgr.sys的内存中;
d. 解析NDIS中间层驱动接收或发送数据包中的本机地址信息:
d1. 从外部计算机上运行ping命令,ping服务器,命令为ping 192.168.0.10;
ReceiveHandler的回调函数接收到数据请求,先通过NdisGetReceivedPacket获取NDIS_PACKET,再通过NdisQueryPacket函数获取NDIS_PACKET对应的数据包长度;
通过NdisQueryBufferSafe和NdisGetNextBuffer获取NDIS_PACKET对应的数据包内容;
解析出ICMP协议接收数据包,源IP地址为192.168.137.22,目的IP地址为192.168.0.10;
d2. 从内部计算机上运行ping命令,ping服务器,命令为ping 192.168.0.10;
SendPacketsHandler的回调函数接收到数据请求,通过NdisQueryPacket获取NDIS_PACKET对应的数据包长度;
通过NdisQueryBufferSafe和NdisGetNextBuffer获取NDIS_PACKET对应的数据包内容;
解析出ICMP协议发送数据包,源IP地址为192.168.0.5,目的IP地址为192.168.0.10;
e. 判断数据包是否为与本地网络交互的数据包:
e1. 解析出d2中的发送数据包的源地址为192.168.0.5,与内网计算机网卡N1的IP地址192.168.137.1、内网计算机网卡N2的IP地址192.168.0.5进行比对,结果与网卡N2的IP地址一致,则判定发送数据包不是代理程序转发,数据包继续传递;
e2. 解析出d1中的接收数据包的目的地址为192.168.0.10,与内网计算机网卡N1的IP地址192.168.137.1、内网计算机网卡N2的IP地址192.168.0.5进行比对,结果均不一致,则判定接收数据包为代理程序转发,数据包停止传递。
通过上述在端点设备安装NDIS中间层驱动,在NDIS中间层驱动中判断端点设备发送和接收数据包的地址,是否是端点设备本地网卡的地址,来识别端点设备本身是否搭建了代理环境,从而实现了控制非法设备通过端点设备私自搭建代理环境违规接入网络的事件发生,有效防止私自搭建代理环境给办公网络带来的危害,避免因此而造成的单位损失。