在公司的局域网中,总是存在着有些不老实的用户想通修改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);