En WIN9X, si está instalada la red de acceso telefónico, habrá dos bibliotecas de administración de red de acceso telefónico, RasApi32.DLL y RasApi16.DLL, en el directorio del sistema Sistema del sistema WINDOWS. Podemos usar las funciones de la serie RAS en ellas para. obtener y configurar conexiones de acceso telefónico a información de red. Por supuesto, puede obtener la dirección IP dinámica de la conexión de acceso telefónico. En el archivo de ayuda de Delphi, hay descripciones detalladas de las funciones RAS relacionadas.
---- 1. Primero explique algunas constantes de datos y estructuras de datos que se utilizarán.
constRAS_MaxDeviceType = 16; // Longitud del nombre del tipo de dispositivo RAS_MaxEntryName = 256; // Longitud máxima del nombre de la conexión RAS_MaxDeviceName = 128 // Longitud máxima del nombre del dispositivo RAS_MaxIpAddress = 15; Tipo de protocolo de conexión, este valor indica el tipo de conexión PPP HRASCONN = DWord;//Tipo de identificador de conexión de acceso telefónico RASCONN = registro//Maneja y configura la información de la conexión de acceso telefónico activa dwSize: DWORD;//El tamaño de la memoria ocupada por esta estructura (Bytes), generalmente establecido en SizeOf( RASCONN) hrasconn: HRASCONN ;// El identificador de la conexión activa szEntryName: array[0..RAS_MaxEntryName] of char // El nombre de la conexión activa szDeviceType: array[0..RAS_MaxDeviceType] of char;//El tipo de dispositivo utilizado para las conexiones activas szDeviceName: array[0..RAS_MaxDeviceName] of char;//El nombre del dispositivo utilizado para las conexiones activas end;TRASPPPIP = record//Active dial- arriba Información de la dirección IP dinámica conectada dwSize: DWORD;// El tamaño de la memoria ocupada por esta estructura (Bytes), generalmente establecido en SizeOf (TRASPPPIP) dwError: DWORD;// Identificador de tipo de error szIpAddress: array[0..RAS_MaxIpAddress] of char;// Dirección IP del final de la conexión de acceso telefónico activa;
---- 2. A continuación, explicaremos las dos funciones RAS a utilizar.
//Obtener información sobre todas las conexiones de acceso telefónico activas (identificador de conexión e información de configuración) función RasEnumConnections( var lPRasconn : RASCONN ; // Recibe el puntero del búfer de conexiones activas var lpcb: DWORD; // Tamaño del búfer var lpcConnections : DWORD //número real de conexiones activas): DWORD; stdcall;función RasEnumConnections;nombre externo 'Rasapi32.dll' 'RasEnumConnectionsA';//Obtenga la información de IP dinámica de la función de conexión de acceso telefónico activa especificada RasGetProjectionInfo(hrasconn: HRasConn;//Especifique el identificador de la conexión activa rasprojection: DWORD;//Tipo de conexión RAS var lpprojection: TRASPPPIP;/ /Recibir información de IP dinámica Buffer var lpcb: DWord//recibir tamaño del buffer): DWORD;stdcall;función RasGetProjectionInfo; nombre externo 'Rasapi32.dll' 'RasGetProjectionInfoA';
Cuando el valor de retorno de estas dos funciones es 0, indica una ejecución exitosa y un valor distinto de cero indica un código de error.
---- 3. A continuación, analizaremos cómo utilizar las dos funciones RAS anteriores para obtener la dirección IP dinámica de la conexión de acceso telefónico.
---- Primero, use la función RasEnumConnections para enumerar la información de las conexiones de acceso telefónico activas establecidas, incluido el nombre de la conexión, el identificador de la conexión, el tipo de dispositivo de conexión y el nombre del dispositivo, luego use la función RasGetProjectionInfo para obtener una estructura TRASPPPIP correspondiente a; la conexión basada en el identificador de conexión, que incluye un atributo de miembro szIpAddress, que es la dirección IP dinámica. Para obtener más información, consulte los siguientes fragmentos de programa e información de anotaciones.
procedimiento TForm1.Button1Click(Sender: TObject);const MaxConnections = 10;// Supongamos que hay hasta 10 conexiones de acceso telefónico activas var conexiones: matriz[0..MaxConnections-1] de RASCONN; array longSize: dword; intAvailabelConnections: dword; //El número real de conexiones de acceso telefónico activas intIndex: integer; dwResult: DWORD; dwSize: DWORD; RASpppIP: TRASPPPIP;//La información de la dirección IP dinámica de las conexiones de acceso telefónico activas comienza las conexiones[ 0 ].dwSize := sizeof(RASCONN); //Tamaño del búfer para recibir conexiones activas intAvailabelConnections := 0; //Obtener información sobre todas las conexiones de acceso telefónico activas (identificador de conexión e información de configuración) dwResult := RasEnumConnections( conexiones[ 0 ], longSize,intAvailabelConnections ); inttostr (dwResult)) else comienza memo1.lines.add( 'Existen conexiones activas' + IntToStr( intAvailabelConnections ) + 'one');//Muestra la información de todas las conexiones de acceso telefónico activas (información de configuración y dirección IP dinámica) para intIndex := 0 a intAvailabelConnections - 1 comenzar//Muestra la información de configuración de un acceso telefónico activo arriba conexión strTemp: = 'Nombre de conexión:' + StrPAS( conexiones[ intIndex ].szEntryName ) + ', Tipo de dispositivo: ' + StrPAS( conexiones[ intIndex ].szDeviceType ) + ', nombre del dispositivo: ' + StrPAS( conexiones[ intIndex ].szDeviceName ); memo1.lines.add( strTemp ); Mostrar la dirección IP dinámica de una conexión de acceso telefónico activa dwSize := SizeOf(); RASpppIP) ; RASpppIP.dwSize := dwSize; dwResult := RASGetProjectionInfo( conexiones[ intIndex ].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//Obtener dirección IP dinámica si 0 < > dwResult entonces memo1.lines.add('Error:' + inttostr( dwResult )) else memo1.lines.add( 'Dirección dinámica: ' + StrPas(RASpppIP.szIPAddress)); fin;fin;