给定一个 IPv4 地址,如何仅使用命令行工具判断哪个 ASN(自治系统编号)托管该地址?
答案1
找出谁是现在宣布一个地址,您必须查看 BGP 连接的路由器(例如 routeservers.org 上的公共路由器)的路由表,或者查询定期收集公告的在线数据库。
常用的服务是威尔士 IP 到 ASN 映射数据库,可通过各种协议访问,如 DNS(用于自动查询)、HTTP 或 WHOIS(仅用于手动查询):
$ dig +short google.com
172.217.x.y
$ dig +short -t TXT y.x.217.172.origin.asn.cymru.com
"15169 | 172.217.0.0/16 | US | arin | 2012-04-16"
$ whois -h whois.cymru.com 172.217.x.y
AS | IP | AS Name
15169 | 172.217.x.y | GOOGLE, US
另一项服务是RIPE RISwhois(与常规 RIPE WHOIS DB 不同):
$ whois -h riswhois.ripe.net 172.217.x.y
...
route: 172.217.0.0/16
origin: AS15169
descr: GOOGLE, US
lastupd-frst: 2019-10-31 10:45Z 198.32.243.219@rrc16
lastupd-last: 2020-03-05 23:53Z 80.81.192.244@rrc12
...
(请注意,AS 位置并不总是与设备的物理位置相对应;它可能位于不同的国家/地区。在此示例中,地址范围位于不同的大陆完全。)
请注意,在某些情况下,可能会有多个 AS 宣布相同的前缀,并且哪个 AS 可见可能取决于您(或数据库)的位置。尝试查询 AS 编号192.88.99.1
!
甚至可能是某个 AS 宣布了该地址,不是应该宣布它(BGP 劫持)。要找出谁是预计公布地址,查询路由数据库,例如 RADb 或 RIPE WHOIS 服务器。
$ whois -T route -h whois.ra.net 172.217.x.y
route: 172.217.169.0/24
descr: Google
origin: AS15169
...
答案2
您可以使用另一个数据库来确定这一点知识产权指南,每 8 小时更新一次。例如,您可以使用以下curl
命令确定宣布 8.8.8.8 的 ASN:
$ curl -sL https://ip.guide/8.8.8.8 | jq .network.autonomous_system.asn
15169
(请注意,这jq
不是必需的,但可以从响应中提取 JSON 的特定部分)