¿Cómo verificar una dirección IP pública válida?

39

Considere una lista de direcciones IP proporcionadas por el encabezado HTTP X-Fordered-For :

10.0.0.142, 192.168.0.10, 212.43.234.12, 54.23.66.43

Me gustaría saber cuál es la primera dirección de acceso público en esa lista. Puedo revisarlos con bastante facilidad, pero ¿cómo puedo saber cuáles son de acceso público? Me parece (mi ojo inexperto) que 10.0.0.142es una estación de trabajo, 192.168.0.10un proxy interno y 212.43.234.12es una dirección de acceso público que se reenvía a través del proxy en 54.23.66.43. ¿Hay alguna forma de calcular esto en código?

Mi primera intuición es que las direcciones que comienzan con 10.o 192.no son de acceso público, pero http://simplesniff.com revela la dirección IP de mi casa 192.117.111.61. ¿Existe una fórmula para determinar qué direcciones son públicas y cuáles están reservadas? Tenga en cuenta que incluso intentar hacer ping al servidor en cuestión podría no ayudar, ya que algunos servidores no responderán al ping, y también podría haber una dirección en mi red local que también coincidía con la dirección interna.

dotancohen
fuente
3
También quisiera señalar que incluso si encuentra que una dirección es enrutable, algunas compañías abusan internamente del espacio de direcciones públicas. Tengo conocimiento de primera mano de un nombre corporativo muy grande y conocido que utiliza inexplicablemente el espacio AFRINIC y AT&T IPv4 en su red corporativa interna en lugar del espacio RFC1918 ... representan todo el tráfico HTTP ... y el X-Forward -Para el encabezado de su red corporativa mostrará espacio público que en realidad no posee.
Mike Pennington
La experiencia de primera mano de @MikePennington de esto también, excepto que estaban usando números APNIC. También podría causar un problema cuando una máquina interna (especialmente aquellas que encuentran que el destino está en su subred) intenta acceder a uno de los servidores públicos ...
emynd
@MikePennington: para una red privada que utiliza direcciones IPv4 públicas que se usan realmente fuera de la red privada (es decir, Internet), ¿cómo podría alguien dentro de la red privada llegar a un sitio público con una dirección IP en ese mismo rango? ¿No se enrutaría esa solicitud a alguna computadora (incluso quizás a su propia computadora) dentro de la red privada?
Kevin Fegan
Confiar ciegamente en X-Forward-For es una mala idea. Es trivial para cualquier abusador establecer un encabezado falso-reenviado-x para reclamar cualquier dirección que deseen.
Peter Green

Respuestas:

24

RFC 1918 define rangos de direcciones IP privadas. Echa un vistazo aquí.

De ese documento:

  1. Espacio de direcciones privadas

    La Autoridad de Números Asignados de Internet (IANA) ha reservado los siguientes tres bloques del espacio de direcciones IP para Internet privadas:

    10.0.0.0 - 10.255.255.255 (prefijo 10/8)

    172.16.0.0 - 172.31.255.255 (prefijo 172.16 / 12)

    192.168.0.0 - 192.168.255.255 (prefijo 192.168 / 16)

GerryEgan
fuente
Gracias. Me parece interesante que 127.0.0.0/16(y tal vez más) no estén en esa lista.
dotancohen
55
localhost se define en tools.ietf.org/html/rfc6761
Darryl Braaten el
44
@dotancohen: el bloque de bucle invertido es un / 8, no un / 16 y no está en esa lista porque no es un espacio de direcciones privadas.
Blrfl
@Blrfl: Gracias, no estaba seguro de qué tan ancho es el bloque de bucle invertido. En realidad, no busco identificar direcciones privadas, sino direcciones no públicas (un subconjunto de las cuales es privado). Además de las direcciones RFC 1918/6890 y el espacio 127.0.0.0/8, ¿hay otras direcciones obviamente no públicas que se puedan encontrar?
dotancohen
1
en.wikipedia.org/wiki/… 240.0.0.0 - 254.255.255.254 (240.0.0.0/4 y 255.0.0.0/8)
David Houde
37

Además del espacio original RFC 1918 (que ahora se actualiza a RFC6890 ), hay varios otros bloques como 192.0.2.0 que no se anuncian públicamente. Además, es posible que alguien tenga un espacio IPv4 válido que simplemente no se anuncie en Internet público.

Lo más sencillo es telnet route-views.oregon-ix.netiniciar sesión rviewsy buscar por sí mismo ... por ejemplo, este es un espacio "192" anunciado por AS7018 (AT&T) ...

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>

Por otro lado, verá que 192.0.2.0/24 (ref RFC6890 ) no se encuentra en ninguna parte ...

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

Tampoco 169.254.0.0/16 (o más) ...

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>
Mike Pennington
fuente
1
RFC 1918 no ha sido actualizado por (o para) RFC 6890. RFC 6890 simplemente " reitera la asignación del bloque de direcciones IPv4 (192.0.0.0/24) a IANA. También le indica a IANA que reestructure su dirección de propósito especial IPv4 e IPv6 Registries. "No actualiza las entradas de registro de direcciones de propósito especial IPv4 para uso privado y el bloque de direcciones IPv4 192.0.0.0/24 se clasifica como" Asignaciones de protocolo IETF ".
one.time
2
@ one.time, RFC 6890 contiene un superconjunto del espacio de direcciones reservado en RFC 1918. No tengo idea de por qué está hablando de 192.0.0.0/24; tal vez deberías releer mi respuesta más de cerca :-)
Mike Pennington
el bloque IPv4 192.0.0.0/24 es uno de los principales puntos de conversación de RFC 6890, así que hice referencia a él para una buena medida y comparación con RFC 1918. "Además del espacio original RFC 1918 (que ahora se actualiza a RFC6890)" es lo que despertó mi curiosidad al leer tu publicación. Además de una actualización de las entradas de registro de direcciones de propósito especial para IPv4 e IPv6 para la inclusión de 192.0.0.0.24, RFC 6890 no es una actualización de RFC 1918. Solo quería proporcionar una observación con respecto a la precisión de la declaración. HTHs ;-)
one.time
55
@ one.time, pedantemente RFC 6890 no es una actualización de RFC 1918. Funcionalmente, se debe usar RFC 6890 en lugar de RFC 1918 cuando se considera el espacio IP que es válido en una tabla pública de BGP ...
Mike Pennington
13

Team Cymru proporciona una referencia de bogon para IPv4 e IPv6 que puede usar para filtrar direcciones IP privadas / no asignadas / reservadas: se ofrece como una lista simple para prefijos conocidos y también en una lista mucho más grande que incluye espacio que es aún no asignado por los RIR.

También ejecutan un servidor de bogon BGP al que puede solicitar un emparejamiento gratuito, invaluable si no puede ejecutar una zona libre predeterminada en Internet.

Olipro
fuente
2
Francamente 'no asignado' es algo que es inútil filtrar, filtrar causa muchos más problemas de los que resuelve. Y los bogons reales son fáciles, ya que son muy estables / estáticos.
ytti
2
OK, entonces no uses ese, como dije, ofrecen una variedad de sabores.
Olipro
2

Hay varios rangos reservados para varios casos de uso. IANA tiene la lista completa y autorizada . Incluye RFC1918, RFC6761, así como reservas más recientes como el bloque 100.64 / 10 CGN. Si encuentra alguna dirección allí, es probable que se utilicen de alguna manera en una red privada y deben descartarse en favor de las demás en busca de la primera dirección pública.

kll
fuente