Como verificar um endereço IP público válido?

39

Considere uma lista de endereços IP, conforme fornecido pelo cabeçalho HTTP X-Forwarded-For :

10.0.0.142, 192.168.0.10, 212.43.234.12, 54.23.66.43

Gostaria de saber qual é o primeiro endereço acessível ao público nessa lista. Posso examiná-los com bastante facilidade, mas como saber quais são acessíveis ao público? Parece-me (meu olho destreinado) que 10.0.0.142é uma estação de trabalho, 192.168.0.10é um proxy interno e 212.43.234.12é um endereço acessível ao público sendo encaminhado pelo proxy em 54.23.66.43. Existe alguma maneira de calcular isso no código?

Minha primeira intuição é que endereços que começam com 10.ou 192.não são acessíveis ao público, mas http://simplesniff.com revela que meu endereço IP residencial é 192.117.111.61. Existe uma fórmula para determinar quais endereços são públicos e quais são reservados privados? Observe que mesmo tentar executar o ping no servidor em questão pode não ajudar, pois alguns servidores não respondem ao ping e também pode haver um endereço na minha rede local que também corresponda ao endereço interno.

dotancohen
fonte
3
Eu também apontaria que, mesmo que você ache um endereço roteável, algumas empresas abusam internamente do espaço público. Eu tenho conhecimento em primeira mão de um nome corporativo muito grande e conhecido que inexplicavelmente usa o espaço AFRINIC e AT&T IPv4 em sua rede corporativa interna em vez do espaço RFC1918 ... eles proxy todo o tráfego HTTP ... e o X-Forwarded -Para cabeçalho de sua rede corporativa mostrará espaço público que eles realmente não possuem.
Mike Pennington
@ MikePennington experiência em primeira mão disso também, exceto que eles estavam usando números APNIC. Também poderia causar um problema quando uma máquina interna (especialmente aqueles que encontrar o destino para a sua sub-rede) tenta acessar um dos servidores públicos ...
emynd
@ MikePennington - para uma rede privada usando endereços IPv4 puplic que são realmente usados ​​fora da rede privada (por exemplo, a Internet), como alguém dentro da rede privada alcançaria um site público com um endereço IP no mesmo intervalo? Essa solicitação não seria encaminhada para algum computador (mesmo talvez para o próprio computador) dentro da rede privada?
Kevin Fegan
Confiar cegamente em x-forwarded-for é uma idéia. É trivial para qualquer agressor definir um cabeçalho x-forwarded for fake, reivindicando o endereço que desejar.
Peter Green

Respostas:

24

O RFC 1918 define intervalos de endereços IP privados. Dê uma olhada aqui.

A partir desse documento:

  1. Espaço de Endereço Privado

    A Internet Assigned Numbers Authority (IANA) reservou os três blocos a seguir do espaço de endereço IP para internets privados:

    10.0.0.0 - 10.255.255.255 (prefixo 10/8)

    172.16.0.0 - 172.31.255.255 (prefixo 172.16 / 12)

    192.168.0.0 - 192.168.255.255 (prefixo 192.168 / 16)

GerryEgan
fonte
Obrigado. Acho interessante que 127.0.0.0/16(e talvez mais) não estejam nessa lista.
dotancohen
5
localhost é definido em tools.ietf.org/html/rfc6761
Darryl Braaten
4
@dotancohen: O bloco de auto-retorno é um / 8, não um / 16 e não está nessa lista porque não é um espaço de endereço privado.
Blrfl
@Blrfl: Obrigado, eu não tinha certeza da largura do bloco de loopback. Na verdade, não estou procurando identificar endereços privados, mas endereços não públicos (um subconjunto é privado). Além dos endereços RFC 1918/6890 e do espaço 127.0.0.0/8, existem outros endereços obviamente não públicos que podem ser encontrados?
dotancohen
11
en.wikipedia.org/wiki/… 240.0.0.0 - 254.255.255.254 (240.0.0.0/4 e 255.0.0.0/8)
David Houde
37

Além do espaço RFC 1918 original (agora atualizado para o RFC6890 ), existem vários outros blocos, como o 192.0.2.0, que não são anunciados publicamente. Além disso, é possível que alguém tenha um espaço IPv4 válido que simplesmente não é anunciado na internet pública.

A coisa mais simples a fazer é fazer telnet route-views.oregon-ix.netlogin rviewse procurar por si mesmo ... por exemplo, este é um espaço "192" anunciado pelo 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 outro lado, você verá que 192.0.2.0/24 (ref RFC6890 ) está longe de ser encontrado ...

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

Nem é 169.254.0.0/16 (ou mais) ...

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
fonte
11
O RFC 1918 não foi atualizado pelo (ou para) o RFC 6890. O RFC 6890 simplesmente " reitera a atribuição do bloco de endereços IPv4 (192.0.0.0/24) à IANA. Também instrui a IANA a reestruturar seu endereço de finalidade especial IPv4 e IPv6 registros. "Ele não atualiza o IPv4 Special-Purpose endereço entradas do Registro para private-Use e o bloco de endereços IPv4 192.0.0.0/24 é classificado como" IETF protocolo Atribuições ".
one.time 24/09/13
2
@ one.time, o RFC 6890 contém um superconjunto do espaço de endereço reservado no RFC 1918. Não sei por que você está falando sobre 192.0.0.0/24; talvez você deve reler a minha resposta mais de perto :-)
Mike Pennington
o bloco IPv4 192.0.0.0/24 é um dos principais pontos de discussão do RFC 6890, por isso fiz referência a ele para uma boa medida e comparação com o RFC 1918. "Além do espaço original do RFC 1918 (agora atualizado para o RFC6890)" é o que despertou minha curiosidade ao ler sua postagem. Além de uma atualização das entradas do Registro de Endereços para IPv4 e IPv6 para a inclusão de 192.0.0.0.24, a RFC 6890 não é uma atualização para a RFC 1918. Eu só queria fornecer uma observação sobre a precisão da declaração. HTHs ;-)
one.time
5
@ one.time, pedantically RFC 6890 não é uma atualização para RFC 1918. Funcionalmente, deve-se usar RFC 6890 em vez de RFC 1918, quando considerando o espaço IP, que é válida em uma tabela BGP pública ...
Mike Pennington
13

A equipe Cymru fornece uma referência falsa para IPv4 e IPv6 que você pode usar para filtrar endereços IP não atribuídos / reservados / privados - é oferecida como uma lista simples de prefixos conhecidos e também em uma lista muito maior que inclui espaço ainda não atribuído pelos RIRs.

Eles também executam um servidor BGP bogon ao qual você pode solicitar um peering gratuito - inestimável se você não conseguir executar uma zona livre de padrão na Internet.

Olipro
fonte
2
Francamente 'não atribuído' é algo que é inútil filtrar, filtrá-lo causa muito mais problemas do que resolve. E bogons reais são fáceis, pois são muito estáveis ​​/ estáticos.
ytti
2
OK, então não use esse, como eu disse, eles oferecem uma variedade de sabores.
Olipro
2

Há vários intervalos reservados para vários casos de uso. A IANA tem a lista abrangente e autorizada . Inclui RFC1918, RFC6761, bem como reservas mais recentes, como o bloco CGN 100.64 / 10. Se você encontrar algum endereço lá, é provável que ele seja usado de alguma forma em uma rede privada e deve ser descartado em favor dos outros em busca do primeiro endereço público.

kll
fonte