【问题标题】:How to get local network IP address of a remote computer如何获取远程计算机的本地网络IP地址
【发布时间】:2012-10-28 05:34:35
【问题描述】:

远程计算机有两个地址:LANVPN

我尝试通过以下代码获取局域网 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。

谁给我一些建议,拜托!

【问题讨论】:

  • 您的本地主机很可能无论如何都无法区分它们,但您可以尝试将来自远程的 ips 列表与相应连接的本地网络掩码(例如 eth0)进行匹配。
  • 谢谢!我想过,但这只是猜测。因此,将其保留为备用计划。我绝对想通过代码得到那个ip。

标签: c network-programming ip


【解决方案1】:

根据您的问题,您声明您可以获得计算机的局域网 IP,并获得远程计算机的 IP,无论是局域网还是 VPN。要确定远程计算机上的哪个 IP 在您的局域网上,您可以使用子网测试,我当然假设您的 VPN 在不同的子网上,您基本上可以测试您计算机 ip 的前 2-3 个八位字节是否匹配远程ip的2-3个八位字节。这是我能想到的唯一方法。

因此,按照您的说法,循环访问远程 IP,您可以获得它们并根据您计算机八位字节的本地 IP 地址检查它们。

【讨论】:

  • 我认为这是一种可能的解决方案,但是当我向 cmets 建议时,OP 似乎并不喜欢它。
  • 完全没有看到你的评论。这是我能想到的唯一一个真正不需要比这个问题已经需要更多工作的问题。
  • 那么它是目前唯一的解决方案吗?我将实施这种方式,直到有更好的方式。非常感谢!
  • 老实说,我想不出没有外部服务的其他方法。
  • 我昨天实现的,经过测试,我意识到VPN IP可能与LAN IP相似(测试机器上的LAN-172.16.0.47 vs VPN-172.16.0.97)
【解决方案2】:

在解决了这个问题之后,我意识到远程字符串上的适配器由于安全问题而无法公开。因此,我们无法准确地知道哪个 IP 地址是 VPN。

此外,VPN 地址是由 VPN 服务器创建的。因此,该 VPN 地址可以是任何东西,甚至类似于我们的本地 IP。换句话说,我们无法以任何方式猜测 VPN 地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 2014-04-15
    • 2010-09-12
    • 2011-11-04
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多