• 2009-01-01禁止XP用户修改IP地址(0801更新中) - [技术资料]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://ahaze.blogbus.com/logs/25908063.html

        在公司的局域网中,总是存在着有些不老实的用户想通修改IP地址上网,其实这种行为也是徒劳无获的,因为公司的上网代理防火墙是通过网卡的MAC地址进行绑定过,所以就算修改为可以上网的IP地址,MAC地址验证也无法通过,但这种行为给我们的工作造成很多不便,和普通PC造成IP地址冲突还好,如果是和应用服务器造成IP地址冲突的话后果不堪设想,所以一直想做一个禁止XP用户修改IP地址的东东,看过不少资料,但还没有一个很完美的办法,在这里边写边做,希望能从整理的资料中找到一些方法.

        首先,在网上资料上最常见的禁止XP用户修改IP地址的办法有四种,在这里我分别讲一下自己的理解.

    方法一:修改注册表法
      注册表在Windows操作系统中起着很关键的作用,利用注册表的键值,可以屏蔽“Internet协议(TCP/IP)属性”对话框。
      1.单击“开始→“运行”,在“运行”对话框的“打开”下拉文本框中输入命令“Regedit”(仅双引号内文字)后,单击“确定”按钮。
      2.在“注册表编辑器”窗口中,依次展开左侧子窗口中的“HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Network Connections分支;
      3.在右侧子窗口的空白处单击鼠标右键,选择“新建→DWORD值”菜单(或者直接单击菜单栏中的“编辑→新建→DWORD值”),新建一个DWORD键值。
      4.将新建的DWORD键值命名为“NC_LanChangeProperties”,并赋值为“0”,
      5.新建的DWORD键值命名为“NC_EnableAdminProhibits”,并赋值为“1”,关闭“注册表编辑器”窗口。

        这个方法很不错,简单实用,貌似用程序很方便实现,可惜的是,经过测试,只能在Win32系统中有效,所以,不能满足我的需求.pass

    方法二:停止服务法
      服务是Windows 2000/XP/2003操作系统中新增的功能,与“本地连接属性”对话框直接关联的服务是“Network Connections”。因此只要停止该服务的运行,就不能打开“本地连接属性”对话框,也就无法修改IP地址了。
      1.单击“开始→运行”菜单,在“打开”下拉文本框中输入命令“services.msc”(仅双引号内文字)后,单击“确定”按钮。或者,单击“开始→控制面板”,在“控制面板”窗口中双击“管理工具”图标,再双击“服务”图标。
      2.在“服务”窗口右侧子窗口中,双击名为“Network Connections”的服务,单击“服务状态”处的“停止”按钮停止该服务的运行,再将“启动类型”处的值设为“已禁用”选项,最后单击“确定”按钮即可。
      从此以后,虽然在“网络连接”窗口中仍可看见“本地连接”图标,但单击右键快捷菜单中的“属性”后,会提示“出现意外错误”,无法打开“本地连接属性”对话框,这样就无法修改IP地址了。

        关闭网络连接服务,这个方法不像是禁止修改IP,更像是禁止用户上网,太过暴力,完全是不择手段,会造成更多的工作上的不便.pass

    方法三:注销动态链接库文件法
      在Windows 2000/XP/2003 Server操作系统中,有三个动态链接库文件(Netcfgx.dll、Netshell.dll和Netman.dll)与网络功能有关。只要将这三个文件注销,就能屏蔽“网络连接”窗口,也就能禁止通过“本地连接属性”对话框修改IP地址。
      1.单击“开始→运行”菜单,在“打开”下拉文本框中输入命令“regsvr32 Netcfgx.dll /u”(仅双引号内文字)后,单击“确定”。如果执行成功,将显示提示信息。
      注意:命令中的regsvr32与Netcfgx.dll之间,Netcfgx.dll与/u之间,均需用空格间隔开。
      2.将Netcfgx.dll换成Netshell. dll和Netman.dll重复执行即可。
      以后,无论是单击“网上邻居”右键菜单中的“属性”,还是双击“控制面板”窗口中的“网络连接”图标(实际上图标也更改了),都无法打开“网络连接”窗口,这样就无法通过“本地连接属性”对话框来修改IP地址了。
      如果要恢复修改IP地址的功能,只要将上述命令中的“/u”参数删除,然后重新执行一遍就行了。

           这个方法是比较推荐的,但不适合我们公司的工作须要,原因是这样不方便查看网络连接是否正常。pass

    方法四:修改组策略法
      在Windows 2000/XP/2003 Server操作系统中“系统策略管理器”工具是默认的安装组件,用户只需运行命令“gpedit.msc”就可打开该工具,但名称更改为“组策略”(Windows 2000/XP系统)或“组策略编辑器”(Windows 2003 Server系统)。
      1.单击“开始→运行”,在“打开”下拉文本框中输入命令“gpedit.msc”(仅双引号内文字)后,单击“确定”按钮。
      2.在“组策略”或“组策略编辑器”窗口中,依次展开左侧子窗口中的“本地计算机策略→用户配置→管理模板→网络→网络连接”项目。
      3.双击右侧子窗口中的“禁止访问LAN连接组件的属性”选项,再单击“禁止访问LAN连接组件属性”对话框中的“已启用”单选按钮,单击“确定”按钮。
      4.最后,关闭“组策略”或“组策略编辑器”窗口即可。
      以后,当普通用户打开“本地连接属性”对话框,选中“此连接使用下列项目”列表框中的“Internet协议(TCP/IP)”项目时,会发现其下的“属性”按钮已经变为灰色了,不能打开“Internet协议(TCP/IP)属性”对话框了,也就无法更改IP地址了。

        此方法对以管理员身份登录系统的用户而言可能会无效,此时就还需启用“为管理员启用网络连接设置”选项,才能禁用“属性”按钮,我测试了一下这个方法,不是很理想,可能还有些须要改进的地方,下面看一下另一个软件的效果。

      

       我在网上找到了一个软件,它的办法就很不错,完全符合我的要求,但是为什么不用呢?毕竟想自己研究做一个出来,在Win32系统中,它使用的修改注册表方法来禁止修改IP,在Win2000/XP平台下使用的方法我至今还不明白,下面是一些关于此软件的运行结果说明:

    1、打开软件,操作界面很简单,而且禁止修改IP后不须要重启电脑。

    2、这个是禁止修改IP后的结果,可以看到,在本地连接中属性这一项已经变成灰色,按钮不可用,这个既实现了禁止修改IP的功能,又能最低的减少用户操作中的不便,可以说这个办法相当完美了。

    3、让我费而不解的是,这个软件究竟是使用什么方法来实现的呢,看他的执行结果,与网上的第四种方法比较相似,但打开组策略控制台就知道,它用的更高明的方法来实现,有待继续研究。

    2008-07-30下午15:04更新

        哈哈,只要功夫深,铁棒也能磨成针。苍天果然不负我这样的软件研究人。(RAP两句)终于有了突破,我用注册表监控到一些这个软件的动作,看起来貌似很简单,先放上来,有时间再研究。

    13 15:02:16 JinzhiIPxiugai_:1560 CreateKey HKCU\Software\Policies\Microsoft\Windows\Network Connections SUCCESS Access: 0xF003F  


    14 15:02:16 JinzhiIPxiugai_:1560 SetValue HKCU\Software\Policies\Microsoft\Windows\Network Connections\NC_EnableAdminProhibits SUCCESS 0x1 


    15 15:02:16 JinzhiIPxiugai_:1560 CloseKey HKCU\Software\Policies\Microsoft\Windows\Network Connections SUCCESS  


    16 15:02:16 JinzhiIPxiugai_:1560 CreateKey HKCU\Software\Policies\Microsoft\Windows\Network Connections SUCCESS Access: 0xF003F  


    17 15:02:16 JinzhiIPxiugai_:1560 SetValue HKCU\Software\Policies\Microsoft\Windows\Network Connections\NC_LanChangeProperties SUCCESS 0x0 


    18 15:02:16 JinzhiIPxiugai_:1560 CloseKey HKCU\Software\Policies\Microsoft\Windows\Network Connections SUCCESS  

    2008-08-01上午09:48更新

        经过测试后发现,其原理是通过注册表,修改Windows组策略来实现对用户访问的控制,在网上还找到一些其它内容,在这里贴一下.

    使系统管理员也受限制

    请注意,这个是总开关,不使用它,是没法限制管理员的

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_EnableAdminProhibits"=dword:00000001


    禁止TCP协议高级选项

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_AllowAdvancedTCPIPConfig"=dword:00000000


    禁止安装和卸载网络协议

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_AddRemoveComponents"=dword:00000000


    禁止查看网络状态

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_Statistics"=dword:00000000


    禁止访问网络议属性

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_LanChangeProperties"=dword:00000000


    禁止启用和停止网络协议

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_ChangeBindState"=dword:00000000


    禁止使用网络属性

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_LanProperties"=dword:00000000


    禁止停用网卡

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_LanConnect"=dword:00000000


    禁止重命名网卡

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Network Connections]
    "NC_RenameConnection"=dword:00000000

     

    接下来应该是程序部分了,Borland C++Builder编写.

     

    TRegistry *Registry = new TRegistry; //分配注册表对象
    try
      {
      Registry->RootKey=HKEY_CURRENT_USER;//设置根键
      }
    catch(...)
         {
         MessageDlg("注册表项目丢失",mtError,TMsgDlgButtons()<<mbOK, 0);
         delete Registry;
         Registry=NULL;
         }
    if(Registry->OpenKey("Software\\Policies\\Microsoft\\Windows",true))//设置主键
       {
       if(Registry->OpenKey("Network Connections",true))//存在则打开这个Key
          {
          Registry->WriteInteger("NC_EnableAdminProhibits",1);
          Registry->WriteInteger("NC_LanChangeProperties",0);
          }
       }
      delete Registry;
      Registry=NULL;
      Form2->Edit1->Text="此计算机修改IP受限";
    WinExec("explorer ::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", SW_SHOWNORMAL);

    2008-08-01 09:48:03


    历史上的今天:


    收藏到:Del.icio.us




    评论

  • 佩服佩服,博主研究的太细致了。