Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2006
RJF RJF is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
RJF Va por buen camino
Thumbs up Saber el IP de internet LA SOLUCION !!!

No importa si estan detras de un proxy, un router, nada, porque si la PC tiene conexion a internet sabran el IP real de conexion, dado que es obtenido de una o varias paginas HTTP por medio de una consulta y un parceo, pruebenlo y comenten, esta medio crudo, pero funciona, mejorenlo. Saludos

DESCARGAR PROYECTO
http://rapidshare.de/files/18660143/SABER_IP.RAR.html

CODIGO COMPLETO
Código Delphi [-]
unit Unit1;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IDStack, StdCtrls, Buttons, OleCtrls, SHDocVw, ActiveX, WinInet, Winsock;

type
  TForm1 = class(TForm)
    WebB: TWebBrowser;
    TxtDireccion: TEdit;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn2: TBitBtn;
    procedure WebBDocumentComplete(Sender: TObject; const pDisp: IDispatch;
      var URL: OleVariant);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function WebBrowerDocumentSource(webBrowser: TWebBrowser) : string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function TForm1.WebBrowerDocumentSource(webBrowser: TWebBrowser) : string;
var
  ss: TStringStream;
  ips: IPersistStreamInit;
begin
  Result := EmptyStr;
  ss := TStringStream.Create(Result);
  try
    if Assigned(webBrowser) and Assigned(webBrowser.Document) then
    begin
      ips := webBrowser.Document as IPersistStreamInit;
      if Assigned(ips) and Succeeded(ips.Save(TStreamAdapter.Create(ss), true)) then
        Result := ss.DataString;
    end;
  finally
    ss.Free;
  end;
end;

//En el evento cuando se termina de cargar la pagina en el TWebBrowser
procedure TForm1.WebBDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var lineas :string;
    i,numptos, posprimpto :integer;
begin
  memo1.Text := WebBrowerDocumentSource(WebB);
  lineas := memo1.Text;
  numptos := 0;
  posprimpto := 0;
  //Para poder identificar el ip en el codigo fuente de la pagina debo hacer una busqueda dado que
  //un ip puede tener varias formas como xxx.xxx.xxx.xxx o xx.xxx.xx.xx o xx.xx.xx.xx
  for i := 1 to length(lineas) do
  begin
    if copy (lineas,i,1) = '.' then //Busco un punto en la cadena
    begin
     if i - posprimpto >4 then //Si la separacion al proximo punto es >4 ya no es un IP
       numptos := 0;
     numptos:=numptos+1;
     posprimpto := i;
    end;
    if numptos = 3 then break  //Si encontre 3 puntos es un IP valido o casi 
  end;
  memo1.Text := copy(lineas,posprimpto-11,15); //Copio del 3 punto 11 caracteres atras y 15 adelante
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  //Le asigno la direccion al TWebBrowser
  WebB.Navigate(TxtDireccion.Text);
end;
end.

Última edición por vtdeleon fecha: 02-05-2006 a las 13:59:38.
Responder Con Cita
  #2  
Antiguo 22-04-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hombre, pues muchas gracias por acordarte de nosotros.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 22-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Prueba con esta otra direccion, te devuelve SOLO la ip. No hay que buscarla.

http://dynupdate.no-ip.com/ip.php
Responder Con Cita
  #4  
Antiguo 23-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Usando la direccion anterior podemos hacer una funcion que nos devuelva la ip.

Código Delphi [-]
uses WinInet, Winsock;

const
  Pagina = 'http://dynupdate.no-ip.com/ip.php';

function ObtenerIP: String;
var
  hNet: HINTERNET;
  hUrl: HINTERNET;
  Buffer: array[0..15] of Char;
  BytesRead: DWORD;
begin
  Result := '';
  hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (hNet <> nil) then
  begin
    hUrl := InternetOpenUrl(hNet, Pagina, nil, 0, INTERNET_FLAG_RELOAD, 0);
    if (hUrl <> nil) then
    begin
      FillChar(Buffer,Sizeof(Buffer),0);
      if InternetReadFile(hUrl, @Buffer, sizeof(Buffer)-1, BytesRead) then
        // Aqui comprobamos que la direccion que nos devuelve tiene el formato correcto
        if inet_addr(@Buffer)<>INADDR_NONE then
          Result:= Buffer;
      InternetCloseHandle(hUrl);
    end;
    InternetCloseHandle(hNet);
  end;
end;

Última edición por seoane fecha: 23-04-2006 a las 12:18:32.
Responder Con Cita
  #5  
Antiguo 24-04-2006
RJF RJF is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
RJF Va por buen camino
woooww, bastante buen codigo, lastima que lo publican ahora !!!! el problema de este codigo que depende de esa pagina en particular, si algun dia la cambian no funciona mas el codigo de la forma que yo propuse es posible buscar el ip en distintas paginas sin necesidad de cambiar codigo. Saludos y gracias

Última edición por RJF fecha: 24-04-2006 a las 14:35:47.
Responder Con Cita
  #6  
Antiguo 24-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Si la pagina que te recominedo deja de estar disponible siempre puedes colocar en un servidor que soporte php un archivo con este contenido:

Código PHP:
<?php echo $_SERVER["REMOTE_ADDR"];?>
Hay servidores gratuitos que soportan php asi que no tendrias problema.
Responder Con Cita
  #7  
Antiguo 24-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Dandole otra vuelta de tuerca al asunto, hay ISP (Proveedores de servicios de internet) que utilizan lo que se denomina proxys transparentes. Es decir, el usuario desconoce su existencia, pero todo el trafico web pasa a traves del proxy, que lo guarda en una cache.

Pues bien para obtener la "verdadera" direccion ip y no la del proxy podemos usar en vez de:

http://dynupdate.no-ip.com/ip.php

Esta otra (observese que es https y no http):

https://dynupdate.no-ip.com/ip.php

En principio el proxy no intercepta las conexiones seguras, no tendria sentido, ya que los datos van encriptados y no serviria de nada guardarlos en una cache. Asi que la conexion es directa.

Se me ocurre incluso que una buena forma de averiguar si se esta detras de un proxy transparente es obtener la ip con la primera direccion (la no segura) y volverla obtener con la segunda direccion, si son diferentes es que hay algo sospechoso. Esto ultimo no lo puedo probar porque mi ISP ya ha dejado de usar el proxy-cache, pero lo dejo por si alguien tiene curisosidad.
Responder Con Cita
  #8  
Antiguo 24-04-2006
RJF RJF is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
RJF Va por buen camino
Gracias, buen dato.
Con todo esto creo que ha quedado claro el mitico tema de como obtener el ip de internet, esto esta mas que claro, pero si alguien tiene otra duda que pregunte nomas
Responder Con Cita
  #9  
Antiguo 02-05-2006
tulio tulio is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 300
Poder: 21
tulio Va por buen camino
Hola RJF

Gracias por tu colaboracion, te cuento que probe el codigo y al reinventar el formulario con los componentes me da algunos errores, mi pregunta es si podes publicar el proyecto con el formulario que tenga los componentes del codigo que escribiste.

Muchas Gracias

tulio

rgsoria@hotmail.com
Responder Con Cita
  #10  
Antiguo 30-06-2006
RJF RJF is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
RJF Va por buen camino
Código:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IDStack, StdCtrls, Buttons, OleCtrls, SHDocVw, ActiveX, WinInet, Winsock;
type
  TForm1 = class(TForm)
    WebB: TWebBrowser;
    TxtDireccion: TEdit;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn2: TBitBtn;
    Button1: TButton;
    Edit1: TEdit;
    procedure BitBtn1Click(Sender: TObject);
    procedure WebBDocumentComplete(Sender: TObject; const pDisp: IDispatch;
      var URL: OleVariant);
    procedure BitBtn2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function WebBrowerDocumentSource(webBrowser: TWebBrowser) : string;
  end;
var
  Form1: TForm1;
implementation
les dejo la cabecera del proyecto para que vean las unidades utilizadas, realizado en Delphi 7
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Solucion al tema de saber si estoy o no conectado a internet jorch_yr Internet 4 26-10-2008 12:32:53
La solución de UML a Delphi... JorgeBec Noticias 1 23-04-2007 17:53:50
como saber cuando se abre una pagina de internet especifica gulder API de Windows 9 12-09-2005 15:37:33
saber el ip de internet ebeltete Internet 7 30-09-2003 11:44:37


La franja horaria es GMT +2. Ahora son las 14:49:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi