高分求解:如何通过编程(Delphi)禁止局域网中某些计算机上互联网? ( 积分: 300 )

  • 主题发起人 主题发起人 jilimi
  • 开始时间 开始时间
J

jilimi

Unregistered / Unconfirmed
GUEST, unregistred user!
有一台服务器,使用ADSL或专线的方式接入Internet。另外在局域网中,其它机器都是通过把网关设置成为这台服务器,实现上网的。
我现在的问题是:需要编写这样一个软件,能够控制局域网中任意一台机器,在有的时候能够上网,在有的时候不能够上网(但局域网必须要能够正常访问)。
现在在网络中的每台机器上已经运行了我的一个客户端程序,我想只要通过我的管理端向客户端发送一个断开/连接网络的Socket消息,客户端就调用相应的函数即可。但是这个函数应该怎么写,我始终没找到方法,还请各位高手帮忙!

我现在想到的有二种方法,但都不知道应该如何编程实现,而且是否行得通也不知道:
1.在我的程序中修改网关设置。因为客户端是通过网关上网的,因此只要我能够在程序中动态的设置网关,或删除网关就可以实现网络的断开/连接了。由于我可以在Windows的配置中禁止用户修改IP设置,因此不用担心别人手工把网关加回来,只要程序能够修改,并且不用重启机器就可实现即可达到我的要求。
2.在客户端开启一个Socket,堵住80端口,21端口等,不知是否可行

除此之外,我暂时还没想到其它更好的方法了!在网上查了很多资料,也没有找到理想的解决方法。有朋友说禁用网卡,这根本行不通!如果把网卡给禁用了,它还怎么收到消息进行解禁呢?并且这样的话,局域网也访问不了了,因此不可行!
其实天网防火墙就有类似的功能,只要点一下,就可以断开/连接网络了,不知有没有朋友知道它是如何实现的?

急盼回答!
 
有一台服务器,使用ADSL或专线的方式接入Internet。另外在局域网中,其它机器都是通过把网关设置成为这台服务器,实现上网的。
我现在的问题是:需要编写这样一个软件,能够控制局域网中任意一台机器,在有的时候能够上网,在有的时候不能够上网(但局域网必须要能够正常访问)。
现在在网络中的每台机器上已经运行了我的一个客户端程序,我想只要通过我的管理端向客户端发送一个断开/连接网络的Socket消息,客户端就调用相应的函数即可。但是这个函数应该怎么写,我始终没找到方法,还请各位高手帮忙!

我现在想到的有二种方法,但都不知道应该如何编程实现,而且是否行得通也不知道:
1.在我的程序中修改网关设置。因为客户端是通过网关上网的,因此只要我能够在程序中动态的设置网关,或删除网关就可以实现网络的断开/连接了。由于我可以在Windows的配置中禁止用户修改IP设置,因此不用担心别人手工把网关加回来,只要程序能够修改,并且不用重启机器就可实现即可达到我的要求。
2.在客户端开启一个Socket,堵住80端口,21端口等,不知是否可行

除此之外,我暂时还没想到其它更好的方法了!在网上查了很多资料,也没有找到理想的解决方法。有朋友说禁用网卡,这根本行不通!如果把网卡给禁用了,它还怎么收到消息进行解禁呢?并且这样的话,局域网也访问不了了,因此不可行!
其实天网防火墙就有类似的功能,只要点一下,就可以断开/连接网络了,不知有没有朋友知道它是如何实现的?

急盼回答!
 
-->在网络中的每台机器上已经运行了我的一个客户端程序
这样很好处理,你的第一条方法是可行的,我曾经在实践系统中使用过,
只要使用route 命令控制就可以了,子命令add开通路由,delete删除路由,
特意找了下以前的程序的关键代码,给你参考:
Function ConnectNet(ActConnect:boolean):boolean;
var
mStrApp,mStrParam:String;
begin
if ActConnect then
mStrParam:='/C route add 0.0.0.0 mask 0.0.0.0 '+mctServerIP //192.168.100.99'
else
mStrParam:='/C route delete 0.0.0.0';
mStrApp:='COMMAND.COM';
ShellExecute(0,'open',PChar(mStrApp),PChar(mStrParam),NIL,SW_HIDE);

Result:=True;
end;
 
[:D],easy,可以给你提供一个驱动
 
爱元元的哥哥 能给我一个吗 还有2000下能用吗 谢谢
 
可以用,对于sygate,wingate都有效,这是我以前做的项目,早就商品化了,经过市场考验的,呵呵
 
这几天我都上不了大富翁,都急死我了!
stlont的方法我试过了,暂时可以这样用。不过要是用户他自己会用Route命令,还是可以自己把网关加回来的,因此这种方法只能对付一般的用户,还不是最根本的解决方法。

爱元元的哥哥,你好,可以把那个驱动给我吗?如果同时能够告诉我你的实现原理就更好了,非常感谢!mail: support@mildragon.com
 
不好意思哦,这个驱动在xp sp2下出现蓝屏,我还在调试,好了再发给你
 
非常感谢!
 
如果可以的话。能否给我发一份。。谢谢了

on2008@gmail.com
 
给我一份吧
henry@apexmfg.com.cn
 
肯定需要写驱动程序的,你可以查查NDIS-HOOK技术,在这个基础上面实现你想要的功能就比较容易了!爱元元的哥哥应该也是使用的这种方式了!
 
使用双网卡可以实现,我们的项目就是这样做的。简单介绍如下。
环境:
外网 - internet网络
内网 - 公安专网
要求:internet网络上的某些有权限的机子可以访问公安专网

实现如下:在外网和内网间设立一个隔离服务器(这相当与你的机子),在隔离服务器上安装两块网卡,一块对内(即内网中机子的网关设置成这块网卡的IP),一块对外(即外网中机子的网关设置成这块网卡的IP)。两块网卡的通讯由你的程序来控制,是不是很简单。现在我结合你的实际情况具体说一下:

1)在你的机子上按照两块网卡,将局域网内机子的网关设置为其中一块网卡的IP
另一块网卡的设置按照访问Internet的要求设置
2)在你的机子上做一个小巧且效率高的网络程序,它的目的有两个,一是过虑从局域网内部分IP地址的机子,二是对可访问Internet的机子需要将它们的数据与Internent交互。

优点:集中管理,控制灵活
缺点:效率确实是一个问题(由于我们的项目只是重要数据的交互,故可行),该程序部分代码可能需要用c或汇编来写。

 
to 爱元元的哥哥
能不能发一份给我?我的邮箱是yy#e-3.cn(#换成@)
 
IESniffer
采用这个控件可以监视IE动作,并作出反应.
比如发现网址中有非法的关键字时,可以让IE停止,半闭,返回等.
 
大哥,写个程序是否太麻烦了,不就用Wingate/Sygate/WinRoute不都可以吗,或一个硬件
路由器也可,当然,控制时没自编的程序方便。而且,控制其上网应在网关上可靠些。
 
后退
顶部