用Delphi程序获取拨号连接的动态IP地址

牛牛n8C

牛牛n8C

2016-02-19 18:37

今天图老师小编给大家精心推荐个用Delphi程序获取拨号连接的动态IP地址教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~
p>  在WIN9X下,假如安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络治理程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的RAS系列函数来获取和设置拨号连接网络的信息。当然是可以获取拨号连接的动态IP地址了。在Delphi帮助文件中,有相关RAS函数的具体说明。 一、先解释一些要用到的数据常量和数据结构。 const
  RAS_MaxDeviceType = 16;//设备类型名称长度
  RAS_MaxEntryName = 256;//连接名称最大长度
  RAS_MaxDeviceName = 128;//设备名称最大长度
  RAS_MaxIpAddress = 15;//IP地址的最大长度
  RASP_PppIp = $8021;//拨号连接的协议类型,该数值表示PPP连接type
  HRASCONN = DWord;//拨号连接句柄的类型
  RASCONN = record//活动的拨号连接的句柄和设置信息
  dwSize : DWORD;//该结构所占内存的大小(Bytes),
  一般设置为SizeOf(RASCONN)
  hrasconn : HRASCONN;//活动连接的句柄
  szEntryName : array[0..RAS_MaxEntryName] of char;
  //活动连接的名称
  szDeviceType : array[0..RAS_MaxDeviceType] of char;
  //活动连接的所用的设备类型
  szDeviceName : array[0..RAS_MaxDeviceName] of char;
  //活动连接的所用的设备名称
  end;
  TRASPPPIP = record//活动的拨号连接的动态IP地址信息
  dwSize : DWORD;//该结构所占内存的大小(Bytes),
  一般设置为SizeOf(TRASPPPIP)
  dwError : DWORD;//错误类型标识符
  szIpAddress : array[ 0..RAS_MaxIpAddress ] of char;
  //活动的拨号连接的IP地址
  end;
   二、接着要解释要用到的两个RAS函数。 //获取所有活动的拨号连接的信息(连接句柄和设置信息)
  function RasEnumConnections( var lprasconn : RASCONN ;
  //接收活动连接的缓冲区的指针
  var lpcb: DWORD;//缓冲区大小
  var lpcConnections : DWORD//实际的活动连接数
  ) : DWORD; stdcall;
  function RasEnumConnections;external Rasapi32.dll
  name RasEnumConnectionsA;
  //获取指定活动的拨号连接的动态IP信息
  function RasGetProjectionInfo(
  hrasconn : HRasConn;//指定活动连接的句柄
  rasprojection : DWORD;//RAS连接类型
  var lpprojection : TRASPPPIP;//接收动态IP信息的缓冲区
  var lpcb : DWord//接收缓冲区的大小
  ) : DWORD;stdcall;
   ction RasGetProjectionInfo;external
  Rasapi32.dll name RasGetProjectionInfoA;
    这两个函数的返回值为0时表示执行成功,非0表示错误代码。 三、下面要讨论如何用上面的两个RAS函数获取拨号连接的动态IP地址   首先,要用函数RasEnumConnections列出已建立的活动拨号连接的信息,其中包括连接名称、连接句柄、连接设备类型和设备名称;然后根据连接句柄用函数RasGetProjectionInfo获取连接对应的一个TRASPPPIP结构,其中包括一个成员属性szIpAddress即为动态IP地址。具体请参见以下程序片段和注释信息。 procedure TForm1.Button1Click(Sender: TObject);
  const
  MaxConnections = 10;//假设最多有10个活动的拨号连接
  var
  connections : array[0..MaxConnections-1] of RASCONN;
  //拨号连接数组
  longSize : dword;
  intAvailabelConnections : dword;
  //活动的拨号连接的实际数目
  intIndex : integer;
  strTemp : string;
  dwResult : DWORD;
  dwSize : DWORD;
  RASpppIP : TRASPPPIP;
  //活动的拨号连接的动态IP地址信息
  begin
  connections[ 0 ].dwSize := sizeof(RASCONN);
  longSize := MaxConnections * connections[ 0 ].dwSize;
  //接收活动连接的缓冲区大小
  intAvailabelConnections := 0;
  
   //获取所有活动的拨号连接的信息(连接句柄和设置信息)
  dwResult := RasEnumConnections( connections[ 0 ],
  longSize,intAvailabelConnections );
  if 0 $#@60; $#@62; dwResult then
  memo1.lines.add( 错误: + inttostr( dwResult ) )
  else
  begin
  memo1.lines.add( 现有的活动连接有 +
  IntToStr( intAvailabelConnections ) + 个);
  //显示所有活动的拨号连接的信息(设置信息和动态IP地址)
  for intIndex := 0 to intAvailabelConnections - 1 do
  begin
  //显示一个活动的拨号连接的设置信息
  strTemp := 连接名称:
  + StrPAS( connections[ intIndex ].szEntryName )
  + ,设备类型:
  + StrPAS( connections[ intIndex ].szDeviceType )
  + ,设备名称:
  + StrPAS( connections[ intIndex ].szDeviceName );
  memo1.lines.add( strTemp );
  //显示一个活动的拨号连接的动态IP地址
  dwSize := SizeOf(RASpppIP);
  RASpppIP.dwSize := dwSize;
  dwResult := RASGetProjectionInfo
  ( connections[ intIndex ].hRasConn,
  RASP_PppIp,RasPPPIP,dwSize);//获取动态IP地址
  if 0 $#@60; $#@62; dwResult then
  memo1.lines.add(
  错误: + inttostr( dwResult ))
  else
  memo1.lines.add(
  动态地址: + StrPas(RASpppIP.szIPAddress));
  end;
  end;
  end;
  以上程序在PWIN98+Delphi3.0下调试通过。
展开更多 50%)
分享

猜你喜欢

用Delphi程序获取拨号连接的动态IP地址

编程语言 网络编程
用Delphi程序获取拨号连接的动态IP地址

用Delphi实现IP地址的隐藏

Delphi
用Delphi实现IP地址的隐藏

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi的拨号连接类

编程语言 网络编程
Delphi的拨号连接类

用Delphi实现动态获取版本信息

Delphi
用Delphi实现动态获取版本信息

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

动态IP地址的捕获及其应用

windows 操作系统
动态IP地址的捕获及其应用

ASP如何获取真实IP地址

ASP
ASP如何获取真实IP地址

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Windows 10版Office正式发布

Windows 10版Office正式发布

你知道的Java和你不知道的Java

你知道的Java和你不知道的Java
下拉加载更多内容 ↓