登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - Delphi 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

断开Internet连接
发表日期:2003-05-28作者:[] 出处:  

用Delphi编写可以断开Internet连接的程序

  在WIN9X下,如果安装了拨号网络,则在WINDOWS的系统目录(System目录)下将有两个拨号网络管理程序库RasApi32.DLL 和RasApi16.DLL,因此我们可以利用RAS(远程访问服务)系列函数实现断开指定的拨号连接。在这里我们将使用RasHangUp函数。然而如何正确使用这些API函数是完成应用程序的关键。

  挂断拨号连接的RasApi32函数为RasHangUp,其函数原型为:

  RasHangUp(HRASCONN : DWORD

   ):DWORD;stdcall;

  参数说明:

  HRASCONN : DWORD要挂断的拨号连接的句柄,此句柄是来源由调用函数RasEnumConnections的返回值。

  返回值:函数的返回值为0表示执行成功;不为0执行失败。

  由上面的函数得知:我们必须首先获得拨号连接的句柄,因此在应用程序中还需使用RasEnumConnections函数。

  获取所有活动的拨号连接的信息列表(连接句柄和电话号码)的RasApi32函数为RasEnumConnections,其函数原型为:

  RasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections) :DWORD;stdcall;

  参数说明:

  lprasconn:接收活动连接的缓冲区的指针;

  lpcb:接收缓冲区的字节大小;

  lpcConnections:实际的活动连接数。

  返回值函数的返回值为0表示执行成功;不为0执行失败。

  为了正确使用这两个函数,我们要事先定义函数,常数,结构类型及其他信息,有关这一部份的内容都写入rasapi.pas单元。

  源程序:

  program main;

  uses

   Forms,

   Unit1 in 'Unit1.pas' {Form1},

   rasapi in 'rasapi.pas';

  {$R *.RES}

  begin

   Application.Initialize;

   Application.CreateForm(TForm1, Form1);

   Application.Run;

  end.

  unit Unit1;

  interface

  uses

   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

   StdCtrls, DdeMan;

  type

   TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

   private

    { Private declarations }

     public

    { Public declarations }

   end;

  var

   Form1: TForm1;

  implementation

   uses rasapi;

  {$R *.DFM}

  procedure TForm1.Button1Click(Sender: TObject);

  var

     bufsize: Cardinal;

     numEntries: Cardinal;

     x: Integer;

     entries: Array[1..10] of TRasConn;//拨号连接数组(假设最多有10个活动的拨号连接)

     stat: TRasConnStatus;

     hRas: HRasConn;

     conexion:pRasConn;

   begin

    entries[1].dwSize := SizeOf(TRasConn);

    bufsize := SizeOf(TRasConn) * 10;

    FillChar(stat, Sizeof(TRasConnStatus), 0);

    stat.dwSize := Sizeof(TRasConnStatus);

    if RasEnumConnections(@entries[1], bufsize, numEntries) = 0 then

     begin

      if numEntries > 0 then

       with entries[1] do

       begin

        conexion:=Pointer(rasconn);

        hRas := Longint(conexion);

        if RasHangUp(hRas) <> 0 then

         ShowMessage('断开失败');

       end

       else

        ShowMessage('断开成功');

       end;

   end;

  unit rasapi;

  interface

   Uses WinTypes, WinProcs, Dialogs;

   Const

   UNLEN = 256;

   PWLEN = 256;

   DNLEN = 15;

   RAS_MaxEntryName   = 256;//连接名称最大长度

   RAS_MaxDeviceName   = 128;//设备名称最大长度

   RAS_MaxDeviceType   = 16;//设备类型名称长度

   { RAS_MaxParamKey   = 32;

   RAS_MaxParamValue   = 128;}

   RAS_MaxPhoneNumber  = 128;//电话号码的最大长度

   RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;

   Type

   {UINT = Word;}

   PHRASConn = ^HRASConn;

   Type

   { 确认一活动的拨号连接. (为RasConnectEnum函数使用) }

   PRASConn = ^TRASConn;//拨号连接的句柄类型

   TRASConn = record

     dwSize: DWORD;//该结构类型所占内存的字节大小

     rasConn: HRASConn;//活动连接的句柄

     szEntryName: Array[0..RAS_MaxEntryName] Of Char;//

     szDeviceType : Array[0..RAS_MaxDeviceType] Of Char;

     szDeviceName : Array [0..RAS_MaxDeviceName] of char;

   end;

   PRASConnStatus = ^TRASConnStatus;

   TRASConnStatus = Record

     dwSize: LongInt;

     rasConnstate: Word;

     dwError: LongInt;

     szDeviceType: Array[0..RAS_MaxDeviceType] Of Char;

     szDeviceName: Array[0..RAS_MaxDeviceName] Of Char;

   End;

   PRASDIALEXTENSIONS= ^TRASDIALEXTENSIONS;

   TRASDIALEXTENSIONS= Record

     dwSize: DWORD;

     dwfOptions: DWORD;

     hwndParent: HWnd;

     reserved: DWORD;

    end;

   PRASDialParams = ^TRASDialParams;

   TRASDialParams = Record

     dwSize: DWORD;

     szEntryName: Array[0..RAS_MaxEntryName] Of Char;

     szPhoneNumber: Array[0..RAS_MaxPhoneNumber] Of Char;

     szCallbackNumber: Array[0..RAS_MaxCallbackNumber] Of Char;

     szUserName: Array[0..UNLEN] Of Char;

     szPassword: Array[0..PWLEN] Of Char;

     szDomain: Array[0..DNLEN] Of Char;

   end;

   PRASEntryName = ^TRASEntryName;

   TRASEntryName = Record

     dwSize: LongInt;

     szEntryName: Array[0..RAS_MaxEntryName] Of Char;

   {  Reserved: Byte;}

   End;

  //拨号函数

   Function RasDial(

     lpRasDialExtensions : PRASDIALEXTENSIONS ; //在WIN9X下无用,可设置为NIL

     lpszPhonebook: PChar; //在WIN9X下无用,可设置为NIL

     lpRasDialParams : PRASDIALPARAMS; // 拨号参数,类型指针

     dwNotifierType : DWORD;   { 消息通知方式}

     lpvNotifier: DWORD;    { 消息处理事件}

     var rasConn: HRASConn     { 返回成功连接的连接句柄}

    ): DWORD; stdcall;

   function RasEnumConnections(RASConn: PrasConn;

            var BufSize: DWord;

         var Connections: DWord

    ): LongInt; stdcall;

   Function RasEnumEntries (

     reserved: PChar;    {保留字段,必须为空}

     lpszPhonebook: PChar ;    { 电话本名称,在WIN9X下无用,可设置为NIL}

     lprasentryname: PRASENTRYNAME ; {接收拨号连接名称的缓冲区,是一类型数组的指针}

     var lpcb :     DWORD; {接收拨号连接名称的缓冲区的大小}

     var lpcEntries : DWORD  {实际获得拨号连接 的数目}

    ) : DWORD; stdcall;

   function RasGetConnectStatus(RASConn: hrasConn;    { 指定活动连接的句柄 }

           RASConnStatus: PRASConnStatus { 获取活动连接状态信息的缓冲区}

     ): LongInt; stdcall;

   function RasGetErrorString(ErrorCode: DWord;    { 错误代码标识}

                szErrorString: PChar;    { 错误提示信息的缓冲区}

                BufSize: DWord   {错误提示信息的缓冲区的大小 }

                ): LongInt; stdcall;

   function RasHangUp(RASConn: hrasConn ): LongInt; stdcall;

   function RasGetEntryDialParams(

     lpszPhonebook:PChar;    {电话本名称,在WIN9X下无用,可设置为NIL }

     VAR lprasdialparams:TRASDIALPARAMS; {拨号参数,是一类型指针}

     VAR lpfPassword : BOOL    {显示是否需要用户密码}

    ): DWORD; stdcall;

   implementation

   const

   RAS_DLL = 'RASAPI32';

   function RasDial; external RAS_DLL name 'RasDialA';

   function RasEnumConnections; external RAS_DLL name 'RasEnumConnectionsA';

   function RasEnumEntries; external RAS_DLL name 'RasEnumEntriesA';

   function RasGetConnectStatus; external RAS_DLL name 'RasGetConnectStatusA';

   function RasGetErrorString; external RAS_DLL name 'RasGetErrorStringA';

   function RasHangUp; external RAS_DLL name 'RasHangUpA';

   function RasGetEntryDialParams; external RAS_DLL name 'RasGetEntryDialParamsA';

  end.

  以上代码在PWIN98+DELPHI5环境下调试通过。

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 断开Internet连接

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00256