繁体   English   中英

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

[英]How to Know an IP Address is Local or not on Linux Server

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

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

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

专用地址范围是:

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函数来列出本地地址

如果在请求连接的计算机的IP地址上运行traceroute ,则应该能够查看该路由是否将您带入“公司外部的网关”(通常是ISP)。 我家中的一个简单示例是内部路由器连接到的Time Warner网关。 如果到客户端的路由没有通过ISP(如您所提到的,您具有DSL链接;因此应该知道DSL端点的IP地址),则它是一个内部请求。 这并不需要您了解公司内部IP地址的完整地图-您可以假设路由器知道了该地址。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM