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

再谈用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下调试通过。

屌丝伞兵的逆袭:4人+盛大+远程+最佳手游 新年头彩:Chartboost喜获1900万美元融资 高富帅跻身移动领域 福特开放车载声控API 传低端iPhone最低只要99美元 你怎么看? 辉煌不再 Encanto超级计算机可能被拆分“出售” 知己知彼 企业应用移足云端必须清楚的10大方面 NVIDIA推Android掌机:七年孕育可否成就野心? 人民日报:2013关于新媒体的8个猜想 互联网大时代成就创新小企业 移动互联网创新论坛报道 Mobile Detect:判断移动设备类型的开源PHP类 我是如何Hack Facebook Employees Secure Files Transfer服务的 投资可再生能源:Google 2亿美元投资风力农场 构筑商业生态系统 阿里巴巴集团全面变革组织架构和管理体系 美国众多银行网站遭DDoS攻击 疑似伊朗所为 构建高可扩Web架构和分布式系统实战 CES2013 AMD发布移动处理器路线图和环绕计算概念 对话Linus Torvalds:大多黑客甚至连指针都未理解 PaaS玩家们,怎么演好自己的角色? Apple高管表态:低端机绝不是iPhone的未来 Web开发人员应该知道的IE 10兼容性问题 一周消息树:CES2013揭幕 科技巨头纷纷发力 2012专利排行榜 IBM位列第一、Google增长最快! 微软赞黑客并称Windows RT越狱非安全漏洞所致 周报第46期:GitHub历史上最糟糕宕机事故回放及反省 著名计算机黑客Aaron Swartz自杀身亡 移动周报:移动互联网行业技术趋势前瞻 旁门左道:让移动游戏下载量暴涨的邪门功夫 可植入身体:“可穿戴计算”时代来临 Web服务器份额:Apache仍居首,Nginx将超IIS 防税务欺诈:挪威财政部将开源收银机代码 响应式设计实战:3人+1.5个月 IE10优化版cnBeta诞生记 各位大虾有无利用VC打开JPEG(JPG)图像并显示的源代码? 有关单文档多视图的一个小问题,答出有100分可拿!!! 如何优化编译,让编译后的文件最小? 请问软件是vfp3.0写的但是现在只有6.0,能转换么?是否需要重新编译?怎么编译,谢谢 vs.net 在PHP中如何把E_MAIL同时发给两个人? 有关注册表和其他一些问题 正版的vs。net几张盘? 有rtlinux的RCS库开发经验的朋友们 ACCESS能够,为什么SQL SERVER却不能?? 怎样生成新窗口? 有一个按扭,点一下后运行别的exe文件,代码怎么编啊? 请教各位大虾,有关带串口的数码相机的咨询! 有一个按扭,点一下后运行别的exe文件,代码怎么编啊?另外,点一个按扭,使c;\file1的文件,拷贝到d;\file2 有rtlinux的RCS库开发经验的朋友们 100分呀,还有挑战性,一个有点难度的问题,再网格控间上如何添加事件!!! 回答问题有钱给...用ATL创建一个全局COM(只启动一个实例)供所有客户端使用 无助,真喜欢一位小姐(不是那个‘小姐’别误会)真太想知道她有没有男友了,请问有什么办法知道么? 我能过高程么 请教各位大侠,如何简单的实现游戏人物动作的控制? 自己开发了一个软件,用于写jsp是自动生成一些get set 以及连接数据库代码的 问个很简单的问题 简单的问题 假设一个C编程高手首次遇到“sinx=x-x^3/3!+x^5/5!-.....+(-1)^n*x^(2n+1)/(2n+1)!” 各位大虾有无用VC处理JPEG(JPG)图像文件格式的源代码? 谁发给我一张自考的学位证书,我的分全给他! BCB6的5张光盘内容?? system.data.sqlclient 和system.data.oledb 请问怎么抓IP包 各位VB数据库编程高手看看啊!有谁能解? 钩子! 您想学习Delphi 6新功能WebSnap吗?进来看看吧! 我想再了解一下实例和共享变量的有关问题? ICQ的非ICQ联系,怎么导入和导出? 谁告诉我如何使用java创建,分析,修改一个xml,给我例子 有关writeprocessmemory的问题,大侠请进 web service求教 dll调用的问题: 求学数表达式导数开形的算法? 有人会用ImageList吗?我不会也~~~ 有没有免费的ASP主页存放空间????(请各路高手指点) c++ 在数据库编程方面有什么优点? 怎么在ASP中不使用ODBC使SQL SERVER数据库与ASP文件相连? 100分求:pb7以上版本的电子书或资料下载地址(基础入门篇) vc.net能不能在XP下安装? vc.net可以在xp下安装吗? 关于view |Type Library窗口的问题! help!!!!!!!!! Please Help Me! Please Help Me! Please Help Me! 简述哺乳动物脑的主要组成,各部分的主要功能, 如果发生触电事故,要立即______,必要时对触电者进行_______ 八年级上册物理期中试卷带答案哦! 人类的大脑将会进化成? 强排燃气热水器偶尔“漏电”的触电现象用了半年的强排燃气热水器,家人洗澡时,手碰到水阀开关和进水管时,发生麻麻的触电现象,但是淋浴的热水感觉不到触电现象,我这段时间也遇到过两 如何鉴别na2co3 k2c03,Nacl 和K2So4 写出有关反应的化学方程式和离子方程式的一道题目,高手来帮下忙,不要来敷衍ok 等物质量的NAHCO3与NA2CO3混合液中离子浓度排序 等物质量的的NAHSO3与NA2SO3离子浓度排序 四柱液压机机械部分图纸求四柱液压机的上梁、滑块、下梁及立柱的图纸.吨数不限,主要想学学配合尺寸的间隙怎么给?还有就是立柱和梁之间通过什么连接的?QQ 544023930 可以加QQ聊... 20℃时NaCl的溶解度为36g,请计算20℃下NaCl饱和的溶液的溶质质量分数?哎.. 这个是科学新课堂的题目.. 我不会.. 请大家写下详细的过程.. 除去CO2中的SO2为什吗不用Na2CO3. 除去SO2中的CO2为什吗不用Na2sO3 求八年级上册物理期中试卷(北师大版)...期中...北师大版...最好有答案... 2008~2009陇南地区八年级上册物理期中试卷 Na2CO3+SO2=Na2SO3+CO2是 强酸制弱酸吗为什么 切断脑的不同部位的动物名称 氯化钠溶液(碳酸钠) 除杂 除去co2中的so2,为什么不用na2co3而用nahco3 3150KN的液压机的机械总功率是多少? NaCl溶液中有碳酸钠怎么除... 为了使家用电器的金属外壳能与大地相连 朋友们,我想知道八年级上册物理期中试卷 NaHCO3+SO2==NaHSO3+CO2 生成的CO2有没有气体符号? 大脑是如何控制情感 运作的 关于大脑能记住多少跟名字的,知识渊博的看看!以前看过一篇文章,说科学研究每个人能记住的名字是有限的,当到达那个限度的时候,这是你再认识一个人,就会从你曾经认识的人里面遗忘一个, 什么树被称为“活化石”? 为了使家用电器的金属外壳能与大地相连 只要填空 欲除去CO2气体中混有的SO2气体,要将混合气体饱和溶液NaHCO3,为什么不饱和可以吗求NaHCO3与SO2的反应方程式 人类的大脑是由什么控制的? 从什么动物起有了脑的称呼 为除去co2气体中混有少量的so2气体 最好选用下列试剂中的A.Na2CO3 B.NAHCO3 C.NAOH D.NAHSO3 大地是导体,但为什么家用电器还要接地线防危险呢当用电器漏电时,接了地线,大地是导体,漏的电会流向大地,但是人也是导体,流向大地的电流不就会又流向人体,还是会使人导电,这样怎么能 大脑的各个部分的名称纸上的图不是很清楚!而且老师不教这个! 除去CO2气体中的SO2杂质,要将混合气体通入NaHCO3中而不是NaOH溶液或Na2CO3中,用离子方程式解释其原因 对落在地面上的带电导线,为防触电,应撤离电线落地点多少米 大脑各部位名称 有活化石之称的动物.是A.扬子鳄 B.藏羚羊 C.金丝猴 下列气体组中,三种气体都属于空气污染物的是?A.二氧化硫,氮气,二氧化碳 B.二氧化碳,一氧化碳,氮气C.一氧化碳,甲烷,氢气 D二氧化硫,一氧化碳,二氧化氮选什么,为什么kuai ji ```````````````````````` 大脑是怎么控制情感的? 最近接触金属物体时老有触电的感觉,怎么办好啊?最近我的手一接触金属物体,比如打开出租车门的时候,就会有被电击的感觉,怎么回事啊,别人都不会这样,难道跟穿毛衣有关吗,但是去年都没 把人类的大脑装满大约相当于多少GB? 从世界范围看,污染空气的主要气体是 最近总是静电反应,碰那都会有触电的感觉,跟人接触也是,总在工作的时候... 人类的意识等于多少GB?意识是在记忆下建立的吗?未来人类的意识植入机器,需要所有意识和记忆吗? 收集SO2排饱和NaHSO3还是排饱和NaHSO4,还是都可以?为什么?下列有关的叙述中错误的是A.鱼虾放置时间过久,产生难闻的腥臭气味,应当用水冲洗,并在烹调时加入少许的食醋 B.“酸可以除锈 大脑中哪个部分控制着人类对物质的追求的欲望 二氧化硫和饱和NaHCO3反应 感情受大脑控制吗? 人类大脑怎么全部开发出来 NaHCO3溶液与SO2的反应NaHCO3溶液与少量SO2 过量SO2的反应的离子方程式还有Na2CO3与少量 过量S02的反应. 气体就世界范围而言,主要指-------------,----------------,-------------为防止空气污染 目前人类的大脑开发了多少? 人类大脑的构成及各部分的作用是什么? 为了防止出现漏电现象发生触电事故,家用电冰箱要用什么插头 为什么人不能触电,触电了就会死,什么原理? 人类的大脑组成的部分是怎样的,以及各个部分的功能以及如何维护运用的? _______是触电事故,发生触电事故可能有_______原因. 触电原理触电的条件是什么?是否是有电流经过人体就有触电?那有电流是否一定就有电压?跨步电压是怎么回事情,其是否有电流产生? 大脑由几个部分构成 家庭电路中得触电类型有哪些?如何预防家庭电路中触电事故?湿手触摸电器触电属于哪种类型的触电? 脚上穿胶鞋,我碰到裸露的电线,原理是什么?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘