`
wjg105jo
  • 浏览: 13038 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

[论文]企业网中代理服务器的检测程序开发

阅读更多

[论文]企业网中代理服务器的检测程序开发
2011年08月02日
  中国石油学会将于今年9月在上海召开一次“2011年中国石油石化企业信息化技术交流会”,本文为向本次会议的投稿文章。
  企业网中代理服务器的检测程序开发
  摘要:在企业网中为了限制非授权用户访问企业网之外的资源,一般在代理服务器上进行IP地址或计算机MAC绑定。但是如果代理服务器的参数设置不合适,可能起不到限制非授权用户访问外网的作用。为了检测哪些代理服务器没有进行非授权用户IP或MAC限制,使用C++Builder 6.0的NMHTTP控件开发了一个局域网代理服务器检测程序。该代理服务器检测程序可以有效地检测出局域网中给定网段内那些未进行IP限制设置的代理服务器IP和端口号,从而为网络管理员加强代理服务器管理工作提供方便。
  关键词:代理服务器;企业网;网络管理;网络安全;黑客
    为了企业信息安全的需要,从2011年7月起,大部分的中国石油企业内部网用户对互联网的访问受到了严格限制,这对防止企业敏感数据失密起到了一定的积极作用。通过使用代理服务器[1],能够使获得外网访问授权的用户访问外网资源,而没有获得外网访问授权的用户则被代理服务器拒绝。然而,由于代理服务器软件配置参数的不同,可能存在一些漏洞,使得没有授权的用户也能通过代理服务器访问外网;另外,也有授权用户私自将自己的计算机设置成代理服务器、为其他未获得授权的用户提供访问外网资源的服务的现象。
    本文使用 C++ Builder 6.0 编写了一个简单的代理服务器检测程序,主要目的是在局域网上查询代理服务器,为网络管理员提供本网段代理服务器的分布情况。
  1 检测程序设计原理
    代理服务器软件对于用户的外网访问申请可能做以下响应:
    (1)不管用户是谁,一律放行。
    (2)检查用户的IP地址,如果用户的IP地址在允许用户IP列表里,则放行;否则,拒绝。
    (3)检查用户的MAC地址,如果用户的MAC地址在允许用户MAC列表里,则放行;否则,拒绝。
    (4)检查用户的IP地址和MAC地址,如果用户的IP地址和MAC地址都在允许用户IP、MAC列表里,则放行;否则,拒绝。
    对于(3)、(4)两种情况,网络管理员需要知道每个授权用户的MAC地址,尽管收集授权用户MAC地址的工作很麻烦,但是通过行政手段这是可以做到的。一旦代理服务器软件保存了授权用户的MAC地址,其他非授权用户是很难通过该代理服务器访问外网的。
    对于情况(2),由于非授权用户的IP地址是可以随意更改的,只要在同一时间内不与其他计算机的IP地址相冲突,非授权用户就可以通过修改计算机的IP地址来获得访问外网的权限。
    在情况(1),任何用户都可以通过代理服务器获得访问外网的权限,关键问题是非授权用户如何得知局域网中那台计算机是代理服务器?
    可以这样设想一下,任意假定一个代理服务器的IP地址和端口号,非授权用户可以将自己计算机的浏览器软件的代理服务器IP地址和端口号设置为这个假想的代理服务器IP地址和端口号,然后访问互联网上的任意一个网页,如果能够正确地访问这个网页,这说明假想的代理服务器IP地址和端口号是正确的。如果不能正确访问这个网页,则浏览器会显示出错信息。
    人工方式完成这个检测过程是很繁琐的,可以通过编写一个计算机程序来完成。
  2 C++Builder 的NMHTTP控件
    C++ Builder 6.0 提供了一组名为FastNet的网络控件[2],使用这些控件可以快速地开发出网络应用程序。FastNet网络控件组的MNHTTP控件能够从远程主机上下载HTTP代码的网络控件,尽管NMHTTP控件不能直接显示或者分析HTTP代码,但是它可以从底层监视HTML控件的进行的事务处理过程。特别地,NMHTTP控件支持使用代理服务器。
  2.1 NMHTTP控件的几个主要属性
    在使用NMHTTP控件时,最常使用的是NMHTTP控件的下面几个属性:
    Proxy:字符串,是获取远程主机HTTP代码时使用的代理服务器的IP地址或者域名;如果不使用代理服务器,则该属性设置为空字符串。
    ProxyPort:整型数,是代理服务器的端口号;如果不使用代理服务器,则该属性设置为0。
    BeenTimeOut:布尔型,当设置为true时,表示获取远程主机HTTP代码时使用“操作超时”功能,即在一定的时间之内没有获得远程主机HTTP代码,则返回错误信息。当该属性设置为true时,操作超时的时间有另一个属性TimeOut来确定。
    TimeOut:整型数,该属性规定了操作超时的时间(用毫秒来计量),如果在指定的时间之内没有从远程主机获得HTTP代码,则程序抛出一个异常、并且终止当前的HTTP请求。
  2.2 NMHTTP控件的GET方法
    从远程主机获取HTTP代码的方法为:
  void Get(AnsiString url);
  其中:url为远程主机上某个网页的地址。
    如果该操作成功,则产生一个OnSuccess事件,该事件的cmd参数取值为CmdGET。
    如果操作失败,则产生一个OnFailure事件,该事件的cmd参数取值为CmdGET。
  2.3 NMHTTP控件的几个主要事件
  
  OnSuccess事件:当正确地从远程主机上获取了HTTP代码之后,产生该事件。
    OnFailure事件:当从远程主机上获取了HTTP代码的操作失败时,产生该事件。
    OnConnectionFailed事件:当无法与远程主机建立HTTP连接时,产生该事件。
    NMHTTP控件还有其他一些属性、方法和事件,但是本文所论程序编码中没有涉及,故不赘述,可查阅C++Builder随机帮助文件。
  3 检测程序设计要点
    代理服务器检测程序要实现的目的是:对于给定范围之内的连续IP,检测这些IP是否为代理服务器?
    定义一个字符串url,内容为互联网上的某个网页地址。要选择大多数人不访问的网页来给url赋值,因为代理服务器软件一般都自带缓存区,很多用户经常访问的网页一般都暂时保存在这个缓存区中,除非远程网页更新了,否则当用户访问这个网页时,大多数的代理服务器软件是将其缓存区中保存的内容返回给用户的。
  3.1 单个代理服务器的检测
  
  假设某个代理服务器的IP为m.n.p.q,端口为r,使用下面C++代码来发送HTTP请求:
  result=0;//全程变量,保存HTTP请求状态
  try
  {
  nmhttp->Proxy=AnsiString("m.n.p.q");
  nmhttp->ProxyPort=r;
  nmhttp->Get(url);
  Application->ProcessMessages();
  }
  catch (Exception &exception)
  {
  result=2;
  //处理连接失败的情况
  }
    HTTP网页访问成功的事件处理函数:
  void nmhttpSuccess(CmdType Cmd)
  {
    AnsiString text="";
    switch(Cmd)
    {
     case CmdGET:
      result=1;
      text="HTTP GET 成功";
      break;
    }
    Application->ProcessMessages();
  }
    HTTP网页访问失败的事件处理函数:
  void nmhttpFailure(CmdType Cmd)
  {
    AnsiString text="";
    switch(Cmd)
    {
     case CmdGET:
      result=3;
      text="HTTP GET失败";
      break;
    }
    Application->ProcessMessages();
  }
    网络连接失败的事件处理函数:
  void nmhttpConnectionFailed(TObject *Sender)
  {
  result=4;
  AnsiString text="HTTP 连接失败";
  Application->ProcessMessages();
  }
    当程序检测到nmhttpSuccess事件时,说明这个代理服务器的IP和端口号是正确的,将这个IP和端口号保存到结果列表中备用。如果检测到nmhttpFailure事件或者nmhttpConnectionFailed事件,则说明这个IP不是代理服务器,或者这个端口号不是代理服务器设定的端口号。
  3.2 代理服务器IP的连续产生
  
  假设要检测从IP地址a.b.c.d到e.f.g.h的所有的计算机是否为代理服务器,其中a、b、…、h都是0~255之内的整数,如果连续IP的范围比较小,可以事先一次性地生成全部IP放入一个列表中,然后一个一个检测IP是否为代理服务器。但是当连续IP范围较大时,列表中IP个数急剧增加,存储列表需要较大的内存空间。
    为了减少程序使用的动态内存空间,可以没生成一个IP后就进行检测,如果检测结果是代理服务器,则将这个IP放入结果列表,否则,舍弃该IP。
    对于任意一个IP:m.n.p.q,使用下面的算法来计算其后面的一个IP:w.x.y.z
  w=m;x=n;y=p;z=q;
  if (q不能运行的。而本文开发的代理服务器检测程序可以成功地绕过安全防护软件的检查。
  5 结论
    (1)使用C++Builder 6.0 提供的NMHTTP控件可以编写出一个简单的代理服务器检测程序,通过对连续IP地址的检测,可以发现那些没有进行IP限制的代理服务器来。
    (2)由于这个代理服务器检测程序只使用了HTTP请求、未使用其他黑客技术,因此像局域网安全防护软件Symantec等都不能有效阻止这个代理服务器检测程序进行局域网上代理服务器的探测。
  参考文献
  
[1] 车葵,邢书涛.网络代理服务器的设计与实现[J].计算机安全,2008,(06):38-40.
  [2] 清汉计算机工作室.C++ Builder网络开发实例.北京:机械工业出版社,2000:122-144.
分享到:
评论

相关推荐

    vc++ 开发实例源码包

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 FreeBird2011Dlg.h 主对话框类头文件 MultiGroup.h 多播组类头文件 UserLink.h 用户链表类头文件 ListenSocket.h 侦听接口...

    网络安全论文:谈云计算下计算机网络安全(两篇).doc

    1.4运用应用程序和代理服务器来确保计算机网络安全 当计算机用户在安装一些程序、软件的过程中,一定要注意在安装过程中的风险防 范工作,要高度警觉相关问题可能造成的安全隐患。对于比较陌生的信息要进行高度的 ...

    vc++ 应用源码包_1

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_2

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_3

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_6

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_5

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    JAVA上百实例源码以及开源项目源代码

    Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测  用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字...

    JAVA上百实例源码以及开源项目

    Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测  用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字...

Global site tag (gtag.js) - Google Analytics