说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
再谈用Delphi程序获取拨号连接的动态IP地址

《计算机世界》1999年8月16日《电脑与生活》版刊登了一篇文章,讨论了如何用Delphi程序获取拨号连接的动态IP地址。本文则讨论用另一个方法获取拨号连接的动态IP地址。

在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;

function 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 < > 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 < > dwResult then

memo1.lines.add(

'错误:' + inttostr( dwResult ))

else

memo1.lines.add(

'动态地址:' + StrPas(RASpppIP.szIPAddress));

end;

end;

end;

以上程序在PWIN98+Delphi3.0下调试通过。

小三上位:Windows Phone不容忽视的契机 “详解Visual Studio 2013”全国巡讲北京站:无忧开发iOS及Android应用 Chrome最新版:快速静音及在Win8中建Chrome OS系统 雅虎COO Henrique de Castro因业绩不佳被解雇 分析比特币背后的数据算法,抢占背后巨大市场先机 美食菜谱将会成创业风口的两大理由 Windows XP杀毒软件更新 将被延至2015年7月 小心,商家已经盯上你了 一软一硬 让你时刻保持清醒的可穿戴产品 寓教于乐 贝瓦依托移动平台打造中国式儿童“轻教育” 中科创达:CES2014上的中国红 SA:2014年移动互联网十大技术创新预测 回顾2013:HBase的提升与挑战 Google打造云中Hadoop便捷版,强势对抗AWS 【信息图】专业Web设计师和业余设计师的发展状况并不协调 先试后买:Agawi推新型广告服务AppGlimpse 搜狗CEO王小川:“硬件免费”是误区 平均比Hive快24倍,Impala剑指Stinger 利用ElasticSearch和Redis检索和存储十亿信息 微软高管再度失血 媒体及娱乐副总裁因内部重组离职 Google研制智能隐形眼镜 帮助病人监测血糖指标 盘点2013:最优秀的HTML5&amp;CSS3设计【多图】 AMD:未来PC将同时搭载Android、Windows双系统 如果你是CEO,你打算给自己开多少工资? IBM X6架构中国首发,目标是云与大数据 Pivotal聘用eBay前副总裁,继续发力云计算市场 智能手机的功能越来越复杂,可惜用户不买账 一周消息树:Windows 9要来了,会有哪些改变? 简单几步解决IE11无法显示此页的问题 研发周报:Java 8最终发布日期敲定,即使有bug也要发布 一周云热点:Google打造云中Hadoop便捷版,强势对抗AWS 如何对access文件加密!!!! 再次送分:如何求一个已打开ADO记录集中当前记录的行号或索引? 急!急!在用户界面线程中,如何接收其它窗口发送的消息? 我的toolbar潜入一个对话筐怎么是灰的???? :)请问:网上能不能找到破解了的Pro-e2000(中文版)啊? 关于退格键! java与C的问题,怎么办? VC里如何调用std里的operator new和operator delete 有沒辦法使成員函數只供指定的 class 呼叫! 关于DELPHI中的DBGRID控件 关于enhydra4.0+kelp4.0+jbuilder4.0。 能不能用Mscomm控制并口,如果行,应该怎样将一串ASCII值发送到并口;如果不行,能用其它方式吗?(最好能提供例程)多谢了。 求救,请教ado中有关事务的问题。 异想天开的问题???,进来就给分!!!! 请教高手,我如何将*.swf文件从网下摘下? 集线器与交换机怎样级联? 请问如何用RasDial 类似冰河“搜索主机”的功能怎么实现啊? 如何利用socket截获80端口数据?请给出源代码。 水晶报表的问题 Help的窗口 送分:关于数据库中的数据在前台显示的问题,敬请高手指教 请问一下各位PB FANS,PB中的自定义事件中的extenal选项有何作用? Label的小问题,以后给分,现在确实没分了。 测试a 有沒辦法使成員函數只供指定的 class 呼叫! 请问如何给listview添加鼠标拖拽功能,如从本视图中拖走一行? Jbuild and Visual Age for Java 只使用数据库表单如何不带环境? 为什么在Cmd.exe 下可以运行,但是在ASP里面却没有办法写进数据???斑竹怎么只提供4页的讨论内容呢?? 救急,启动winNT时候inetinfo.exe总是共享冲突,该咋解决? 如何防止内存泄漏 帮忙看诊断一下遇到的问题。 Fatal error C1010: unexpected end of file while looking for precompiled header directive是什么意思?怎么改正? 关于数据窗口 D3D8的疑問 作动态连接库链接时出错? rLabel的小问题,以后给分. WebSphere 4.0中是否已经直接实现了connection pool CSDN的bug报告:您不能给自己加分...... ORACLE里的中文字符集怎么解决?高分求救!!! 身为一个程序员,谈谈这些年里你所拥有的成功经历!见识一下CSDN牛人总汇! 这是怎么回事呀? asp怎么调用存储过程,主要是参数问题怎么传递 高分,给高分!!! 如何在useradd,增加一个用户的同时,限定这个用户的使用空间 关于内存分配的问题 由金山英文写作助理想到一种木马机制 如何修改Delta数据包中的信息 请问各位哥哥,配置个wu-ftp服务器,一个大目录有一个用户访问,里面的小目录由其它用户访问,怎么配置? 文凭真的这么重要么! 三氧化硫与石灰水反应生成沉淀的化学方程式 溶液中铜离子含量的多少对溶液颜色的影响做题时发现有时是绿色有时是蓝色但不只是在什么情况下 油遇到水为什么会起火? 二氧化碳与澄清石灰水反应方程式? SO2与C反应能生成SO3么 油遇到水为什么会炸起来啊? 二氧化碳与石灰水反应方程式 南京哪有买化学实验仪器? 为什么油遇到水后会溅起来 二价铁离子能不能把二价铜离子还原成单质铜,有什么反应条件请帮忙说明下,比如还原性强弱,电势等 化学实验仪器都有什么,包括药品 水碰到油为什么会沾起来 单质铜和二价铁离子谁还原性强?观察这两者和氧气反应的情况应该是2价铁强但是对于相同氧化剂3价铁,Cu能被还原,而Fe2+不能被其还原,这不能说明Cu还原性较强?到底是怎么一个情况啊? 请问天津市区哪里有化学实验仪器和药品?八百里加急!如果好会追加分的! 溶液的颜色是由什么离子决定的?怎么判断?每个离子都有颜色吗?原子也是吗? 铁和+2价的铜离子生成铜单质和+2价的铁离子 这是什么反应,要化学反应方程式! 二氧化硫与水反应的实验当把水装入有二氧化硫的塑料瓶时,瓶子变瘪了.此现象发生的可能原因1二氧化硫能溶解于水2...请问二是什么?(是二氧化硫与水产生化学反应这个答案吗?)接着下一 无锡哪里能买到化学实验仪器和药品?想在家做实验, 铜二价离子是否能与铜单质发生反应? 银离子的颜色是啥捏? 我在沈阳,问一下在哪里能买到化学实验仪器?还有,药品在那里买呀? 三氧化硫与水反应的离子方程式. 二氧化硫和水是否反应 北京哪能买到化学实验仪器及试剂?十分感谢你们帮我了个大忙,尤其是岑r 和werewolf1989,werewolf1989:十分愿意和你交个朋友 三氧化硫和水的离子方程式 银溶于水为什么变成离子形式?如:银离子杀菌 北京哪里有卖化学实验仪器的希望有详细地址,而且最好能告诉我行车路线,如果能够告诉价格和仪器的名称, 大家 帮帮忙 谁知道 四价水合锰离子 是什么颜色啊 谢谢了! 二氧化硫与水反应有什么现象和应用 为什么锂碰到水会爆炸 锰离子与锰酸根各是什么颜色的?还有高锰酸根呢? 氯化钠和氯化银的阳离子都是+1价离子,为什么氯化钠易溶于水而氯化银不易溶于水? 锂离子电池里面不会产生锂单质吧?锂离子遇水不爆炸吧? 氢气爆炸时的文字表达式 三价锰离子是什么颜色.是粉红色吗?是否和七价锰一样粉红色?如何区别? 二氧化硫和水的反应方程式是什么? 2个氢气分子化学公式怎么写 锰离子沉淀什么颜色? 根据阳离子不同盐可以分为_____、______、______等;根据银离子不同,盐可分为_____、______、_______等. 如何把金离子便为金单质?越详细越好,500分 几种常见铜盐溶液的颜色问题求解答 怎么买化学实验仪器?想在家做实验,要零售的,常用的化学实验仪器和药品淘宝上的也行,不过要一整套的,分别买要分别付邮费的,太贵了,我是山东枣庄的 怎样使铜由单质变为离子 SO2,SO3怎么念,SO2,SO3分别和水反应生成什么?我在先等候, 深圳哪里有化学实验仪器购买 离子变单质是被还原吗负离子,比如I-变成I2,是被还原吗 亚铜的盐溶液一般是什么颜色? 化学试验仪器有哪些不能直接加热的仪器?至少7个有哪些能直接加热的仪器?至少4个有哪些能间接加热的仪器?至少3个 三价铁离子怎么变成铁单质 SO2 SO3那个更易与水反应为什么 催化剂+二氧化硫=硫酸?三氧化硫+水=硫酸?两种都可以?这两种都可以制造 硫酸 那空气怎么制造 三氧化硫与氢氧化钙反应方程式? SO3怎么反应生成SO2? (1)多少克水与49g硫酸所含的氢元素的质量相同?(2)要使二氧化硫和三氧化硫含有相同质量的氧...(1)多少克水与49g硫酸所含的氢元素的质量相同?(2)要使二氧化硫和三氧化硫含有相同质量的氧元 三氧化硫和氢氧化钙反应吗? 铜离子溶液稀释颜色变化的原因 高中所有的化学实验仪器 及作用所有的化学仪器如(量筒)及设备如(酒精灯) 的作用 要全面的谢谢 还有 经典的化学实验题 我想做一个氢气和氧气爆炸的实验.目前有现成的氢气和氧气有矿泉水瓶子装着.有什么方法混合引爆.要安全点的.仪器简单点的 so3与什么反应生成so2 北京哪能买到物理和化学实验仪器及药剂
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn