我们正在使用C/C++在Linux上开发一个服务器软件,该软件将限制来自Internet的请求的下载速率,但对于来自本地计算机(intranet)的请求则不会设置任何限制。
问题是如何判断一个IP地址是本地的还是非本地的,是否可以通过c/c++读取一些网络号码设置(可能是从路由器?)?
更新
当我说本地ip的时候,我的意思是它来自公司内部。例如,假设公司有三个子网(该公司只有一个到internet的DSL链接),它们是10.123.1.xxx、172.16.1.xxx和192.168.1.xxx,那么这三个子网的所有ip地址都应该被视为本地地址。
发布于 2013-11-14 13:39:10
私人地址范围是:
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)您还可以筛选出链接本地地址(169.254/16)。
然后,您可以在代码中解析ip地址(要获取地址,可以使用avahi或其他类似的地址,并将所有地址保存到一个文件中,然后单独解析每个地址),并检查其是否与这些地址匹配。如果它不限制它的连接
编辑
您还可以使用起义函数来列出本地地址。
发布于 2013-11-14 17:08:35
如果您在请求连接的机器的IP地址上运行一个traceroute,您应该能够看到该路由是否带您通过“公司之外的网关”(通常是您的ISP)。我家里的一个简单的例子就是我的内部路由器连接的时代华纳网关。如果到达客户端的路由不通过ISP (正如您前面提到的,您有DSL链接;因此应该知道DSL端点的IP地址),那么它就是一个内部请求。这并不要求你知道公司内部IP地址的完整地图--你可以假设你的路由器已经知道了。
要获得这些信息,您可以在程序内部运行一个系统命令并解析响应。
首先,从命令行(具有已知的“内部”和“外部”IP地址)运行它,并查看差异。如果你在那之后需要进一步的帮助,请用你收集到的信息更新你的问题。
https://stackoverflow.com/questions/19979084
复制相似问题