Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Obtener IP local e IP del servidor

Iniciado por alex.garcia, 17 de Octubre de 2007, 05:27:25 PM

« anterior - próximo »

alex.garcia

Hola a todos,
Estoy haciendo una aplicacion web en c# con VS 2003.
El caso es que necesito saber cual es la direccion IP del cliente y la del servidor y, haga lo que haga, siempre me devuelve la IP del servidor.

Lo ultimo que he probado sin exito ha sido lo siguiente mediante sockets;

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();

Despues de hacer esto, una vez mas la IP de e (la remota) es igual a la k (la local).

Si pudierais echarme una mano os lo agradeceria.

Muchas gracias

Alex

Tei


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();


Yo te aconsejaria que te lo miraras mas a fondo, porque no es un tema trivial.  Vas a coger la ip local, ¿y que pasa si es una ip de lan?.  Igual existe un mejor modo de hacer las cosas, como descubrir el camino a golpe de ICMP, o sacar la ip del cliente desde el servidor.

De todos modos no tengo ni zorra idea del tema, asi que desgraciadamente no te puedo ayudar. Pero para otra vez, utiliza la etiqueta [ code ] que hace el codigo mas legible.

shephiroth

Se que parece una tonteria, pero no ejecutaras el cliente y el servidor en el mismo pc, no?? A mi me ha pasado mas de una vez.

Por lo demas he comprobado la info en msdn, y todo parece estar bien :S

alex.garcia

No shephiroth, lo ejecuto desde otro PC que tengo en la habitacion cuya IP acaba en 100.142 y la de mi PC (servidor) es la 100.200.

Haga lo que haga desde cualquier PC siempre me devuelve 100.200 y ya no se que hacer.

He llegado a pensar que era por hacerlo en la capa DAO y lo he metido en la pagina aspx....(ya no se que hacer). Evidentemente ha dado el mismo resultado.

Perdonar por haber metido el codigo así. Es la primera pregunta que pongo y no sabia que existiera la etiqueta [code].

Si se os ocurre algo u otra forma de conseguirlo os lo agradeceria

Muchas gracias y un saludo

Alex

Vicente

Según codeproject:


namespace NKUtilities
{
   using System;
   using System.Net;
   
   public class DNSUtility
   {
       public static int Main (string [] args)
       {
       
         String strHostName = new String ("");
         if (args.Length == 0)
         {
             // Getting Ip address of local machine...
             // First get the host name of local machine.
             strHostName = DNS.GetHostName ();
             Console.WriteLine ("Local Machine's Host Name: " +  strHostName);
         }
         else
         {
             strHostName = args[0];
         }
         
         // Then using host name, get the IP address list..
         IPHostEntry ipEntry = DNS.GetHostByName (strHostName);
         IPAddress [] addr = ipEntry.AddressList;
         
         for (int i = 0; i < addr.Length; i++)
         {
             Console.WriteLine ("IP Address {0}: {1} ", i, addr[i].ToString ());
         }
         return 0;
       }    
    }
}


Deberías usar GetHostByName y no Resolve (ni idea de si funciona, no lo he probado). Seguramente leer la documentación de la clase Dns te ayudaría a explicar porque Resolve te da la dirección del servidor (que seguramente sea por como tienes configurada la red en tu casa).

Un saludo,

Vicente

alex.garcia

Hola a todos,

Ya tengo la respuesta a la pregunta que hice y está probada.
Me voya quedar con las ganas de porque no funcionaba, pero al menos sé como conseguir la IP del cliene y os lo comento para quien le interese

Estaba empeñado en enredame con los sockets cuando era tan sencillo como crear una ventana vacia y con un metodo como este;


public string getMaquina()
{
    String xx;
    xx = HttpContext.Current.Request.UserHostAddress;
    return maquinaLogado= xx;
}


Desde mi capa de negocio instancio esta pagina y llamo al metodo


UsuarioLog usuarioLog = new UsuarioLog(); //nombre de mi ventana-clase vacia
//lamada al metodo de mi ventana-clase
string maquina = usuarioLog.getMaquina();


Muchisimas gracias a todos por la ideas y aportaciones. Si algun dia de estos tengo tiempo intentare que funcione con sockts y os lo cuento


Gracias de nuevo

  Alex






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.