Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: vincent en 10 de Junio de 2005, 09:32:59 AM

Título: Saber La Ip De Un Cliente
Publicado por: vincent en 10 de Junio de 2005, 09:32:59 AM
 Muy buenas,

tengo un equipo con Windows XP que acepta llamadas entrantes a través de un modem. Para poder establecer un socket con el equipo que realiza la llamada entrante necesito saber su IP (cada cliente especifica la suya).

Existe alguna función de la winapi para saber esta dirección? Tiene que existir pq si miras las propiedades de la conexión te dice la ip del cliente, pero no he sido capaz de encontrarla.  (nooo)

Gracias!
Título: Saber La Ip De Un Cliente
Publicado por: vincent en 10 de Junio de 2005, 03:43:59 PM
 Bueno, ahora mi problema ha cambiado. Lo que necesito ahora es detectar cuando un equipo está llamando a mi modem...  :(

Merci!
Título: Saber La Ip De Un Cliente
Publicado por: senior wapo en 10 de Junio de 2005, 03:59:48 PM
 Mirate la API SNMP de windows, creo recordar que permitia interrogar y cambiar esas cosas. Que no te asuste el nombre, no tienes que tener funcionando los servicios de red SNMP, es su equivalente pero para local en lugar de remoto (soporta ambos).
Título: Saber La Ip De Un Cliente
Publicado por: Juan Mellado en 10 de Junio de 2005, 07:19:12 PM
 Si estás utilizando RAS, puedes crearte una DLL que exporte una serie de funciones predefinadas por el API de RAS, registrarla en el registro (valga la redundancia), y esperar que Windows la llame cada vez que ocurra un evento relacionado con RAS.

Para detectar llamadas entrantes creo que debería ser RasAdminAcceptNewConnection:
http://msdn.microsoft.com/library/default....wconnection.asp

Toda la documentación está en MSDN, en RAS Administration DLL:
http://msdn.microsoft.com/library/default....inistration.asp

Espero te sirva,
Saludos
Título: Saber La Ip De Un Cliente
Publicado por: vincent en 13 de Junio de 2005, 08:27:55 AM
 Gracias Juan,

ahora lo pruebo y a ver que tal..

Merci!
Título: Saber La Ip De Un Cliente
Publicado por: vincent en 13 de Junio de 2005, 12:16:06 PM
 Bueno, ya he probado esto....

Mirando la msdn he visto lo siguiente:

Windows 2000 Server and later:  RAS administration DLLs that implement this function interface no longer work. Instead, use the MprAdmin function interface provided with the more recent versions of Windows. For more information, see the RAS Administration Reference in the Routing and RAS documentation.

Con lo qual he hecho la dll con las funciones del MprAdmin... he acertado?

La Dll que he hecho, es muy sencilla, simplemente hace printfs. Aqui pasteo el código:

#include "ModemCalls.h"

#include <stdio.h>

BOOL CALLBACK MprAdminAcceptNewLink(
 RAS_PORT_0* pRasPort0,
 RAS_PORT_1* pRasPort1
)
{
printf("\n\n\n\n ACCEPT NEW LINK \n\n\n\n");
return TRUE;
}

DWORD APIENTRY MprAdminInitializeDll(void)
{
return NO_ERROR;
}

void CALLBACK MprAdminLinkHangupNotification(
 RAS_PORT_0* pRasPort0,
 RAS_PORT_1* pRasPort1
)
{
printf("\n\n\n\n LINK HANG UP NOTIFICATION \n\n\n\n");
}

DWORD APIENTRY MprAdminTerminateDll(void)
{
return NO_ERROR;
}

BOOL CALLBACK MprAdminAcceptNewConnection(
 RAS_CONNECTION_0* pRasConnection0,
 RAS_CONNECTION_1* pRasConnection1
)
{
printf("\n\n\n\n ACCEPT NEW CONNECTION \n\n\n\n");
return TRUE;
}

void CALLBACK MprAdminConnectionHangupNotification(
 RAS_CONNECTION_0* pRasConnection0,
 RAS_CONNECTION_1* pRasConnection1
)
{
printf("\n\n\n\n CONNECTION HANG UP\n\n\n\n");
}


DWORD CALLBACK MprAdminGetIpAddressForUser(
 WCHAR* lpwszUserName,
 WCHAR* lpwszPortName,
 DWORD* lpdwIpAddress,
 BOOL* bNotifyRelease
)
{
printf("\n\n\n\n GET IP ADDRESS\n\n\n\n");
return NO_ERROR;
}

void CALLBACK MprAdminReleaseIpAddress(
 WCHAR* lpwszUserName,
 WCHAR* lpwszPortName,
 DWORD* lpdwIpAddress
)
{
printf("\n\n\n\n RELEASE IP ADDRESS\n\n\n\n");
}


Al iniciar el servicio no me da ningun error, con lo que supongo que la dll está bien hecha...

Total, que pongo a correr un programa que no hace nada para ver si sale algo en pantalla... y no sale nada cuando el cliente se intenta conectar :(

alguna idea sobre que puede estar pasando o yo haciendo mal? ( que lo mas probable... )

Merci!
Título: Saber La Ip De Un Cliente
Publicado por: vincent en 13 de Junio de 2005, 12:36:41 PM
 Bueno, pues los printfs no sé pq no funcionan, pero la DLL si!!  (ole)

Gracias!!