如何检查有效的公共IP地址?


39

考虑X-Forwarded-For HTTP标头提供的IP地址列表:

10.0.0.142,192.168.0.10,212.43.234.12,54.23.66.43

我想知道哪个是该列表中第一个可供公众访问的地址。我可以很容易地查看它们,但是我怎么知道哪些可以公开访问呢?在我看来(我那未经训练的眼睛)10.0.0.142是一个工作站,192.168.0.10是一个内部代理,并且212.43.234.12是可通过代理转发的可公开访问地址,网址为54.23.66.43。有什么办法可以在代码中计算出来吗?

我的第一个直觉是,地址开头10.192.不可公开访问,但http://simplesniff.com透露我的家庭IP地址为192.117.111.61。是否有公式确定哪些地址是公共地址,哪些保留了私有地址?请注意,即使尝试对有问题的服务器执行ping操作也可能无济于事,因为某些服务器无法响应ping操作,并且本地网络上也可能有一个地址也与内部地址匹配。


3
我还要指出,即使您发现一个可路由的地址,一些公司也会内部滥用公共地址空间。我有一个非常大的知名公司名称的第一手知识,该公司名称在其内部公司网络上而不是RFC1918空间上莫名其妙地使用了AFRINIC和AT&T IPv4空间...它们代理所有HTTP流量...以及X-Forwarded -对于来自其公司网络的标头,将显示他们实际上不拥有的公共空间。
Mike Pennington

@MikePennington对此也有第一手经验,除了他们使用的是APNIC编号。当内部计算机(尤其是那些发现目标位于其子网中的计算机)尝试访问其中一台公共服务器时,也会引起问题……
emynd 2013年

@MikePennington-对于使用在专用网络(即Internet)之外实际使用的公用IPv4地址的专用网络,专用网络内部的人将如何访问IP地址在相同范围内的公共站点?该请求是否不会路由到专用网络中的某些计算机(甚至可能是他们自己的计算机)?
凯文·费根

盲目相信x-for-for是一个主意。对于任何滥用者而言,设置一个虚假的x-for-for标头声明他们想要的任何地址都是不重要的。
彼得·格林

Answers:


24

RFC 1918定义了专用IP地址范围。在这里看看

从该文档中:

  1. 专用地址空间

    Internet号码分配机构(IANA)已为私有Internet保留了以下三个IP地址空间块:

    10.0.0.0-10.255.255.255(前缀10/8)

    172.16.0.0-172.31.255.255(172.16 / 12前缀)

    192.168.0.0-192.168.255.255(192.168 / 16前缀)


谢谢。我觉得有趣的是127.0.0.0/16(可能还有更多)不在该列表中。
dotancohen


4
@dotancohen:回送块是/ 8,而不是/ 16,并且不在该列表中,因为它不是私有地址空间。
Blrfl

@Blrfl:谢谢,我不确定回送块的宽度。我实际上并不是在寻找私有地址,而是非公共地址(其子集是私有的)。除了RFC 1918/6890地址和127.0.0.0/8空间之外,还有其他明显的非公共地址吗?
dotancohen


37

除了原始的RFC 1918空间(现在已更新为RFC6890)之外,还有其他几个块(例如192.0.2.0)尚未公开宣布。此外,有人可能拥有有效的IPv4空间,而公共Internet却没有公布该空间。

最简单的操作是telnet route-views.oregon-ix.net,以as身份登录rviews并自己寻找...例如,这是AS7018(AT&T)宣布的“ 192”空间...

route-views>sh ip route 192.199.1.0
Routing entry for 192.199.1.0/24
  Known via "bgp 6447", distance 20, metric 0
  Tag 7018, type external
  Last update from 12.0.1.63 3w1d ago
  Routing Descriptor Blocks:
  * 12.0.1.63, from 12.0.1.63, 3w1d ago
      Route metric is 0, traffic share count is 1
      AS Hops 2
      Route tag 7018

route-views>

另一方面,您会发现找不到192.0.2.0/24(ref RFC6890)...

route-views>sh ip route 192.0.2.0 255.255.255.0
% Subnet not in table
route-views>

也不是169.254.0.0/16(或更长时间)...

route-views>sh ip route 169.254.0.0 255.255.0.0 longer
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 128.223.51.1 to network 0.0.0.0

route-views>

1
RFC 1918还没有被(或)RFC 6890更新RFC 6890只是“ 重申了IPv4地址块(192.0.0.0/24)到IANA的分配。它也指示IANA重组其IPv4和IPv6特殊用途地址注册机构。 “这不更新IPv4的特殊用途地址注册表项私用和IPv4地址块192.0.0.0/24被归类为” IETF协议分配。”
一次

2
@ one.time,RFC 6890包含RFC 1918中保留的地址空间的超集。我不知道为什么要谈论192.0.0.0/24;为什么?也许您应该更仔细地阅读我的回答:-)
Mike Pennington

IPv4块192.0.0.0/24是RFC 6890的主要论点,因此我参考它是为了很好地衡量和与RFC 1918进行比较。“除了原始RFC 1918空间(现在已更新为RFC6890)”阅读您的帖子时激发了我的好奇心。除了为包含192.0.0.0.24的IPv4和IPv6的专用地址注册表项进行更新之外,RFC 6890并不是对RFC 1918的更新。我只是想提供一个关于该语句准确性的观察。HTHs ;-)
2013年

5
@ one.time,古怪地讲RFC 6890并不是对RFC 1918的更新。从功能上讲,当考虑在公共BGP表中有效的IP空间时,应该使用RFC 6890而不是RFC 1918 ...
Mike Pennington

13

Team Cymru为IPv4和IPv6提供了一个纯文本参考,您可以使用它们来过滤出未分配/保留/私有IP地址-它既作为已知前缀的简单列表提供,又在更大的列表中提供,包括RIR尚未分配。

他们还运行一个BGP Bogon服务器,您可以请求该服务器连接一个免费的对等服务器-如果您无法运行到Internet的默认默认区域,这将非常有用。


2
坦白说,“未分配”是没有用的过滤功能,过滤会导致更多的问题,无法解决。实际的多边形很容易,因为它们非常稳定/静态。
ytti

2
好的,那就别用了,就像我说的那样,它们提供了多种口味。
Olipro

2

有许多范围是为各种用例保留的。IANA拥有权威而全面的清单。它包括RFC1918,RFC6761以及最近的保留,例如100.64 / 10 CGN块。如果您在其中找到任何地址,则它们可能会以某种方式在专用网络中使用,因此应丢弃它们,以取而代之,以便寻找第一个公共地址。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.