談用Delphi程式獲取撥號連線的動態IP地址 (轉)
---- 一、先解釋一些要用到的資料常量和資料結構。
const RAS_MaxDeviceType = 16;//裝置型別名稱長度 RAS_MaxEntryName = 256;//連線名稱最大長度 RAS_MaxDeviceName = 128;//裝置名稱最大長度 RAS_MaxIpAddress = 15;//IP地址的最大長度 R_Ppp= $8021;//撥號連線的型別,該數值表示PPP連線 type HRANN = D;//撥號連線控制程式碼的型別 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: T); 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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle獲取連線的IP地址Oracle
- 獲取SQL Server中連線的客戶端IP地址SQLServer客戶端
- 在DELPHI程式中撥號上網 (轉)
- 如何用ip地址連線共享印表機 用ip地址連線共享印表機的方法
- [轉]從程式號找到IP地址
- saltstack獲取IP地址
- 獲取IP地址方法
- 獲取IP地址命令
- 什麼是自動獲取IP地址
- 如何設定自動獲取ip地址
- Windows 8系統有線網路卡自動獲取IP地址Windows
- w10如何設定自動獲取ip地址_w10怎麼自動獲取ip地址
- ASPNET獲取IP地址 MAC地址Mac
- java獲取ip地址和mac地址JavaMac
- 美國ip地址如何獲取?
- 獲取真實IP地址
- java獲取本機的ip地址Java
- 獲取本地的IP地址(內網)內網
- DHCP獲取IP地址的過程
- Java 中獲取MAC地址 和IP地址JavaMac
- java獲取url連線地址引數的工具類Java
- PHP獲取動態跳轉後的真實連結PHP
- 用JAVA程式取得IP地址(轉)Java
- 如何獲取海外住宅IP地址?
- jQuery獲取本機ip地址jQuery
- Java獲取本機ip地址Java
- 實用Linux下獲取公網IP地址Linux
- gethostbyname() -- 用域名或主機名獲取IP地址
- Linux下用Java獲取本機IP地址LinuxJava
- JAVA根據IP地址獲取詳細的地域資訊(轉)Java
- javascript獲取本機ip地址程式碼例項JavaScript
- Linux下設定靜態IP和獲取動態IP的方法Linux
- PHP獲取IP地址的方法,防止偽造IP地址注入攻擊PHP
- 獲取IP地址的途徑有哪些?要如何保護IP地址不被竊取?
- 獲取爬蟲動態IP的三種方法爬蟲
- 最簡單的C# 獲取 MAC 地址 IP 地址C#Mac
- qt獲取本機IP地址、計算機名、網路連線名、MAC地址、子網掩碼、廣播地址QT計算機Mac
- 從程式號找到IP地址