談用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何用ip地址連線共享印表機 用ip地址連線共享印表機的方法
- saltstack獲取IP地址
- 如何設定自動獲取ip地址
- 什麼是自動獲取IP地址
- w10如何設定自動獲取ip地址_w10怎麼自動獲取ip地址
- java獲取本機的ip地址Java
- PHP獲取動態跳轉後的真實連結PHP
- 美國ip地址如何獲取?
- 如何獲取海外住宅IP地址?
- jQuery獲取本機ip地址jQuery
- 談談撥號動態VPS和vps伺服器區別伺服器
- 如何使用 Go 獲取你的 IP 地址Go
- PHP獲取IP地址的方法,防止偽造IP地址注入攻擊PHP
- 獲取IP地址的途徑有哪些?要如何保護IP地址不被竊取?
- 撥號vps,遠端連線撥號vps的方法及其步驟
- 獲取爬蟲動態IP的三種方法爬蟲
- 如何高效獲取大資料?動態ip代理:用爬蟲!大資料爬蟲
- win10正在獲取ip地址連線不上怎麼辦_win10一直顯示正在獲取網路地址的解決方法Win10
- 用動態連結動態洩露system地址並利用
- 【Go】獲取使用者真實的ip地址Go
- 【Go】獲取使用者真實的 ip 地址Go
- js根據IP地址獲取當前的省市JS
- js根據ip地址獲取省份城市的方法JS
- 如何連線vps撥號伺服器伺服器
- Oracle中獲取主機名和IP地址Oracle
- Vps撥號伺服器,Vps撥號伺服器的優點及其連線方法伺服器
- iOS 程式碼 獲取wifi資訊 及主動連線WiFiiOSWiFi
- delphi 獲取印表機狀態,如缺紙等問題
- ip代理地址免費獲取怎麼做?
- 【SQL】SQL解惑-如何從字串中獲取IP地址SQL字串
- Kali Linux常用服務配置教程獲取IP地址Linux
- Python獲取IP地址對應的地理位置資訊!Python
- reactnative獲取裝置真實ip地址和ip對映的地理位置React
- 動態獲取tomcat啟動埠,控制檯列印專案訪問地址Tomcat
- 什麼是撥號vps?如何遠端連線?
- 怎麼有效連線vps撥號伺服器?伺服器
- PHP獲取MAC地址的實現程式碼PHPMac
- 在動態IP下遠端連線計算機計算機
- 在OwinSelfHost專案中獲取客戶端IP地址客戶端