Ver Mensaje Individual
  #3  
Antiguo 05-12-2003
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Reputación: 23
__hector Va por buen camino
Una manera efectiva de lograrlo es haciendo una peticion http a un servidor de esos que proveen informacion acerca del ip con el que te conectas a Internet (la ip del router), tomar lo que te devuelve y determinar el ip.

Ese servicio esta dado por los proveedores de dns dinamicos, ya que existen clientes que instalas en tu maquina y determinan el ip con el que te conectas a Internet para poder actualizar los servidores de dns dinamicos "transparentemente"

Una de esas paginas es http://dynamic.zoneedit.com/checkip.html

Algo de codigo:

Para hacer la peticion http, ClientSocket con las propiedades:
- Host: zoneedit.com
- Puerto: 80
- Active : true

Código:
   with ClientSocket do begin
      Socket.SendText('GET http://dynamic.zoneedit.com/checkip.html HTTP/1.0'+#13#10);
      Socket.sendText('Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, */*'+#13#10);
      Socket.SendText('Referer: http://www.zoneedit.com/'+#13#10);
      Socket.sendText('User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'+#13#10);
      Socket.SendText('Host: www.zoneedit.com'+#13#10);
      Socket.sendText('Content-Length: 0'+#13#10);
      Socket.sendText(''+#13#10);
      Socket.sendText(''+#13#10);
   end;
Cuando reciba la respuesta del servidor, parseamos la respuesta para tomar el IP (en un string):

Código:
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
   str :  string;
   posIp : integer;
   posFin : integer;
   ip : string;
begin
   str := cs.Socket.ReceiveText;
   posIp := pos('Current IP Address:', str);
   posFin := pos('<br>Hostname', str);
   ip := copy(str, posIp + 20, posFin - (posIp + 22));
end;
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita