如何知道Linux服务器上的IP地址是否为本地

时间:2013-11-14 13:35:38

标签: c++ linux networking ip

我们正在使用C / C ++在Linux上开发服务器软件,该软件将限制来自Internet的请求的下载速率,但对于来自本地计算机(Intranet)的请求,它不会设置任何限制。

问题是如何判断IP地址是否为本地,是否可以通过读取某些网络号设置(可能来自路由器?)通过c / c ++来实现?

更新
当我说本地IP时,我的意思是它来自公司内部。例如,假设公司有三个子网(该公司只有一个到互联网的DSL链接),它们是10.123.1.xxx,172.16.1.xxx和192.168.1.xxx,那么这三个子网的所有IP地址应被视为当地地址。

2 个答案:

答案 0 :(得分:0)

私人地址范围是:

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或类似内容的地址并将所有地址保存到文件中,然后单独解析每个地址)并检查它是否与这些地址匹配。如果没有则限制其连接

修改

您还可以考虑使用将列出本地地址的getifaddrs函数

答案 1 :(得分:0)

如果您在请求连接的计算机的IP地址上运行traceroute,您应该能够看到路由是否会带您通过“公司外部的网关”(通常是您的ISP)。我家里的一个简单例子是我的内部路由器连接的时代华纳网关。如果到客户端的路由没有通过ISP(如你所提到的,你有一个DSL链接;所以应该知道DSL端点的IP地址),那么这是一个内部请求。这并不需要您知道公司内部的IP地址的完整地图 - 您可以假设您的路由器已经弄明白了。

要获取此信息,您可以从程序内部运行系统命令并解析响应。

首先,从命令行运行它(使用已知的“内部”和“外部”IP地址),然后查看差异。如果您在此之后需要进一步的帮助,请使用您收集的信息更新您的问题。