获取远程套接字端点的 IP 地址

Posted

技术标签:

【中文标题】获取远程套接字端点的 IP 地址【英文标题】:Getting the IP Address of a Remote Socket Endpoint 【发布时间】:2010-12-26 15:00:24 【问题描述】:

如何确定已连接套接字的远程 IP 地址?

我有一个可以访问的 RemoteEndPoint 对象以及它的 AddressFamily 成员。

我如何利用这些来查找 IP 地址?

谢谢!

目前正在尝试

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

并为 localhost 端点获取 1.0.0.127 而不是 127.0.0.1。这正常吗?

【问题讨论】:

【参考方案1】:

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

然后您可以调用 IPEndPoint..::.Address 方法来检索远程 IPAddress,并调用 IPEndPoint..::.Port 方法来检索远程端口号。

更多来自链接(修复了很多呵呵):

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

【讨论】:

【参考方案2】:
string ip = ((IPEndPoint)(testsocket.RemoteEndPoint)).Address.ToString();

【讨论】:

【参考方案3】:

RemoteEndPoint 是一个属性,它的类型是System.Net.EndPoint,它继承自System.Net.IPEndPoint。

如果您查看 IPEndPoint 的 members,您会看到有一个 Address 属性。

【讨论】:

我看到的 RemoteEndPoint 成员可用的只有 AddressFamily。如何访问地址? ((System.Net.IPEndPoint)socket.RemoteEndPoint).Address 谢谢! :) 我正在尝试 string remoteIP = IPAddress.Parse( testSocket.Address.Address.ToString() ).ToString();并为本地主机连接获取“1.0.0.127”而不是“127.0.0.1”。这正常吗? 其实IPEndPoint继承自EndPoint。建议的演员阵容可能会在运行时失败。【参考方案4】:

我已经在 VB.NET 中编写了这段代码,但您可以翻译。 好吧,假设您将变量 Client 作为 TcpClient

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

希望对您有所帮助!干杯。

【讨论】:

您不必执行所有这些字符串函数。直接投射到 IPEndPoint 会快得多 - DirectCast(Client.Client.RemoteEndPoint, IPEndPoint).Address

以上是关于获取远程套接字端点的 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 boost::asio::ip::tcp::socket 的 IP 地址?

使用 boost::asio 获取广播源 IP 地址

在Windows 7里,哪些字属于套接字?

1套接字IP4和简单的客户服务端

1套接字IP4和简单的客户服务端

.NET Socket.Connect 将主机名解析为 IP 地址