使用C#Winforms我正在尝试自动检测本地计算机的IP地址,通过它可以连接到特定的远程DNS / IP地址。
一个senario正在通过VPN运行,远程地址为10.8.0.1,本地地址为10.8.0.6,网络掩码为255.255.255.252
迭代本地地址并检查远程和本地是否位于同一子网上显然会失败,我不确定如何执行此操作。
答案 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)