2009-12-14 27 views
31

¿Cómo puedo determinar la dirección IP remota de un socket conectado?Obtener la dirección IP de un socket remoto Endpoint

Tengo un objeto RemoteEndPoint al que puedo acceder y también como miembro de AddressFamily.

¿Cómo los utilizo para encontrar la dirección IP?

Gracias!

Actualmente tratando

IPAddress.Parse(testSocket.Address.Address.ToString()).ToString(); 

y conseguir 1.0.0.127 en lugar de 127.0.0.1 localhost para puntos finales. ¿Esto es normal?

Respuesta

56

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.remoteendpoint.aspx

continuación, puede llamar a la IPEndPoint .. ::. Dirección método para recuperar la Dirección IP remota y el IPEndPoint .. ::. Puerto método para recuperar el número de puerto remoto.

Más desde el enlace (arreglado je mucho):

Socket s; 

IPEndPoint remoteIpEndPoint = s.RemoteEndPoint as IPEndPoint; 
IPEndPoint localIpEndPoint = s.LocalEndPoint as IPEndPoint; 

if (remoteIpEndPoint != null) 
{ 
    // Using the RemoteEndPoint property. 
    Console.WriteLine("I am connected to " + remoteIpEndPoint.Address + "on port number " + remoteIpEndPoint.Port); 
} 

if (localIpEndPoint != null) 
{ 
    // Using the LocalEndPoint property. 
    Console.WriteLine("My local IpAddress is :" + localIpEndPoint.Address + "I am connected on port number " + localIpEndPoint.Port); 
} 
5

RemoteEndpoint es una propiedad, su tipo es System.Net.EndPoint que hereda de System.Net.IPEndPoint.

Si echa un vistazo a IPEndPoint's members, verá que hay una propiedad Address.

+1

Todo lo que veo disponible para los miembros de RemoteEndPoint es AddressFamily. ¿Cómo obtengo acceso a la dirección? – bobber205

+1

((System.Net.IPEndPoint) socket.RemoteEndPoint) .Address –

+0

¡Gracias! :) Estoy intentando cadena remoteIP = IPAddress.Parse (testSocket.Address.Address.ToString()) .ToString(); y obtener "1.0.0.127" en lugar de "127.0.0.1" para las conexiones de localhost. ¿Esto es normal? – bobber205

2
string ip = ((IPEndPoint)(testsocket.RemoteEndPoint)).Address.ToString(); 
0

He hecho este código en VB.NET pero puede traducirlo. Bueno pretender que tiene la variable cliente como TcpClient

Dim ClientRemoteIP As String = Client.Client.RemoteEndPoint.ToString.Remove(Client.Client.RemoteEndPoint.ToString.IndexOf(":")) 

espero que ayude! Aclamaciones.

Cuestiones relacionadas