Come verificare un indirizzo IP pubblico valido?


39

Considera un elenco di indirizzi IP come fornito dall'intestazione HTTP X-Forwarded-For :

10.0.0.142, 192.168.0.10, 212.43.234.12, 54.23.66.43

Vorrei sapere qual è il primo indirizzo accessibile al pubblico in tale elenco. Posso esaminarli abbastanza facilmente, ma come posso sapere quali sono accessibili al pubblico? Mi sembra (il mio occhio inesperto) che 10.0.0.142sia una workstation, 192.168.0.10un proxy interno ed 212.43.234.12è un indirizzo accessibile al pubblico che viene inoltrato tramite il proxy all'indirizzo 54.23.66.43. C'è un modo per calcolare questo nel codice?

La mia prima intuizione è che gli indirizzi che iniziano con 10.o 192.non sono accessibili al pubblico, ma http://simplesniff.com rivela il mio indirizzo IP di casa 192.117.111.61. Esiste una formula per determinare quali indirizzi sono pubblici e quali sono riservati privati? Si noti che anche il tentativo di eseguire il ping del server in questione potrebbe non essere utile poiché alcuni server non risponderanno al ping e potrebbe inoltre esserci un indirizzo sulla mia rete locale che corrisponda anche all'indirizzo interno.


3
Vorrei anche sottolineare che anche se si trova un indirizzo instradabile, alcune aziende abusano dello spazio degli indirizzi pubblici internamente. Ho una conoscenza di prima mano di un nome aziendale molto grande e noto che utilizza inspiegabilmente lo spazio AFRINIC e AT&T IPv4 sulla loro rete aziendale interna anziché lo spazio RFC1918 ... delegano tutto il traffico HTTP ... e X-Forwarded -Per l'intestazione dalla loro rete aziendale mostrerà lo spazio pubblico che in realtà non possiedono.
Mike Pennington,

Esperienza diretta di @MikePennington anche su questo, tranne per il fatto che stavano usando numeri APNIC. Potrebbe anche causare un problema quando una macchina interna (in particolare quelli che trovano la destinazione nella loro sottorete) tenta di accedere a uno dei server pubblici ...
emynd

@MikePennington - per una rete privata che utilizza indirizzi IPv4 pupillari effettivamente utilizzati al di fuori della rete privata (ad es. Internet), come farebbe qualcuno all'interno della rete privata a raggiungere un sito pubblico con un indirizzo IP nello stesso intervallo? Quella richiesta non verrebbe inoltrata a qualche computer (forse anche al proprio computer) all'interno della rete privata?
Kevin Fegan,

Fidarsi ciecamente di x-forwarded-for è una cattiva idea. È banale per qualsiasi abusante impostare un'intestazione x-forwarded-for falsa che rivendichi l'indirizzo che desidera.
Peter Green,

Risposte:


24

RFC 1918 definisce intervalli di indirizzi IP privati. Dai un'occhiata qui.

Da quel documento:

  1. Spazio indirizzo privato

    L'Internet Assigned Numbers Authority (IANA) ha riservato i seguenti tre blocchi dello spazio degli indirizzi IP per Internet privati:

    10.0.0.0 - 10.255.255.255 (prefisso 10/8)

    172.16.0.0 - 172.31.255.255 (prefisso 172.16 / 12)

    192.168.0.0 - 192.168.255.255 (prefisso 192.168 / 16)


Grazie. Trovo interessante che 127.0.0.0/16(e forse di più) non siano in quella lista.
dotancohen,

5
localhost è definito in tools.ietf.org/html/rfc6761
Darryl Braaten,

4
@dotancohen: il blocco di loopback è un / 8, non un / 16 e non è in quella lista perché non è uno spazio di indirizzi privato.
Blrfl,

@Blrfl: Grazie, non ero sicuro della larghezza del blocco di loopback. In realtà non sto cercando di identificare indirizzi privati ​​ma piuttosto indirizzi non pubblici (un sottoinsieme dei quali è privato). Oltre agli indirizzi RFC 1918/6890 e allo spazio 127.0.0.0/8, ci sono altri indirizzi ovviamente non pubblici che si potrebbero incontrare?
dotancohen,

1
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

Oltre allo spazio originale RFC 1918 (che ora è aggiornato a RFC6890 ), ci sono molti altri blocchi come 192.0.2.0 che non sono stati annunciati pubblicamente. Inoltre, è possibile che qualcuno disponga di uno spazio IPv4 valido che non è stato annunciato nella rete Internet pubblica.

La cosa più semplice da fare è telnet route-views.oregon-ix.net, accedi come rviewse cerca te stesso ... per esempio, questo è uno spazio "192" annunciato da 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>

D'altra parte, vedrai che 192.0.2.0/24 (rif RFC6890 ) non si trova da nessuna parte ...

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

Né è 169.254.0.0/16 (o più) ...

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 non è stato aggiornato da (o su) RFC 6890. RFC 6890 semplicemente " ribadisce l'assegnazione del blocco di indirizzi IPv4 (192.0.0.0/24) a IANA. Inoltre, istruisce IANA a ristrutturare i suoi indirizzi IPv4 e IPv6 per scopi speciali Registries. "Non aggiorna le voci di registro degli indirizzi per scopi speciali IPv4 per uso privato e il blocco di indirizzi IPv4 192.0.0.0/24 è classificato come" Assegnazioni protocollo IETF ".
one.time

2
@ one.time, RFC 6890 contiene un superset dello spazio degli indirizzi riservato in RFC 1918. Non ho idea del perché tu stia parlando di 192.0.0.0/24; forse dovresti rileggere più attentamente la mia risposta :-)
Mike Pennington,

il blocco IPv4 192.0.0.0/24 è uno dei principali punti di discussione di RFC 6890, quindi ho fatto riferimento ad esso per una buona misura e confronto con RFC 1918. "Oltre allo spazio originale RFC 1918 (che ora è aggiornato a RFC6890)" è ciò che ha suscitato la mia curiosità durante la lettura del tuo post. A parte un aggiornamento delle voci di registro degli indirizzi speciali per IPv4 e IPv6 per l'inclusione di 192.0.0.0.24, RFC 6890 non è un aggiornamento di RFC 1918. Volevo solo fornire un'osservazione sull'accuratezza della dichiarazione. HTH ;-)
one.time

5
@ one.time, pedanticamente RFC 6890 non è un aggiornamento di RFC 1918. Funzionalmente, si dovrebbe usare RFC 6890 invece di RFC 1918 quando si considera lo spazio IP valido in una tabella BGP pubblica ...
Mike Pennington

13

Il team Cymru fornisce un riferimento bogon sia per IPv4 che per IPv6 che è possibile utilizzare per filtrare gli indirizzi IP non assegnati / riservati / privati ​​- è offerto sia come un semplice elenco per prefissi noti sia anche in un elenco molto più ampio che include spazio che è non ancora assegnato dai RIR.

Eseguono anche un server bogon BGP a cui è possibile richiedere un peering gratuito - inestimabile se non si è in grado di eseguire una zona priva di default su Internet.


2
Francamente "non assegnato" è qualcosa che è inutile filtrare, filtrarlo causa molti più problemi di quanti ne risolva. E i bogon effettivi sono facili, poiché sono molto stabili / statici.
Sì,

2
OK, quindi non usarlo, come ho detto, offrono una varietà di sapori.
Olipro,

2

Esistono numerosi intervalli riservati per vari casi d'uso. IANA ha l' elenco autorevole e completo . Include RFC1918, RFC6761 e prenotazioni più recenti come il blocco CGN 100.64 / 10. Se trovi degli indirizzi lì dentro, probabilmente sono usati in qualche modo in una rete privata e dovrebbero essere scartati a favore degli altri in cerca del primo indirizzo pubblico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.