Como descobrir todos os intervalos de IP pertencentes a um determinado AS?

13

Quero saber quais intervalos de IP pertencem, por exemplo, ao AS714.

Como obtenho essas informações?

Eu sei fazer o caminho inverso, o que é fácil com whois. Mas o outro caminho não parece tão fácil.

JohnnyFromBF
fonte
Deseja intervalos de endereços IP originados neste AS? (Clientes diretos que não possuem um AS) E quanto aos intervalos de endereços IP acessíveis apenas através deste AS? (Clientes que possuem seu próprio AS.) E quanto aos intervalos de endereços IP alcançáveis ​​por este AS, mas também por outros ASes de provedor? (Com diversas bases clientes.)
David Schwartz
1
O objetivo era descobrir todos os intervalos de IPs que meu provedor possui. Eu obtive essas informações visitando bgp.potaroo.net/as1221/asnames.txt para descobrir o número AS e mature.net/data-tools/stats/ris/routing-information-service para obter todo o IP varia através da guia prefixos. Você conhece outras possibilidades?
31412 JohnnyFromBF

Respostas:

17

Eles estão listados on-line com detalhes relacionados em http://ipinfo.io/AS714 (substitua o ASN para obter os detalhes equivalentes para qualquer outro ASN).

Se, em vez de procurá-los, você preferir pegá-los programaticamente, poderá usar o servidor whois do 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
fonte
1
Obrigado por esta resposta. Agora eu posso criar listas de bloqueio SMTP para provedores de hospedagem abusivos facilmente.
Jari Turkia
Para referência, esses outros registros de roteamento também devem funcionar.
JakeGould #
3

Para quem encontrar isso, gostei muito da resposta de Ben Dowling . No entanto, de acordo com:

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

Existe uma maneira diferente que também produz resultados muito diferentes ! Eu estava testando um IP do Facebook que não apareceu na Bens '| resultados principais. De acordo com o link acima, a maneira correta de consultar endereços IP4 seria:

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

Igualmente agradável é o fato de agora você encontrar todos os endereços IP6 com:

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

Como eu disse - quando executei isso no Facebook ASN, encontrei meu endereço IP ausente.

Atualização posterior

Infelizmente o Radb.net não fornece os dados corretos !! Tente, ASN 19281por exemplo, e você verá os resultados apresentados, mas se você simplesmente usar o radb.net sem parâmetros, será exibido "Nenhum registro encontrado". Não parece preciso o suficiente IMHO.

Antony
fonte
Este método tem alguns problemas com longas listas, como o ie do Facebook. whois -h whois.radb.net -- '!6as32934'que será "cortada" com uma nova linha no meio dos endereços
Hvisage
que significa que você deve preferir usar nc, como em:echo '!6as32934'|nc whois.radb.net 43
Hvisage
1

Descobri que você não pode realmente automatizar consultas para o bgp.he.net, recebi 403 respostas e, quando falsifiquei um agente, ele tentou verificar se eu era realmente um navegador de verdade. Eu meio que falhei em tudo com o bgp.he.net (mesmo entrando em contato com o site).

O que DID funcionou para mim foi consultar http://ipinfo.io, como Ben Dowling disse em outra resposta.

Eu fiz um script python para obter todos os blocos de IP por ASN. Eu tinha uma lista de todos os números AS em um arquivo CSV. Aqui 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'

Dito isto, você também pode usar curl com ipinfo.io. Apenas tente ser educado e não faça consultas absurdamente grandes aos servidores.

Tomas Wolf
fonte