我想编写一个具有该功能的功能,如下所述
bool isLocalIp(String _ip);
_ip: The string with a ip format or a domain format (ex: 112.42.11.44 or http://abc.def.com/)
Return: True if the _ip is Local IP, False if _ip is WAN IP
我搜索过,但我没有找到任何关于此的话题。 有人可以告诉我如何编写这个函数吗?
非常感谢,
T& T公司
答案 0 :(得分:2)
本地IP与WAN IP是一个定义不明确的概念(充其量)。例如,VPN连接可以为通过WAN连接的计算机提供“本地”IP地址。
那就是说,基本的想法很简单。子网掩码用于此目的。您通常从本地IP地址开始,并查找其他地址是否是本地地址。为此,使用子网掩码and
每个地址,比较结果。如果它们不相等,它们就在不同的子网上。
但请注意,计算机可能是多宿主,这意味着它有两个或更多适配器,每个适配器可能位于不同的子网上。所以,你真的想得到所有本地适配器的列表,并检查每个适配器的地址。
这可能或不可能意味着它确实是一个WAN连接。例如,在一个规模不大的公司的校园里,你可能拥有一些至少在某种程度上都是本地的子网。
然而,对于典型的家庭用户,这将工作得很好。路由器旁边的所有东西都会使用本地子网,路由器另一端的所有东西都会有一些本地子网外的地址。
在C ++中,您可以获得适配器列表以及每个适配器的地址和子网掩码{/ 3}}。
这完全取决于您使用数字IP地址。如果您有域名,则首先需要先将其解析为数字IP地址,例如使用GetIpAddrTable
或gethostbyname
。
另请注意,我上面描述的内容实际上是针对IPv4的。 IPv6类似于一个模糊的概念,但细节是不同的,它几乎肯定需要单独的代码。
答案 1 :(得分:1)
本地IP通常是私有IP,因此在10.x.x.x
,192.168.x.x
和172.16.0.0 - 172.31.255.255
但是,本地IP也可以是公共IP,在这种情况下,您需要执行tracert
之类的操作并解释结果。