|
Flash: http://img.flash.tom.com/flashli ... 136522396_34176.swf
显示IP地址的SAS程序
作者:未知 文章来源:WWW 点击数:855 更新时间:2005-7-21
/*
* Richard A. DeVenezia
* Obtain IP address of host
*
* Tested platforms:
* Windows NT 4 and SAS v6.12/v8.1
*
* Adapted from:
* VBnet - Randy Birch, MSKB, http://www.mvps.org/vbnet/code/network/ipaddress.htm
*/
filename sascbtbl catalog 'WORK.WINAPI.IPADDR.SOURCE';
data _null_;
file sascbtbl ;
infile cards length=len;
length line $200;
input line $varying. len;
put line;
cards4;
ROUTINE
WSAStartup
MODULE=WSOCK32
MINARG=8
MAXARG=8
STACKPOP=CALLED
RETURNS=LONG
;
arg 1 NUM INPUT BYVALUE FORMAT=PIB4. ; * long wVersionRequired ;
arg 2 NUM UPDATE FDSTART FORMAT=IB2. ; * int wVersion - lpWSADATA ;
arg 3 NUM UPDATE FORMAT=IB2. ; * int wHighVersion ;
arg 4 NUM UPDATE FORMAT=PIB1. ; * byte szDescription (0 To MAX_WSADescription=256) ;
arg 5 NUM UPDATE FORMAT=PIB1. ; * byte szSystemStatus(0 To MAX_WSASYSStatus=128) ;
arg 6 NUM UPDATE FORMAT=IB2. ; * int wMaxSockets ;
arg 7 NUM UPDATE FORMAT=IB2. ; * int wMaxUDPDG ;
arg 8 NUM UPDATE FORMAT=PIB4. ; * long dwVendorInfo ;
ROUTINE
WSACleanup
MODULE=WSOCK32
MINARG=0
MAXARG=0
STACKPOP=CALLED
RETURNS=LONG
;
ROUTINE
gethostname
MODULE=WSOCK32
MINARG=2
MAXARG=2
STACKPOP=CALLED
RETURNS=LONG
;
arg 1 CHAR UPDATE FORMAT=$CSTR200. ; * szHost ;
arg 2 NUM BYVALUE UPDATE FORMAT=PIB4. ; * long dwHostLen;
ROUTINE
gethostbyname
MODULE=WSOCK32
MINARG=1
MAXARG=1
STACKPOP=CALLED
RETURNS=LONG
;
arg 1 CHAR INPUT FORMAT=$CSTR200. ; * szHost ;
;;;;
run;
%* WS_VERSION_REQD = 0101x ;
%let hostname = UNKNOWN;
%let ipaddr = UNKNOWN;
data _null_;
retain v1-v7 0;
rc = moduleN ('WSAStartup', 0101x, v1, v2, v3, v4, v5, v6, v7);
if rc ^= 0 then do;
put "WSAStartup failed";
stop;
end;
if v5 < 1 then do;
put "SystemStatus < 1";
stop; %* require one socket to get ip addr;
end;
major = BAND (v1, 000FFx);
minor = BAND (v1, 0FF00x) / 0100x;
if major < 1 or (major=1 and minor<1) then do;
put "WSA version insufficient";
goto CleanUp;
end;
length hostname $200;
hostname = '';
rc = moduleN ('gethostname', hostname, 200);
if rc = -1 then do;
put 'Unable to gethostname';
goto CleanUp;
end;
lpHost = moduleN ('gethostbyname', hostname);
hLen = peek (lpHost+10, 2);
hAddr = peek (lpHost+12, 4);
lAddr = peek (hAddr);
length ipAddr $20;
ipAddr = ''; dot='';
do i = 0 to hLen-1;
ipAddr = trim(ipAddr) || trim(dot) || put (peek (lAddr+i,1), 3.) ;
dot='.';
end;
call symput ('HOSTNAME', trim(hostname));
call symput ('IPADDR', compress(ipAddr));
CleanUp:
rc = moduleN ('WSACleanup');
stop;
run;
%put HOST &HOSTNAME HAS IP ADDRESS &IPADDR;
[ 本帖最后由 weder 于 2006-3-4 22:57 编辑 ] |
|