¿Cómo encontrar todos los rangos de IP que pertenecen a un determinado AS?

13

Quiero saber qué rangos de IP pertenecen, por ejemplo, al AS714.

¿Cómo obtengo esta información?

Sé hacer lo contrario, lo cual es fácil con whois. Pero la otra forma no parece ser tan fácil.

JohnnyFromBF
fuente
¿Desea rangos de direcciones IP que se originan en este AS? (Clientes directos que no tienen un AS) ¿Qué pasa con los rangos de direcciones IP solo accesibles a través de este AS? (Clientes que tienen su propio AS.) ¿Qué pasa con los rangos de direcciones IP accesibles a través de este AS pero también de otros proveedores AS? (Clientes de casas múltiples.)
David Schwartz
1
El propósito era averiguar todos los rangos de IP que posee mi proveedor. Obtuve esta información visitando bgp.potaroo.net/as1221/asnames.txt para averiguar el número AS y ripe.net/data-tools/stats/ris/routing-information-service para obtener toda la IP se extiende a través de la pestaña de prefijos. ¿Conoces otras posibilidades?
JohnnyFromBF

Respuestas:

17

Se enumeran en línea con detalles relacionados en http://ipinfo.io/AS714 (reemplace el ASN para obtener los detalles equivalentes para cualquier otro ASN).

Si, en lugar de buscarlos, prefiere tomarlos mediante programación, puede usar el servidor whois RADb:

$ whois -h whois.radb.net -- '-i origin AS714' | grep -Eo "([0-9.]+){4}/[0-9]+" | head
17.108.0.0/16
17.106.0.0/15
17.102.0.0/16
17.207.0.0/16
17.216.0.0/16
17.250.48.0/24
17.252.65.0/24
192.35.50.0/24
17.148.0.0/14
17.86.0.0/17
Ben Dowling
fuente
1
Gracias por esta respuesta Ahora puedo crear fácilmente listas de bloqueo SMTP para proveedores de alojamiento abusivos.
Jari Turkia
Como referencia, estos otros registros de enrutamiento también deberían funcionar.
JakeGould
3

Para cualquiera que encuentre esto, me gustó mucho la respuesta de Ben Dowling . Sin embargo según:

http://www.radb.net/support/query2.php

¡Hay una forma diferente que también produce resultados muy diferentes ! Estaba probando una IP de Facebook que no apareció en Bens '| Resultados principales. Según el enlace anterior, la forma correcta de consultar las direcciones IP4 sería:

whois -h whois.radb.net '!gas714'

Igualmente agradable es el hecho de que ahora puede encontrar todas las direcciones IP6 con:

whois -h whois.radb.net '!6as714'

Como digo, cuando ejecuté esto para el ASN de Facebook, encontré mi dirección IP faltante.

Actualización posterior

¡Lamentablemente, Radb.net no da los datos correctos! Pruebe, ASN 19281por ejemplo, y verá los resultados dados, pero si simplemente radica.net whois sin parámetros, dirá "No se encontraron registros". No parece lo suficientemente preciso en mi humilde opinión.

Antonio
fuente
Este método tiene algunos problemas con listas largas, como Facebook, es decir. whois -h whois.radb.net -- '!6as32934'que se "recorta" con una nueva línea en el medio de las direcciones
Hvisage
lo que significa que debería usar nc, como en:echo '!6as32934'|nc whois.radb.net 43
Hvisage
1

Descubrí que realmente no se pueden automatizar las consultas a bgp.he.net, seguí recibiendo 403 respuestas y luego, cuando fingí un agente de usuario, trató de verificar que realmente era un navegador real. Fallé en todo con bgp.he.net (incluso contactando el sitio).

Lo que sí funcionó para mí fue consultar http://ipinfo.io como dijo Ben Dowling en otra respuesta.

Hice un script de Python para obtener cada bloque de IP por ASN. Tenía una lista de cada número AS en un archivo csv. aquí está:

import requests
from bs4 import BeautifulSoup
import re


url_base = 'http://ipinfo.io/'
as_base = 'AS'

output = open('ip_per_asn.csv', 'w')
with open('chilean_asn.csv') as f:
    lines = f.read().splitlines()
    for asn in lines:
        ASN = as_base + asn
        page = requests.get(url_base+ASN)
        html_doc = page.content
        soup = BeautifulSoup(html_doc, 'html.parser')
        for link in soup.find_all('a'):
            if asn in link.get('href'):
                auxstring = '/'+as_base+asn+'/'
                line = re.sub(auxstring, '', link.get('href'))
                printstring = asn+','+line+'\n'
                if 'AS' not in printstring:
                    output.write(printstring)
        print asn+'\n'

print 'script finished'

Dicho esto, también puedes usar curl con ipinfo.io. Solo trata de ser cortés y no hagas consultas absurdamente grandes a los servidores.

Tomás Lobo
fuente