如何获取远程计算机的本地网络IP地址

4

远程计算机有两个地址:局域网(LAN)虚拟专用网络(VPN)

我尝试使用以下代码获取局域网(LAN) IP地址:

hostent *host = gethostbyname(hostname);
if (host) strcpy(ip, inet_ntoa(*((struct in_addr *)host->h_addr)));

有时返回的是 LAN,有时是 VPN。我知道在 h_addr_list 字段中有很多地址,但我怎么知道哪个地址是本地地址?

我尝试使用 GetAdaptersInfo(),它有字段用于确定是否为本地 IP,但只返回我的计算机的 IP 地址。我不知道如何获取远程计算机的 IP。

请给我一些建议,谢谢!


1
你的本地主机很可能无法区分它们,但你可以尝试将远程IP列表与相应连接(例如eth0)的本地网络掩码进行匹配。 - bitmask
谢谢!我考虑过那个方法,但只是猜测而已。所以先将其作为备选方案。我想通过代码绝对获取到那个IP地址。 - Tu Tran
2个回答

2
根据您的问题,您表示您可以获取计算机的局域网IP,并获取远程计算机的IP,无论是LAN还是VPN。要确定远程计算机上的哪个IP在您的lan上,您可以使用子网测试。我假设您的VPN当然在不同的子网上,您可以测试您计算机的IP的前2-3个八位字节是否与远程IP的前2-3个八位字节匹配。这是我能想到的唯一方法。
因此,像你所说的那样循环遍历远程IP,并将它们与计算机的本地IP地址的八位字节进行比较。

我认为那是一个可能的解决方案,但在评论中当我建议时,楼主似乎不太喜欢。 - bitmask
完全没有看到你的评论。这是我能想到的唯一一个不需要比这个问题更多工作的解决方案。 - sean
那现在这是唯一的解决方案吗?我会按照这种方式实现,直到有更好的方法。非常感谢! - Tu Tran
说实话,我想不到其他不借助外部服务的方式了。 - sean
我昨天实现了这个功能,经过测试后,我意识到VPN IP地址可能与LAN IP地址相似(例如,在测试机器上,LAN IP为172.16.0.47,而VPN IP为172.16.0.97)。 - Tu Tran
啊,那可就有问题了。如果没有远程计算机告诉你,我想不出其他方法来确定哪个是哪个。请求本地IP -> 客户端找到本地IP -> 发送回本地IP。 - sean

0
在研究这个问题后,我意识到远程字符串上的适配器由于安全问题不能公开。因此,我们没有确切的方法知道哪个IP地址是VPN。
此外,VPN地址是由VPN服务器创建的。因此,该VPN地址可以是任何东西,甚至类似于我们的本地IP。换句话说,我们无法以任何方式猜测VPN地址。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接