在InstallShield中通过主机名获取IP地址的代码

所属分类: 脚本专栏 / 其它 阅读数: 1655
收藏 0 赞 0 分享
// 文 件 名:setup.rul
// 脚本功能:通过主机名获得TCP/IP地址
// 编写日期:2003-07-15
// 使用方法:调用函数 fGetIpAddress(szHost, szIPAdress)
// written by Jaron ,2002-07-15 
// 原出处:江都资讯网论坛 http://www.jiangdu.net/bbs;; 
// 转载请注明出处和保留此版权信息 
// 欢迎使用SiteManager网站管理系统 http://sitemanager.cnzone.net;; 

#include "Sddialog.h"
#include "IpAddress.rul"

STRING szIPAddress;
STRING szHostName;

BOOL nResult;

program

 SdShowDlgEdit1 ("", "请输入您的主机名称", "主机名:", szHostName);
 nResult = fGetIpAddress(szHostName, szIPAddress);
 if nResult then
 MessageBox ("IP地址是:" + szIPAddress, INFORMATION);
 endif;

endprogram
#include "Sddialog.rul"


==========================
// 文 件 名:IpAddress.rul
// 脚本功能:通过主机名获得TCP/IP地址
// 编写日期:2003-07-15
// 使用方法:
// 1. 在 setup.rul 前面加入 #include "IpAddress.rul" 
// 2. 调用函数 fGetIpAddress(szHost, szIPAdress)
// written by Jaron ,2002-07-15 
// 原出处:江都资讯网论坛 http://www.jiangdu.net/bbs;; 
// 转载请注明出处和保留此版权信息 
// 欢迎使用SiteManager网站管理系统 http://sitemanager.cnzone.net;; 


prototype NUMBER WSOCK32.WSAStartup( NUMBER, POINTER);
prototype NUMBER WSOCK32.gethostbyname(STRING);
prototype NUMBER KERNEL32.RtlMoveMemory (POINTER, NUMBER, NUMBER);
prototype NUMBER WSOCK32.WSACleanup();

prototype fGetIpAddress(STRING, BYREF STRING);

typedef WSADATA
begin
    INT wversion;
    INT wHighVersion;
    STRING szDescription[255];
    STRING szSystemStatus[128];
    INT iMaxSockets;
    INT iMaxUdpDg;
    INT lpszVendorInfo;

end;

typedef HOSTENT
begin
    NUMBER hName; // As Long
    NUMBER hAliases; // As Long
    SHORT hAddrType; //As Integer
    SHORT hLength; // As Integer
    NUMBER hAddrList; // As Long
end;

typedef IPADDRESS
begin
 CHAR b1; //First
 CHAR b2; //Second
 CHAR b3; //Third
 CHAR b4; //Fourth
end;

function fGetIpAddress(szHost, szIPAdress)
 WSADATA StructWSAData;
 WSADATA POINTER pStructWSAData;

 HOSTENT StructHostEnt;
 HOSTENT POINTER pStructHostEnt; 

 NUMBER nResult;
 NUMBER pHostAddress;

 POINTER pHostIPAddress;
 NUMBER HostIPAddress;

 IPADDRESS IpAddress;
 IPADDRESS POINTER pIpAddress;

 STRING sb1, sb2, sb3, sb4; 

 NUMBER nStartUp;
 BOOL bReturn;

begin

 if szHost = "" then
  return FALSE;
 endif;

 if UseDLL(WINSYSDIR^"WSOCK32.DLL") < 0 then
  return FALSE;
 endif;

 pStructWSAData = &StructWSAData;
 pStructHostEnt = &StructHostEnt;

 nStartUp = WSAStartup(0x101, pStructWSAData);

 if nStartUp != 0 then
  return FALSE;
 endif;

 pHostAddress = gethostbyname(szHost);

 if pHostAddress != 0 then

  RtlMoveMemory (pStructHostEnt, pHostAddress, 16);

  pHostIPAddress = &HostIPAddress; 
  RtlMoveMemory (pHostIPAddress, StructHostEnt.hAddrList, 4);

  pIpAddress = &IpAddress;
  RtlMoveMemory (pIpAddress, HostIPAddress, 4);

  NumToStr(sb1, pIpAddress->b1);
  NumToStr(sb2, pIpAddress->b2);
  NumToStr(sb3, pIpAddress->b3);
  NumToStr(sb4, pIpAddress->b4);

  szIPAdress = sb1 + "." + sb2 +  "." + sb3 + "." + sb4 ;

  bReturn = TRUE;

 else
  bReturn = FALSE;

 endif;

 if nStartUp = 0 then
  WSACleanup();
 endif;

 UnUseDLL("WSOCK32.DLL");

 return bReturn;

end;
更多精彩内容其他人还在看

我要常去的不错的几个网站收藏 强烈推荐

我要常去的不错的几个网站收藏 强烈推荐
收藏 0 赞 0 分享

RouterOS实现自动禁止过期帐号的脚本

本篇文章主要介绍了RouterOS实现自动禁止过期帐号的脚本,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

推荐的一篇用多种脚本清理iis日志的代码第1/3页

专题名称:IIS日志清理专题,CMD版,VBS版,JS版,WSH版
收藏 0 赞 0 分享

常见电子书格式及其反编译思路分析第1/3页

本文仅仅从技术角度讨论电子书反编译问题,请勿将之用于侵犯版权等等非法目的,或损害他人利益。如果您对此感到失望,请勿继续阅读。
收藏 0 赞 0 分享

FcScript V1.0 使用说明帮助文件

FcScript是由Forcal和MForcal支持的脚本控件(这两个动态库必须在windows搜索路径内,或者在文件夹“c:\FcDll”中),目前仅定义了VBScript接口,以后再增加其他接口。VBScript接口全部使用VARIANT参数。
收藏 0 赞 0 分享

用CE5.2版找武林外传一级基址的方法(图文教程)

好帖子,正好解决了我的遇到的瓶颈问题,收藏一下
收藏 0 赞 0 分享

linux Shell学习笔记第一天

从昨天开始看Shell的教程到现在已经两天了。现在把记录的笔记发出来,目前是很乱,主要是留给自己看看,后续等差不多了会整理统一发布出来。
收藏 0 赞 0 分享

linux Shell学习笔记第二天

今天做笔记稍微整理了下,但是避免不了出现错误,如果有错误麻烦大家给提出,本文最后将会共享今天的三个脚本文件。
收藏 0 赞 0 分享

linux Shell学习笔记第三天

今天收获还是比较多的。 半个小时的教程看了将近3个小时
收藏 0 赞 0 分享

linux Shell学习笔记第四天

今天的内容比较重要。循环的,课后作业还在研究中,出来答案后会贴到最后。
收藏 0 赞 0 分享
查看更多