如何确定可以连接到给定远程IP / DNS地址的本地IP地址

时间:2012-04-22 20:57:29

标签: c# .net network-programming

使用C#Winforms我正在尝试自动检测本地计算机的IP地址,通过它可以连接到特定的远程DNS / IP地址。

一个senario正在通过VPN运行,远程地址为10.8.0.1,本地地址为10.8.0.6,网络掩码为255.255.255.252

迭代本地地址并检查远程和本地是否位于同一子网上显然会失败,我不确定如何执行此操作。

3 个答案:

答案 0 :(得分:0)

routing table确定要使用的本地端口。除了运行route print CLI命令之外,我不知道从C#获取它的方法。如果存在网络匹配,则使用该端口,否则使用默认路由。

答案 1 :(得分:0)

以下是一些示例代码,可以为您提供所需的信息。它创建一个UDP套接字并在其上调用Connect()(实际上是一个NOOP),然后检查本地地址。

static EndPoint GetLocalEndPointFor(IPAddress remote)
{
    using (Socket s = new Socket(remote.AddressFamily,
                                 SocketType.Dgram,
                                 ProtocolType.IP))
    {
        // Just picked a random port, you could make this application
        // specific if you want, but I don't think it really matters
        s.Connect(new IPEndPoint(remote, 35353));

        return s.LocalEndPoint;
    }
}

static void Main(string[] args)
{
    IPAddress remoteAddress = IPAddress.Parse("10.8.0.1");
    IPEndPoint localEndPoint = GetLocalEndPointFor(remoteAddress) as IPEndPoint;

    if (localEndPoint == null)
        Console.WriteLine("Couldn't find local address");
    else
        Console.WriteLine(localEndPoint.Address);

    Console.ReadKey();
}

请注意,这实际上是this answer的实现,但在C#中。

答案 2 :(得分:-1)