none
Obtener IP de cliente y de servidor

    Question

  • Hola a todos,

     

    Tengo un problema que me esta volviendo loco.

    Estoy haciendo una app web en VS 2003 utilizando c#.

    El caso es que para hacer unas cosas, necesito tener la IP del servidor y del cliente en la capa DAO.

     

    El caso es que despues de probar infinidad de códigos diferentes, siempre me devuelve la IP del servidor y nunca consigo la del cliente.

    Lo ultimo que he probado ha sido esto;

     

    String strHostName = Dns.GetHostName();

    Socket d= null;

    IPAddress hostIPAddress1 = (Dns.Resolve(strHostName)).AddressList[0];

    IPEndPoint hostIPEndPoint = new IPEndPoint(hostIPAddress1,80);

    d= new Socket(hostIPEndPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp);

    d.Connect(hostIPEndPoint);

    string e= ((IPEndPoint)d.RemoteEndPoint).Address.ToString();

    string k= ((IPEndPoint)d.LocalEndPoint).Address.ToString();

     

    Y con la inspeccion de variables "e" y "k" tienen la IP del servidor.

     

    Si me podeis ayudar os lo agradeceria mucho

     

    Un saludo y gracias de antemano

     

    Alex Garcia

    Wednesday, October 17, 2007 4:51 PM

Answers

  •  Alex Zubia Escribió:

    String strHostName = Dns.GetHostName();

    Socket d= null;

    IPAddress hostIPAddress1 = (Dns.Resolve(strHostName)).AddressList[0];

    IPEndPoint hostIPEndPoint = new IPEndPoint(hostIPAddress1,80);

    d= new Socket(hostIPEndPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp);

    d.Connect(hostIPEndPoint);

    string e= ((IPEndPoint)d.RemoteEndPoint).Address.ToString();

    string k= ((IPEndPoint)d.LocalEndPoint).Address.ToString();

     

    Y con la inspeccion de variables "e" y "k" tienen la IP del servidor.

    Lógico, ya que en strHostName tienes el nombre del host (el host es el servidor, ya que ese código está en el servidor). Luego en hostIPAddress tienes la IP de strHostName (de nuevo el servidor).

    Posteriormente, en hostIPEndPoint tienes el endpoint formado por la IP del servidor y el puerto 80.

    Inicializas un socket TCP apuntando al puerto 80 del servidor, y conectas a ese puerto.

    Como el código se ejecuta en el servidor, tienes en origen y destino la misma IP, con puertos diferentes.

     

    Si lo que quieres es saber la IP de aquél que te está llamando a una aplicación web, tienes que utilizar la propiedad Request del objeto Page. De ahí extraes la IP del cliente (ojo, puede no ser la IP "real" del cliente, sino la de algún aparato que haya entre medias), y la utilizas.

     

    La propiedad que te hace falta usar del objeto HttpRequest (que es el tipo de la instancia a la que accedes desde la propiedad Request de la clase Page) es UserHostAddress. Es decir, en la página web harías algo así:

     

    Dim dirIPCliente as String = Me.Request.UserHostAddress

     

    Y ya con dirIPCliente haces lo que quieras Wink

    Wednesday, October 17, 2007 5:09 PM

All replies

  •  Alex Zubia Escribió:

    String strHostName = Dns.GetHostName();

    Socket d= null;

    IPAddress hostIPAddress1 = (Dns.Resolve(strHostName)).AddressList[0];

    IPEndPoint hostIPEndPoint = new IPEndPoint(hostIPAddress1,80);

    d= new Socket(hostIPEndPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp);

    d.Connect(hostIPEndPoint);

    string e= ((IPEndPoint)d.RemoteEndPoint).Address.ToString();

    string k= ((IPEndPoint)d.LocalEndPoint).Address.ToString();

     

    Y con la inspeccion de variables "e" y "k" tienen la IP del servidor.

    Lógico, ya que en strHostName tienes el nombre del host (el host es el servidor, ya que ese código está en el servidor). Luego en hostIPAddress tienes la IP de strHostName (de nuevo el servidor).

    Posteriormente, en hostIPEndPoint tienes el endpoint formado por la IP del servidor y el puerto 80.

    Inicializas un socket TCP apuntando al puerto 80 del servidor, y conectas a ese puerto.

    Como el código se ejecuta en el servidor, tienes en origen y destino la misma IP, con puertos diferentes.

     

    Si lo que quieres es saber la IP de aquél que te está llamando a una aplicación web, tienes que utilizar la propiedad Request del objeto Page. De ahí extraes la IP del cliente (ojo, puede no ser la IP "real" del cliente, sino la de algún aparato que haya entre medias), y la utilizas.

     

    La propiedad que te hace falta usar del objeto HttpRequest (que es el tipo de la instancia a la que accedes desde la propiedad Request de la clase Page) es UserHostAddress. Es decir, en la página web harías algo así:

     

    Dim dirIPCliente as String = Me.Request.UserHostAddress

     

    Y ya con dirIPCliente haces lo que quieras Wink

    Wednesday, October 17, 2007 5:09 PM
  • Muchas gracias Augusto !!,

     

    La verdad, me he vuelo loco inetntando hacer las cosas de la forma mas enrevesada cuando lo tenía ahi, delante de mis ojos. Instanciaba una pagina y desde ésta devolvía mediante métodos públicos los valores......

    El concepto iba encaminado.....el concepto y conocimiento del desarrollo era nefasto.

     

    Lo dicho, muchisimas gracias por todo. Me has ayudado mucho

     

    Alex García

    Thursday, October 18, 2007 11:22 AM
  • Hola soy Samuel:

    Esa respuesta esta bien cuando haces una aplicacion web pero quisiera saber como se puede obtener el ip de un cliente pero para aplicaciones forms. Que se puede hacer????? Estoy utlilizando el modelo Cliente/Servidor.

     

    Agradeceria cualquier tipo de informacion, me es urgente!!!!

     

    Gracias

    Thursday, December 27, 2007 10:19 PM
  • Hola Samuel,

     

    Cuando usas un modelo cliente/servidor, dependiendo de dónde quieras obtener el endpoint remoto, tienes dos vías que son muy similares. En ambos casos, tanto en el cliente como en el servidor, tienes que obtener una referencia al socket que se usa para comunicar los datos, y preguntarle por el endpoint remoto.

     

    Por lo tanto, en el servidor, supongo que habrás usado un Listener para escuchar las peticiones, y llamado al método Accept, o AcceptSocket, o similar. Por lo tanto, podrías hacer algo similar a lo siguiente:

     

    Bloque de código

    Socket sck = miListener.AcceptSocket();


    Console.WriteLine ("Estoy conectado a {0} en el puerto número {1}.", IPAddress.Parse (((IPEndPoint)sck.RemoteEndPoint).Address.ToString()), ((IPEndPoint)sck.RemoteEndPoint).Port);

    Console.WriteLine ("Mi IP local es {0} y estoy conectado en el puerto número {1}.", IPAddress.Parse (((IPEndPoint)s.LocalEndPoint).Address.ToString ()), ((IPEndPoint)s.LocalEndPoint).Port);

     

     

    En el cliente sería similar, pero en vez de obtener el socket en la llamada AcceptSocket, podrías obtenerlo por ejemplo en un TcpClient de la propiedad Client.

     

    Saludos,

     

     

     

    Augusto.

    http://geeks.ms/blogs/aruiz

     

    Wednesday, January 09, 2008 9:29 AM
  • Hola con esto puedes obtener la IP de computador que este como cliente

    private string GetIpAddress()

    {

    string name = System.Net.Dns.GetHostName();

    string ip = System.Net.Dns.GetHostAddresses(name)[0].ToString();

    return ip;

    }

     

    Monday, May 19, 2008 4:20 PM
  •  Cristian Leon Escribió:

    Hola con esto puedes obtener la IP de computador que este como cliente

     

    Cristian, con ese código obtienes el nombre de máquina y la dirección IP del equipo actual. Es decir, obtendrás una de las IPs (en concreto la primera, puede tener más si tiene - por ejemplo - WiFi y LAN conectadas) del equipo en el que se ejecute la aplicación (sea cliente o servidor).

     

    Para saber la IP de la máquina local, tu solución es válida (sea cliente o servidor, insisto), pero para obtener la IP remota, debes tener una conexión existente, y a partir del endpoint remoto obtenerla. En este caso tendrás una y sólo una dirección IP, ya que las conexiones sólo usan una IP y un puerto en cada máquina.

    Wednesday, September 03, 2008 1:26 PM
  • Hola soy nuevo en esto, probe de todo y tambien con lo que publicaron y siempre obtengo 127.0.0.1

    alguien me puede ayudar a obtener la ip del cliente ??

    estoy con asp en visual studio 2010

    Wednesday, March 28, 2012 12:22 PM
  • Hola

    Ese 127.0.0.1 es la dirección del localhost, o sea en todas las Pc vas a obtener la misma (todas tienen 127.0.0.1) si no tuvieras acceso a Internet-intranet esa direccion la puedes usar para realizar las pruebas en tu misma PC (ya sea para realizar conexiones de sockets (Cliente-servidor), consultar tu sitio web....). Como se que la explicacion quizas no te quede clara (porque soy muy malo explicandome :-( ) aquí te dejo un link...

    Saludos

    Wednesday, March 28, 2012 12:54 PM