nitefood/asn

GitHub: nitefood/asn

一款集 ASN/BGP 分析、IP 信誉评估、威胁情报和可视化 Traceroute 于一体的 Bash 综合网络侦察工具。

Stars: 1859 | Forks: 194

# ASN 查询工具和 Traceroute 服务器 [![Packaging status](https://repology.org/badge/vertical-allrepos/asn.svg)](https://repology.org/project/asn/versions) #### 容器支持: [![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white)](#从容器中运行脚本) [![Google Cloud](https://img.shields.io/badge/GoogleCloud-%234285F4.svg?style=for-the-badge&logo=google-cloud&logoColor=white)](#从容器中运行脚本) #### 操作系统支持: [![Debian](https://img.shields.io/badge/Debian-D70A53?style=for-the-badge&logo=debian&logoColor=white)](#安装) [![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?style=for-the-badge&logo=ubuntu&logoColor=white)](#安装) [![Kali](https://img.shields.io/badge/Kali-268BEE?style=for-the-badge&logo=kalilinux&logoColor=white)](#安装) [![Cent OS](https://img.shields.io/badge/cent%20os-002260?style=for-the-badge&logo=centos&logoColor=F0F0F0)](#安装) [![Red Hat](https://img.shields.io/badge/Red%20Hat-EE0000?style=for-the-badge&logo=redhat&logoColor=white)](#安装) [![Rocky Linux](https://img.shields.io/badge/-Rocky%20Linux-%2310B981?style=for-the-badge&logo=rockylinux&logoColor=white)](#安装) [![Fedora](https://img.shields.io/badge/Fedora-294172?style=for-the-badge&logo=fedora&logoColor=white)](#安装) [![Arch](https://img.shields.io/badge/Arch%20Linux-1793D1?logo=arch-linux&logoColor=fff&style=for-the-badge)](#安装) [![Manjaro](https://img.shields.io/badge/Manjaro-35BF5C?style=for-the-badge&logo=Manjaro&logoColor=white)](#安装) [![Alpine Linux](https://img.shields.io/badge/Alpine_Linux-%230D597F.svg?style=for-the-badge&logo=alpine-linux&logoColor=white)](#安装) [![openSUSE](https://img.shields.io/badge/openSUSE-73BA25?logo=opensuse&logoColor=fff&style=for-the-badge)](#安装) [![FreeBSD](https://img.shields.io/badge/-FreeBSD-%23870000?style=for-the-badge&logo=freebsd&logoColor=white)](#安装) [![Nix](https://img.shields.io/badge/NIX-5277C3.svg?style=for-the-badge&logo=NixOS&logoColor=white)](#安装) [![macOS](https://img.shields.io/badge/mac%20os-000000?style=for-the-badge&logo=macos&logoColor=F0F0F0)](#安装) [![Windows](https://img.shields.io/badge/Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white)](#安装) [![Raspberry Pi](https://img.shields.io/badge/-RaspberryPi-C51A4A?style=for-the-badge&logo=Raspberry-Pi)](#安装) ### 目录: * [描述](#description) * [截图](#screenshots) * [从容器中运行脚本](#running-the-script-from-a-container) * [安装](#installation) * _可选:添加您的 [API tokens](#api-tokens) 以增强功能_ * [用法(作为命令行工具)](#usage) * [用法(作为查询和 traceroute 服务器)](#running-lookups-from-the-browser) * [用法(作为具有 JSON 输出的查询 API)](#json-output-and-api-mode) ## 描述 ASN / RPKI 有效性 / BGP 统计 / IPv4v6 / 前缀 / ASPath / 组织 / IP 信誉 / IP 地理定位 / IP 指纹识别 / 网络侦察 / 查询工具 / Web traceroute 服务器。 此脚本旨在在调查网络数据时提供一个快速的 OSINT **命令行工具**,这在事件响应场景中也很有用(具有 [批量地理定位](#bulk-geolocation-mode) 和威胁评分等功能)。 它可以作为 **侦察工具** 使用,通过查询 Shodan 获取任何类型目标(CIDR 块/URL/单个 IP/主机名)的数据。这将快速为用户提供关于开放端口、已知漏洞、目标上运行的已知软硬件等的完整分析,而无需向目标发送任何数据包。 支持结果 JSON 输出、多个同时目标以及 IP 列表文件输入。点击 [此处](#shodan-scanning-recon-mode) 了解有关 Shodan 扫描模式的更多信息。 它还可以用作 **基于 Web 的 traceroute 服务器**,通过在监听模式下运行它,并从本地或远程浏览器(通过书签小工具或自定义搜索引擎)或终端(通过 `curl`、`elinks` 或类似工具)启动查询和追踪。点击 [此处](#running-lookups-from-the-browser) 了解有关服务器模式功能的更多信息。 此外,它可以作为自托管的查询 **API 端点**,并在交互模式和服务器模式下运行时输出 JSON 格式的数据。点击 [此处](#json-output-and-api-mode) 了解有关 API 模式功能的更多信息。 #### 功能特性: * 它将为任何给定的 AS 号码查找相关的自治系统信息,包括: * **组织名称和 RIR 区域** * **IXP 存在性** (*该 AS 存在的互联网交换设施*) * **全球 AS 排名** (*源自其客户锥大小、对等关系数量等*) * **BGP 统计数据** (*邻居数量、发起的 v4/v6 前缀数量*) * **BGP 事件历史**(过去 12 个月中涉及目标 AS 的 *BGP 劫持* 和 *路由泄漏* 数量,作为 **受害者** 或 **劫持者**) * **对等关系** 按类型分离(*上游/下游/不确定*),并按观察到的 *路径计数* 排序,以提供更可靠的结果(因此,例如,前几个上游对等节点很可能是中转)。此外,还会显示 *中转/对等/客户* 数量的摘要(基于最新的 CAIDA 数据)。 * **公告前缀** 聚合到最相关的不太具体的 `INET(6)NUM` 对象(实际的 [LIR 分配](https://www.ripe.net/manage-ips-and-asns/db/support/documentation/ripe-database-documentation/rpsl-object-types/4-2-descriptions-of-primary-objects/4-2-4-description-of-the-inetnum-object))。 * 它将对单个 IP 或 DNS 结果执行 **AS 路径追踪**(使用 [mtr](https://github.com/traviscross/mtr) 并从结果中检索 AS 数据),可选择报告每个跃点的详细数据,例如 RPKI ROA 有效性、组织/网络名称、地理位置等。 * 它将检测追踪过程中经过的 **IXP**(互联网交换点),并突出显示它们以便于理解。 * 它将尝试查找任何给定 IP 或前缀的所有相关 **滥用联系人**。 * 它将对每个可能的 IP 执行 **RPKI 有效性** 查找。数据使用 [RIPEStat RPKI 验证 API](https://stat.ripe.net/docs/data_api#rpki-validation) 进行验证。对于路径追踪,该工具将从 Prefix Whois 公共服务器检索的每个跃点的 ASN/前缀对与相关的已发布 RPKI ROA 进行匹配。如果发生源 AS 不匹配或不允许的更具体前缀,它将警告用户路径中存在潜在的 **路由泄漏 / BGP 劫持** 以及违规 AS(需要 `-d` 选项,用法信息见下文)。 * *在 [这里](https://en.wikipedia.org/wiki/BGP_hijacking) 阅读有关 BGP 劫持的更多信息。* * *在 [这里](https://en.wikipedia.org/wiki/Resource_Public_Key_Infrastructure)、[这里](https://blog.cloudflare.com/rpki/) 或 [这里](https://www.ripe.net/manage-ips-and-asns/resource-management/certification) 阅读有关 RPKI 的更多信息。* * 它将根据 [下方](#geolocation) 描述的逻辑执行 **IP 地理定位** 查找。 * 地理定位可以在 **批量模式** 下进行。有关更多信息,请参见 [此处](#bulk-geolocation-mode)。 * 该脚本还可以通过查询来自 IPdeny 的 [ipblocks](https://www.ipdeny.com/ipblocks/) 资源的数据,**映射分配给任何特定国家的所有 IPv4/IPv6 CIDR 块**,该资源直接从区域注册机构(RIR)IP 块分配进行更新。有关更多信息,请参见 [下方](#mapping-the-ipv4v6-address-space-of-specific-countries)。 * 它将执行 **IP 信誉、噪声分类** 和深入的 **威胁分析** 报告(在调查来自日志文件的外部 IP 时特别有用)。 * 它将使用 Shodan 的 [InternetDB API](%5Bhttps://internetdb.shodan.io/%5D(https://internetdb.shodan.io/)) 执行 **IP 指纹识别**,并报告与目标 IP 和单个追踪跃点相关的任何已知 **漏洞**、**开放端口** 和 **服务/操作系统/硬件**(仅限详细追踪)。 * 也可以直接查询 Shodan 以获取任何类型的目标(包括 CIDR 块)。有关如何将脚本用作侦察工具的更多信息,请点击 [此处](#shodan-scanning-recon-mode)。 * 它将为目标 IP 和单个追踪跃点执行 **IP 类型识别**(*Anycast IP/移动网络/代理主机/ISP/政府/教育/数据中心或托管提供商/IXP 前缀等*)。广泛的类型分类来自 [ip-api](https://ip-api.com),而详细的 DC+区域和组织类型识别来自 [Ipapi.is](https://ipapi.is/) * 它还将识别被遍历的 **bogon** 地址,并根据相关 RFC 对其进行分类(专用地址空间/CGN 空间/测试地址/链路本地/保留等) * 可以通过 **组织名称** 进行搜索,以检索与给定公司相关的 IPv4/6 网络范围列表。如果有多个组织与搜索查询匹配,将显示一个多选菜单。 * 可以搜索 **与给定名称匹配的 ASN**,以映射给定组织的 ASN。该列表将通过每个结果的 AS 排名和有用的标签进行丰富,以突出显示发现的排名最高的 ASN。 * 可以通过分析观察到的 BGP 更新和 ASPATH,快速识别给定前缀的 **中转/上游 AS 网络**。 * 该工具还会告知用户某个前缀可能来自大型一级或多宿主网络。 * 通过选择 **JSON 输出** 并在外部解析结果,可以将查询数据集成到第三方工具中,从而将脚本转变为查询 API 端点。 每个查询选项的截图如下。 该脚本使用以下服务进行数据检索: * [Team Cymru](https://team-cymru.com/community-services/ip-asn-mapping/) * [The Prefix WhoIs Project](https://pwhois.org/) * [PeeringDB](https://www.peeringdb.com/) * [CAIDA ASRank](https://asrank.caida.org/) * [ifconfig.co](https://ifconfig.co/) * [ipify](https://www.ipify.org/) * [ipinfo.io](https://ipinfo.io) * [RIPEStat](https://stat.ripe.net/) * [RIPE IPmap](https://ipmap.ripe.net/) * [ip-api](https://ip-api.com/) * [StopForumSpam](https://www.stopforumspam.com/) * [IP Quality Score](https://www.ipqualityscore.com) * [Cloudflare Radar](https://radar.cloudflare.com/) * [ISC DSHIELD](https://isc.sans.edu/) * [GreyNoise](https://greynoise.io) * [Shodan](https://www.shodan.io/) * [NIST National Vulnerability Database](https://nvd.nist.gov/) * [Ipapi.is](https://ipapi.is/) * [RestCountries](https://restcountries.com/) * [IPdeny](https://www.ipdeny.com/) 它还在适当时提供指向以下外部服务的超链接(在 [服务器](#running-lookups-from-the-browser) 模式下): * [HE.net](https://bgp.he.net) * [BGPTools](https://bgp.tools) * [ipinfo.io](https://ipinfo.io) * [Host.io](https://host.io) * [Cloudflare Radar](https://radar.cloudflare.com/) 需要 Bash v4.2+。已在以下系统上测试: * Linux * FreeBSD * Windows (WSL2, Cygwin) * MacOS *(感谢 [Antonio Prado](https://github.com/Antonio-Prado) 和 Alessandro Barisone)* ## 截图 ### 通用用法 * *IPv4 查询,具有 IP 类型检测(Anycast,托管/DC)并分类为良好* ![ipv4lookup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/3136f5a212161245.png) * *IPv4 查询(信誉不良 IP),具有威胁分析/评分、CPE/CVE 识别和开放端口报告* ![ipv4badlookup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/dd2dc1d169161247.png) * *IP 指纹识别,具有高级数据中心+区域识别、影响目标的已知漏洞以及根据 Shodan 数据确定的蜜罐识别* ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e557cf8561161249.png) * *IPv6 查询* ![ipv6lookup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ee24db709e161250.png) * *自治系统号查询,具有 AS 排名、运营区域、BGP 统计和事件历史、对等和前缀信息* ![asnlookup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/aa38f9e0cf161253.png) * *主机名/URL 查询* ![hostnamelookup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/73d00808f8161255.png) ### AS 路径追踪 * *到 www.github.com 的 ASPath 追踪* ![pathtrace](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ff6360ee1c161258.png) * *ASPath 追踪,经过未公告的 PNI 前缀(跃点 11 处的 FASTWEB->SWISSCOM)和 IXP(通过 Equinix Ashburn 在跃点 16 处的 SWISSCOM -> RCN)* ![pathtrace_pni_ixp](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/cdd653a464161259.png) * *到 8.8.8.8详细 ASPath 追踪,在跃点 6 处经过米兰互联网交换 (MIX) IXP 对等 LAN* ![detailed_pathtrace](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1f8f39dc33161300.png) ### 按组织搜索网络 * *搜索 "github" 的组织* ![search_by_org](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/79c2d51bce161302.png) ### Shodan 扫描 * *扫描 IP 列表的 Shodan 信息* ![shodanscan](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/932521f359161304.png) ### 国家 IPv4/IPv6 CIDR 映射 * *显示分配给牙买加的 CIDR 块列表* ![country_cidr](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1bc8bec5c8161305.png) ### 批量地理定位 / 国家统计 * *从日志文件中对 IP 执行批量提取、地理定位和统计* ![bulk_geolocation](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/fa6c896ce7161307.png) ### 建议的 ASN 搜索 * *"google" 的建议 ASN(及其各自的 AS 排名)* ![asnsuggest](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7bd6d97239161309.png) ### 中转/上游查找 * *一个大型一级网络(**COMCAST**,AS7922)的前缀可通过其他一级网络(如 **COGENT** (AS174)、**LEVEL3** (AS3356) 等)访问 - 可能是通过免结算对等而不是 BGP 中转:* ![upstreamfinder_tier1_network](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a484ed1a6b161312.png) * *多宿主 AS 的中转识别(**AS30036** 以平衡的方式向 **Hurricane** 和 **GTT** 公告此前缀):* ![upstreamfinder_multihoming](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/278cf1047c161314.png) * *首选中转识别 - **中国联通 AS** 是一个大网络,但可能更喜欢俄罗斯 **TRANSTELECOM** (AS20485) 中转,而不是 **TELIA** (AS1299)、**HURRICANE** (AS6939)、**GTT** (AS3257) 和其他网络:* ![upstreamfinder_preferred_transit](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ceded70776161316.png) ## 从容器中运行脚本 要在不本地安装脚本的情况下运行它,您有以下选项: * **Docker** _(感谢 [Gianni Stubbe](https://github.com/33Fraise33), [anarcat](https://github.com/anarcat), [Francesco Colista](https://github.com/fcolista), [arbal](https://github.com/arbal))_ _注意:如果未给出任何参数,Docker 镜像默认在服务器模式下运行。这相当于将工具作为 `asn -l ::` 运行(运行服务器,绑定到所有接口 - 这是将服务器端口暴露给主机所必需的)。您可以通过显式传递 `-l [options]` 来使用不同的 [选项](#syntax) 运行服务器。还可以通过在容器中分别设置 `IQS_TOKEN`、`IPINFO_TOKEN` 和 `CLOUDFLARE_TOKEN` 环境变量(见下方的示例),来传递 [IpQualityScore](#ip-reputation-api-token-ipqualityscore)、[ipinfo.io](#geolocation-api-token-ipinfoio) 和/或 [Cloudflare](#bgp-hijack-and-route-leak-incidents-cloudflare-radar) API token(客户端和服务器运行均可)。_ 用法示例: - 启动服务器:`docker run -it -p 49200:49200 nitefood/asn` - 客户端模式:`docker run -it nitefood/asn 1.1.1.1` - 提供 IQS token:`docker run -it -e IQS_TOKEN="xxx" nitefood/asn [...]` - 提供多个 tokens:`docker run -it -e IQS_TOKEN="xxx" -e IPINFO_TOKEN="yyy" -e CLOUDFLARE_TOKEN="zzz" nitefood/asn [...]` * **Google Cloud Shell** _注意:Cloud Shell 开箱即支持服务器模式,只需点击服务器启动时显示的 **书签小工具** 链接即可访问 VM 进行远程查询。_ **1.** 通过单击以下按钮在 Cloud Shell 中克隆存储库: [![Open in Cloud Shell](https://gstatic.com/cloudssh/images/open-btn.svg)](https://shell.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https://github.com/nitefood/asn&ephemeral=true&show=terminal) **2.** 通过启动 `./cloudshell_bootstrap.sh` 准备 GCP 环境 **3.** (可选)在被要求时输入您的 [API tokens](#api-tokens) 以启用完整的脚本功能 ## 安装 此脚本需要 **BASH v4.2** 或更高版本。您可以通过从 shell 运行以下命令来检查您的版本: ``` bash -c 'echo $BASH_VERSION' ``` 安装后,您可以通过运行 `asn` 命令来使用该脚本。 ### 方法 1:安装先决条件 + 手动下载
步骤 1. 安装先决条件包

完整功能需要一些软件包: * **Debian 10 / Ubuntu 20.04(或更新版本):** apt -y install curl whois bind9-host mtr-tiny jq ipcalc grepcidr nmap ncat aha * **Debian 9 / Ubuntu 18.04(或更早版本):** apt -y install curl whois bind9-host mtr-tiny jq ipcalc grepcidr nmap git gcc make && \ git clone https://github.com/theZiz/aha.git && \ make install -C aha/ * **Alpine 3.19(或更新版本):** apk update && apk add bash ncurses nmap nmap-ncat mtr aha curl whois grepcidr3 coreutils ipcalc bind-tools jq * **Alpine 3.18(或更早版本):** apk update && apk add bash ncurses nmap nmap-ncat mtr aha curl whois coreutils ipcalc bind-tools jq && apk add -X https://dl-cdn.alpinelinux.org/alpine/v3.19/community grepcidr3 * **CentOS / RHEL / Rocky Linux 9:** dnf -y install epel-release && \ dnf -y install curl whois bind-utils mtr jq nmap nmap-ncat ipcalc aha grepcidr * **CentOS / RHEL / Rocky Linux 8:** *(感谢 [Robert Scheck](https://github.com/robert-scheck))* dnf -y install epel-release 'dnf-command(copr)' && \ dnf -y copr enable robert/ipcalc && \ dnf -y install curl whois bind-utils mtr jq nmap nmap-ncat ipcalc aha grepcidr * **CentOS / RHEL 7:** *(感谢 [Robert Scheck](https://github.com/robert-scheck))* yum -y install epel-release yum-plugin-copr && \ yum -y copr enable robert/ipcalc && \ yum -y install curl whois bind-utils mtr jq nmap nmap-ncat ipcalc aha grepcidr && \ hash -d ipcalc * **Fedora:** dnf -y install curl whois bind-utils mtr jq nmap nmap-ncat ipcalc aha grepcidr * **openSUSE Leap 15.5(或更新版本),openSUSE Tumbleweed** zypper in -y curl whois bind-utils mtr jq nmap ncat ipcalc aha grepcidr * **FreeBSD**: env ASSUME_ALWAYS_YES=YES pkg install bash coreutils curl whois mtr jq ipcalc grepcidr nmap aha * **Windows**: * **使用 [WSL2](https://docs.microsoft.com/en-us/windows/wsl/about)(推荐):** 按照 Microsoft 的 [指南](https://docs.microsoft.com/en-us/windows/wsl/install-win10#manual-installation-steps) 安装 Linux 子系统(v2)。在步骤 6 中,选择上面列出的 Linux 发行版之一(推荐 Ubuntu 20.04 LTS)。 一旦您的 WSL2 系统启动并运行,请打开 Linux 终端并按照上面针对您选择的发行版的先决条件安装说明进行操作。 * **使用 [Cygwin](https://cygwin.com/index.html):** 上面列出的用于 *Debian 10 / Ubuntu 20.04(或更新版本)* 的大多数先决条件软件包可以直接通过 Cygwin 自己的安装向导(或通过 *apt-cyg* 等脚本)获得。您仍然必须手动编译(或找到合适的第三方预编译二进制文件)*mtr*、*grepcidr* 和 *aha* 工具。有关如何执行此操作的说明可以直接在各自的项目主页上找到。

步骤 2. 脚本下载和安装

之后,要将 **asn** 脚本从您的 shell 安装到 **/usr/bin**: `curl "https://raw.githubusercontent.com/nitefood/asn/master/asn" > /usr/bin/asn && chmod 0755 /usr/bin/asn`

### 方法 2:安装脚本的打包版本 该工具的打包版本可用于以下发行版:
发行版列表

* **基于 Debian 的系统:** *(感谢 [Marcos Rodrigues de Carvalho](https://github.com/odaydebian))* sudo apt update && sudo apt install asn * **Manjaro / Arch Linux:** *(感谢 [Worty](https://github.com/worty))* yay -S asn-git * **Alpine Linux:** *(感谢 [Francesco Colista](https://github.com/fcolista))* apk update && apk add asn * **NixOS** *(感谢 [devhell](https://github.com/devhell))* * 软件包位于 [此处](https://github.com/NixOS/nixpkgs/tree/master/pkgs/by-name/as/asn) * **MacOS** *(使用 [Homebrew](https://formulae.brew.sh/formula/asn),感谢 [filippovitale](https://github.com/filippovitale))* brew install asn

### *(可选)* 将 *asn 服务器* 安装为系统服务 要使用 *systemctl* 和 *service* 等实用程序控制 **asn 服务器**,并使其在启动时自动启动,请按照以下步骤操作: 1. 创建一个名为 `/etc/systemd/system/asn.service` 的新文件,内容如下(确保您编辑 *ExecStart* 行以匹配您的安装路径和所需的启动选项): ``` [Unit] Description=ASN lookup and traceroute server After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=nobody ExecStart=/usr/bin/asn -l :: [Install] WantedBy=multi-user.target ``` 2. 为 mtr-packet 二进制文件启用 *CAP\_NET\_RAW* 功能: `setcap cap_net_raw+ep $(which mtr-packet)` *说明:这将允许 mtr-packet 在作为非特权用户启动时创建原始套接字(从而执行追踪),而无需 setuid-root 位,也无需以 root 身份调用 mtr。有关这方面的详细解释可以在 [这里](https://github.com/traviscross/mtr/blob/master/SECURITY) 找到。* 3. 现在,您可以参考标准的 systemd 实用程序来执行服务操作: * 要启动服务:`systemctl start asn` * 要停止服务:`systemctl stop asn` * 要检查其状态和最新日志:`systemctl status asn` * 要实时跟踪其日志:`journalctl -f -u asn` * 要在启动时自动启动服务:`systemctl enable asn` * 要禁用启动时的自动启动:`systemctl disable asn` ## API 令牌 该脚本可以配置为使用您的 API tokens 来增强其功能。 目前支持的 API tokens 包括: ### 地理定位 API token (ipinfo.io)
地理定位 API token 详细信息

单次查询(即,当不使用 `-g` 选项运行批量地理定位查询时)的首选地理定位提供商是 **ipinfo.io**。 默认情况下,该脚本使用免费(无 API key)层,每天支持多达 **1,000** 次地理定位请求。为了将此限制免费)提升到每月 **50,000** 次请求,需要一个 API key token。 要获取 API token,请先 [注册](https://ipinfo.io/signup),然后可以在您预留区域的 [token 部分](https://ipinfo.io/account/token) 找到 API token。复制后,token 应写入以下文件之一(按该顺序解析): `$HOME/.asn/ipinfo_token` 或 `/etc/asn/ipinfo_token` 在 **服务器模式** 下运行 asn 时应使用基于 `/etc` 的文件。如果两个文件都存在,则基于 `$HOME` 的文件优先,并且非常适合 **用户模式**(即,从命令行交互式运行 `asn`)。 为此,您可以使用以下命令: ***用户模式:*** `TOKEN=""; mkdir "$HOME/.asn/" && echo "$TOKEN" > "$HOME/.asn/ipinfo_token" && chmod -R 600 "$HOME/.asn/*"` ***服务器模式:*** `TOKEN=""; mkdir "/etc/asn/" && echo "$TOKEN" > "/etc/asn/ipinfo_token" && chmod -R 700 "/etc/asn/" && chown -R nobody /etc/asn/` 无论哪种方式,`asn` 都会在下次运行时获取您的 token(如果在服务器模式下运行,则无需重启服务),并使用它来查询 ipinfo.io API。

### IP 信誉 API token (IPQualityScore)
IP 信誉 API token 详细信息

该脚本将使用 [StopForumSpam](https://www.stopforumspam.com/) 执行第一级 IPv4/v6 信誉查找,如果匹配,则使用 [IPQualityScore](https://www.ipqualityscore.com/) API 对目标和追踪跃点执行第二级深度威胁分析。StopForumSpam API 是免费的,无需注册,并且该服务聚合了 [大量](https://www.stopforumspam.com/contributors) 黑名单源。 尽管如此,为了使用 IPQualityScore API 进行深度威胁报告,有必要为他们的服务 [注册](https://www.ipqualityscore.com/create-account)(这是免费的)并获取一个 API token(注册时将通过电子邮件发送给您),这将使您每月有权获得 5000 次免费查找。 获取后,api token 应写入以下文件之一(按该顺序解析): `$HOME/.asn/iqs_token` 或 `/etc/asn/iqs_token` 在 **服务器模式** 下运行 asn 时应使用基于 `/etc` 的文件。如果两个文件都存在,则基于 `$HOME` 的文件优先,并且非常适合 **用户模式**(即,从命令行交互式运行 `asn`)。 为此,您可以使用以下命令: ***用户模式:*** `TOKEN=""; mkdir "$HOME/.asn/" && echo "$TOKEN" > "$HOME/.asn/iqs_token" && chmod -R 600 "$HOME/.asn/*"` ***服务器模式:*** `TOKEN=""; mkdir "/etc/asn/" && echo "$TOKEN" > "/etc/asn/iqs_token" && chmod -R 700 "/etc/asn/" && chown -R nobody /etc/asn/` 无论哪种方式,`asn` 都会在下次运行时获取您的 token(如果在服务器模式下运行,则无需重启服务),并使用它来查询 IPQualityScore API。

### BGP 劫持和路由泄漏事件 (Cloudflare Radar)
Cloudflare token 详细信息

当此 token 可用时,将为 **自治系统** 目标启用额外的查找,以枚举涉及目标 ASN 的 BGP 事件(包括 **BGP 劫持** 和 **BGP 路由泄漏**)。 该脚本将使用 [Cloudflare Radar](https://radar.cloudflare.com/) API 来检索过去 12 个月内涉及目标 ASN 的事件数量。此外,它还将报告有多少事件将目标 ASN 视为 **劫持者** 或 **受害者**。 Cloudflare Radar API 是 **免费** 使用的,但需要注册。步骤如下: 1. [注册](https://dash.cloudflare.com/sign-up) 免费的 Cloudflare 帐户并 **验证您的电子邮件** 2. 从 [Cloudflare 仪表板](https://dash.cloudflare.com/profile/api-tokens/),转到 **我的个人资料 > API Tokens**。 3. 选择 **Create Token** 4. 选择 "*读取 Cloudflare Radar 数据*" 模板 5. 单击 **继续到摘要**(默认值即可) 6. 单击 **创建 token** 获取后,api token 应写入以下文件之一(按该顺序解析): `$HOME/.asn/cloudflare_token` 或 `/etc/asn/cloudflare_token` 在 **服务器模式** 下运行 asn 时应使用基于 `/etc` 的文件。如果两个文件都存在,则基于 `$HOME` 的文件优先,并且非常适合 **用户模式**(即,从命令行交互式运行 `asn`)。 为此,您可以使用以下命令: ***用户模式:*** `TOKEN=""; mkdir "$HOME/.asn/" && echo "$TOKEN" > "$HOME/.asn/cloudflare_token" && chmod -R 600 "$HOME/.asn/*"` ***服务器模式:*** `TOKEN=""; mkdir "/etc/asn/" && echo "$TOKEN" > "/etc/asn/cloudflare_token" && chmod -R 700 "/etc/asn/" && chown -R nobody /etc/asn/` 无论哪种方式,`asn` 都会在下次运行时获取您的 token(如果在服务器模式下运行,则无需重启服务),并使用它来查询 Cloudflare Radar API。

## 用法 ##### *语法* `asn [OPTIONS] [TARGET]` `asn [-v] -l [SERVER OPTIONS]` 其中 `TARGET` 可以是以下之一: * **AS 号码** \-\- 查找匹配的 ASN 和 BGP 公告/邻居数据\. 支持 "as123" 和 "123" 格式(不区分大小写) * **IPv4/IPv6/前缀** \-\- 查找匹配的路由(4/6)、IP 信誉和 ASN 数据 * **主机名** \-\- 解析主机并查找数据(与 IPv4/IPv6 查找相同\. 支持多个 IP \- e\.g\. DNS RR) * **URL** \-\- 从 URL 中提取主机名/IP 并查找相关数据\. 支持任何协议前缀、非标准端口和 [前置凭据](https://en.wikipedia.org/wiki/Basic_access_authentication#URL_encoding) * **组织名称** \-\- 按公司名称搜索并查找公司导出(或与之相关)的网络范围 选项: * `-t` * 启用目标的查找和路径追踪 **(这是默认行为)** * `-4` * 在追踪和服务器模式下强制仅使用 IPv4 连接(仅在双栈主机上有用) * `-d` * 启用详细追踪模式(更多信息见下文) * `-n` * 禁用路径追踪并仅输出查找信息 _(针对 IP 目标)_ * 禁用额外的 INETNUM/源查找 _(针对 AS 目标)_ * `-s` * 启动针对目标的 Shodan InternetDB 扫描。支持多个目标, 混合目标类型(IP/主机名/CIDR/URL)以及从标准输入管道传输。 * `-o` * 强制执行按组织搜索并跳过所有目标识别检查 * `-a` * 启用 *ASN 建议模式*。这将搜索与给定名称匹配的所有 ASN。 * `-u` * 启用 *中转/上游查找模式*。这将检查 TARGET 地址/前缀的 BGP 更新和 ASPATH,并识别可能的中转/上游自治系统。 * `-c` * 启用 *国家 CIDR 模式*。这将输出分配给指定国家的所有 IPv4/v6 CIDR 块。 * `-g` * 启用 *批量地理定位模式*。这将提取输入中的所有 IPv4/v6 地址,对其进行地理定位并绘制一些统计数据。 * `-l` * 在 *服务器模式* 下启动脚本。请参阅下面的 **服务器选项** * `-j` * 启用紧凑 JSON 输出。对于将输出馈送到其他工具(如 `jq` 或其他解析器)或存储查找结果很有用。 * `-J` * 启用漂亮的 JSON 输出。 * `-m` * 启用单色模式(禁用所有颜色)。 * `-v` * 启用调试消息(将显示所有被查询的 URL,以帮助识别外部 API 减速)。在客户端模式下,`asn` 将把所有输出(外部调用及其响应数据)记录到由 `$ASN_LOGFILE` 定义的位置(_默认情况下,日志文件位于 `$HOME/asndebug.log`_)。 * `-h` * 显示用法信息。 服务器选项: * `BIND_ADDRESS` * 将监听服务器绑定到的 IP 地址(v4/v6)(例如 `asn -l 0.0.0.0`) * `BIND_PORT` * 将监听服务器绑定到的 TCP 端口(例如 `asn -l 12345`) * `BIND_ADDRESS BIND_PORT` * 将监听服务器绑定到的 IP 地址和端口(例如 `asn -l ::1 12345`) * `-v` * 在服务器模式下启用详细输出和调试消息 * `--allow host[,host,...]` * 仅允许给定主机连接到服务器 * `--allowfile file` * 允许连接到服务器的主机文件 * `--deny host[,host,...]` * 拒绝给定主机连接到服务器 * `--denyfile file` * 拒绝连接到服务器的主机文件 * `--max-conns ` * 服务器接受的最大同时连接数。默认为 100。 ##### *默认行为:* * 如果使用 `-t`、`-n`、`-d` 调用或不带选项调用,脚本将尝试自动识别 `TARGET` 类型, * 对于涉及 IP 或主机名的所有查找,默认情况下启用 AS 路径追踪。如果有多个 IP 结果,脚本将追踪第一个 IP,如果可能的话,在用户的主机上优先选择 IPv6。 ##### *首选项文件 (`$HOME/.asnrc`)* 可以通过在用户的 **主目录** 中创建名为 `.asnrc` 的文件来覆盖选项默认值。 以下值是默认值。可以在设置文件中指定其中任何(或全部)值,并根据用户的喜好进行调整: ``` ASN_LOGFILE="$HOME/asndebug.log" MTR_TRACING=true ADDITIONAL_INETNUM_LOOKUP=true DETAILED_TRACE=false MTR_ROUNDS=5 FORCE_IPV4=false MAX_CONCURRENT_SHODAN_REQUESTS=10 SHODAN_SHOW_TOP_N=5 MONOCHROME_MODE=false ASN_DEBUG=false JSON_OUTPUT=false JSON_PRETTY=false DEFAULT_SERVER_BINDADDR_v4="127.0.0.1" DEFAULT_SERVER_BINDADDR_v6="::1" DEFAULT_SERVER_BINDPORT="49200" IQS_ALWAYS_QUERY=false IQS_CUSTOM_SETTINGS="" ``` ##### *详细模式 (`-d` | `DETAILED_TRACE=true`)* * 可以通过传递 `[-d|--detailed]` 命令行开关来启用详细的跃点信息报告和 RPKI 验证。这将启用对 mtr 追踪中每个跃点的公共 [pWhois 服务器](https://pwhois.org/server.who) 和 [RIPEStat RPKI 验证 API](https://stat.ripe.net/docs/data_api#rpki-validation) 查询。相关信息将显示为跃点数据下方的“树”,除了 Team Cymru 的服务器输出(它仅报告发起前缀的组织为其自治系统号指定的 AS 名称)。这对于弄清楚有关组织名称、前缀预期指定,甚至(在某种程度上)其地理范围的更多详细信息很有用。 此外,每当追踪中某个跃点的 RPKI 验证失败时,这将启用警告,指示路径中的哪个 AS 正在错误地公告(根据当前的 pWhois 数据)跃点前缀,这表明潜在的路由泄漏或 BGP 劫持事件。 ##### *组织搜索 (`-o`)* * 该脚本将尝试弄清楚输入是否为组织名称(即,如果它看起来不像 IP 地址、AS 号码或主机名)。 为了强制执行组织搜索(例如,对于名称中包含 `.` 的组织),请传递 `[-o|--organization]` 命令行开关。 ##### *ASN 建议 (`-a`)* * 该脚本将尝试使用 RIPEStat API 查找与给定搜索字符串匹配的 ASN。此模式可用于映射与给定公司相关的所有自治系统。 ##### *上游/中转识别 (`-u`)* * 该脚本将检查给定 IP(v4/v6)的 BGP 更新,并识别上游自治系统作为源 AS 的中转的可能性。通过与其它 BGP 对等节点相比,上游 AS 在观察到的通往目标 IP 的 ASPATH 中出现的次数,将推断出上游作为中转的概率。该脚本还将告知用户前缀是否同时向多个上游公告(例如,在 BGP 多宿主、一级前缀、Anycast 地址等情况下)。支持 JSON 模式。 ##### *服务器模式 (`-l`)* * 该脚本将启动一个 Web 服务器,允许用户直接从浏览器运行远程查询和 traceroute。 Web 服务器实际上是一个等待请求的 [ncat](https://nmap.org/ncat/) 监听器,响应通过 HTTP 协议查询的浏览器。这种界面使其可以轻松集成到用户工作流程中,无需下载任何客户端工具。 只需使用 Javascript [书签小工具](https://en.wikipedia.org/wiki/Bookmarklet) 或自定义 [搜索引擎](https://www.howtogeek.com/114176/how-to-easily-create-search-plugins-add-any-search-engine-to-your-browser/),就可以在无需离开浏览器的情况下启动远程追踪和查询。 请参阅 [本节](#running-lookups-from-the-browser) 以获取更多信息。 ## 注意事项 ##### *组织数据、IP 信誉、噪声分类和 IP 指纹识别* * 组织数据取自 pWhois * IP 信誉数据取自 StopForumSpam 和 IpQualityScore* IP 指纹识别数据从 Shodan 的 [InternetDB API](https://internetdb.shodan.io/) 检索。数据包括与 IP 地址相关的开放端口、[软件/硬件信息](https://en.wikipedia.org/wiki/Common_Platform_Enumeration) 和 [已知漏洞](https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures)。 ##### *地理定位* 该脚本将使用以下逻辑执行 IP 和追踪跃点地理定位: 1. 使用 [ipinfo.io](https://ipinfo.io/) 服务作为地理定位数据的主要来源。它根据专有的地理分布式探测器网络提供极其精确的地理定位数据,并且非常可靠 2. 使用 [ip-api](https://ip-api.com/) 服务作为地理定位数据的备用来源 3. 使用 [Prefix Whois](https://pwhois.org/) 服务作为地理定位数据的最后手段来源 ##### *IP 分类* 该脚本将使用 ip-api、ipapi.is、ipinfo.io 和 PeeringDB 服务将目标 IP 和追踪跃点分类为以下类别: * [Anycast](https://en.wikipedia.org/wiki/Anycast) IP * 移动网络 * 代理主机(TOR 出口节点/VPN/等) * 托管网络(数据中心/托管提供商/等)以及详细的 DC 和区域识别(如果可用) * IXP 网络 ##### *IXP 检测和未公告的前缀* * 该脚本将通过将它们与 [PeeringDB](https://www.peeringdb.com/) 的 IXP 前缀综合数据集进行匹配,来检测路径追踪期间经过的 [IXP](https://en.wikipedia.org/wiki/Internet_exchange_point)。 * 当 Team Cymru、pWhois 和 PeeringDB 没有关于 IP 地址或前缀的信息时,该脚本还将尝试尽最大努力通过通用的 `whois` 查找作为后备。这通常是某些 [PNI](https://en.wikipedia.org/wiki/Peering#Private_peering) 前缀的情况,并将更好地了解数据包所采用的路径。 ## 从浏览器运行查询 ##### *服务器模式的先决条件工具* 服务器模式需要两个工具才能运行:`ncat` 和 `aha`。具体来说,需要 [aha](https://github.com/theZiz/aha)(ANSI->HTML 转换器)v0.5+。在较旧的发行版(例如 Ubuntu 18.04、Debian 9)上,ncat 工具包含在 *nmap* 软件包中,而在较新的发行版上,它作为独立工具打包。 请参阅 [安装](#installation) 部分并运行适当的命令,为您的操作系统安装所需的软件包,并可选择将 asn 服务器安装为 systemd 服务。 ##### *服务器模式的优势* 从浏览器运行查询的主要优点是,每个 IP 地址和 AS 号码都会转换为超链接,只需单击它们即可执行后续查询。 查询 URL/主机名/域时,快速 WHOIS 信息和指向相关外部资源的链接将在结果中提供。 查询 AS 号码时,所有对等 ASN 都可以点击。此外,如果 AS 在公共设施处对等,则该设施的 PeeringDB 信息将直接链接。此外,还将直接链接针对目标 ASN 的其他外部 BGP 信息源。 以下是一些示例: ![srvmode_hostname_lookup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/24aa19fa38161317.png) ![srvmode_whois](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/958507a670161320.png) ![srvmode_asn_lookup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4dcaa35bb9161321.png) #### 服务器端 一旦在 **服务器模式** 下启动,`asn` 就会启动一个自定义 Web 服务器,等待浏览器请求。这是服务器端控制台的样子: ![server_console](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5e14969641161322.png) 服务器现在准备好接受浏览器请求(在这种情况下,仅来自本地机器 - 因为我是没有命令行开关启动的,默认监听 **127.0.0.1:49200**。有关可用服务器选项的更多信息,请参阅 [用法](#usage) 部分)。 #### 客户端 在浏览器中访问 [此页面](http://127.0.0.1:49200/asn_bookmarklet) 并按照说明将书签小工具复制到您的书签工具栏: ![bookmarklet_install](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/62f210402f161324.png) ##### *工作原理* 书签小工具实际上是一小段 Javascript 代码,它将抓取您当前在浏览器中访问的网站的主机名,并通过简单的 *HTTP GET* 请求将其传递给服务器。然后,服务器继续执行查找和 traceroute(从它自己的角度来看,就像从命令行交互式运行时一样),并通过 HTML 页面将结果提供给您的浏览器,模仿滚动终端的效果。 追踪完成后,系统会向用户提供一个在 [termbin](https://termbin.com/) 上共享输出的选项。这使得与其他人快速共享 traceroute 或查找输出变得容易: ![termbin](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/abaa129b7a161325.png) ![termbin_2](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/fade8223ff161326.png) #### 搜索引擎设置 为了充分利用浏览器中的 `asn`,可以将其配置为浏览器搜索栏的自定义搜索引擎。这允许利用服务器搜索 **ASN**、**URL**、**IP**、**主机名** 等,具体取决于搜索字符串。 一般来说,这意味着指示浏览器,当某个 **关键字** 前置于搜索时,以下字符(实际的 **搜索字符串**,由 `%s` 标识)必须传递给特定的 URL。然后根据此逻辑组成 URL,就像普通网页一样打开它。 我使用 `@asn` 作为我的关键字,但任何东西都可以。为了加快速度,可以使用更短的标签(例如 `#`),当在地址栏中使用时,它会自动将您的搜索引擎切换到 ASN 查询服务器。 请注意,前导 `@` 符号不是强制性的,只是很方便,因为它不会妨碍正常搜索,但在那方面有很多自由。 为了快速参考,要输入的位置 URL 字符串(对于 Firefox 和 Chrome)是:`http://127.0.0.1:49200/asn_lookup&%s`。当然,这会将查找请求发送到 *本地* 运行的 ASN 服务器。 以下是在 Firefox 和 Chrome 中添加搜索引擎的方法: ***Firefox:*** * 只需创建一个新书签并填写其详细信息,如下所示: ![searchsetup_firefox](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/43d454f597161328.png) 之后,您只需在浏览器地址栏中输入例如 `@asn 8.8.8.8`,就可以运行查询和 traceroute。 ***Chrome:*** 1. 右键单击地址栏并选择 **管理搜索引擎...** ![searchsetup_chrome_1](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/085d05382f161329.png) 2. 单击 **添加**: ![searchsetup_chrome_2](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/3652467c1a161330.png) 3. 如下所示填写详细信息: ![searchsetup_chrome_3](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b0d272e54f161331.png) 与往常一样,关键字完全可以根据您的喜好进行自定义。 ***其他浏览器:*** * 您可能需要按照 [此帖子](https://www.howtogeek.com/114176/how-to-easily-create-search-plugins-add-any-search-engine-to-your-browser/) 搜索有关如何为您选择的浏览器添加自定义搜索引擎的说明。 #### 在外部主机上运行服务器 ##### *端口转发* 为了远程访问服务器,除了绑定到 `0.0.0.0`(或适合您的场景的任何其他 IP 地址)之外,如果主机位于 NAT 路由器后面,您需要将监听端口(`BIND_PORT`)从主机/路由器外部 IP 转发到运行 ASN 服务器的实际机器。 这是一个单一的 TCP 端口(默认为 `TCP/49200`),您可以通过命令行参数更改它(请参阅 [用法](#usage))。 ##### *文本浏览器客户端* 可以从另一个命令行启动远程追踪,并直接在终端中查看结果。只需要一个兼容的文本浏览器,例如 `elinks`(但您甚至可以使用 `curl` 或任何其他工具下载结果以供以后查看)。 该脚本在其输出中使用 8 位 ANSI 颜色,因此使用 elinks 启动远程追踪的命令如下所示: `elinks -dump -dump-color-mode 3 http://:49200/asn_lookup&8.8.8.8` ##### *安全注意事项* 服务器逻辑本身非常简单:该脚本完全在 BASH 中实现了一个基本的 Web 服务器,利用它可以通过 HTTP 协议和 HTML 语言以相当简单的方式与浏览器交谈。 其核心围绕 [ncat](https://nmap.org/ncat/),这是一个非常稳定可靠的类似 netcat 的网络工具。这是实际的“服务器”,正在监听传入的连接,并在客户端连接时生成连接处理程序(即 `asn` 脚本本身的“单用途”实例)。 如果您决定将其对外开放(即:将其绑定到非本地主机的内容,并从本地计算机之外启动追踪),请记住,代码中尚未集成身份验证机制,因此理论上任何拥有正确 URL 的人都可以 *从您的服务器生成 traceroutes* 并查看结果(但请记住,服务器通过剥离任何危险字符来清理用户输入)。 为了应对这种情况,幸运的是 `ncat` 实现了强大的允许/拒绝逻辑(基于命令行参数和文件,类似于 `/etc/hosts.allow` 和 `hosts.deny`)。该脚本支持直接将参数传递给 `ncat`,因此可以充分利用其过滤功能并将服务器锁定在受信任的 IP 范围内。 可以通过运行 `asn -h` 查看可用选项和一些用法示例。 ## Shodan 扫描(侦察模式) 该工具可以在使用 `-s` 命令行开关启动时查询 Shodan 的 InternetDB API,以查找有关任何类型目标的信息。 如果扫描识别出任何漏洞,则会查询 NIST NVD API,以提供描述、任何众所周知的名称以及有关主要漏洞的了解更多信息的链接。 目前支持的目标包括: - **IP 地址** - **CIDR 块** *(将扫描范围内的所有 IP)* - **URL** - **主机名** *(将解析为 IP(或 IP 列表)并查询所有这些)* 目标类型可以混合并在单次运行中查询。目标也可以通过标准输入管道传输到工具。 *用法示例:* `asn -s 1.1.1.1 8.8.8.8 9.9.9.9` `asn -s https://www.google.com 8.8.8.0/24` `asn -s < iplist` `curl -s https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/blocklist_de_bots.ipset | asn -s` 可以通过传递 `-j` 或 `-J` 选项以 JSON 模式输出 Shodan 扫描结果。 ## 映射特定国家的 IP(v4/v6) 地址空间 该工具可以在使用 `-c` 命令行开关启动时搜索并显示分配给特定国家的所有 IPv4 和 IPv6 CIDR 块,以及一些统计数据。 * 使用前导点搜索特定的国家代码(例如 `.fr`)将直接产生法国的结果,而全文搜索将显示与搜索字符串匹配的国家代码,或者如果只找到一个匹配项,则继续显示结果。 * 包括诸如 v4 前缀长度分布、国家可用的 IPv4 地址总数、人均 IPv4 地址等统计数据。 * 支持 JSON 输出。 *用法示例:* `asn -c germany` `asn -c .de` ``` # 扫描一个随机的挪威子网以查找 CVE/CPE/open ports/hostnames: asn -jc .no | jq -r ".results[] | .ipv4[$RANDOM % .ipv4_blocks]" | asn -s ``` ## 批量地理定位模式 在此模式下,该工具将从输入数据中提取所有 IPv4 和 IPv6 地址并对它们进行地理定位。输出中包括 Anycast 检测和一般统计数据(出现次数最多的 IPv4/IPv6 地址、每个国家的 IP 数量等)。批量地理定位比正常的 `asn` 查询更快(可以在 ~5 秒内解析 300 个 IP 地址),其主要用例是从任意格式的数据流(例如服务器日志)中提取、地理定位和计算任意数量的 IP 的/出现统计。支持 JSON 输出和标准输入输入。 *用法示例:* `asn -g 1.1.1.1 8.8.8.8` ``` # 定位 webserver 客户端的地理位置 asn -g < /var/log/apache2/access.log ``` ``` # 定位已登录系统的 IP 的地理位置 last | asn -g ``` ## JSON 输出和 API 模式 #### 本地(shell 模式) 可以使用 `-j`(紧凑 JSON)或 `-J`(漂亮的 JSON)命令行选项指示该工具以 JSON 模式输出查找结果:
示例 1 - IPv4 查找

##### 命令: `asn -J 8.8.8.8` ##### 输出: ``` { "target": "8.8.8.8", "target_type": "ipv4", "result": "ok", "reason": "success", "version": "0.78.0", "request_time": "2024-08-20T02:50:28", "request_duration": 5, "api_tokens": { "ipqualityscore": true, "ipinfo": true, "cloudflare": true }, "result_count": 1, "results": [ { "ip": "8.8.8.8", "ip_version": "4", "reverse": "dns.google", "org_name": "Google LLC", "net_range": "8.8.8.0/24", "net_name": "GOGL", "abuse_contacts": [ "network-abuse@google.com" ], "routing": { "is_announced": true, "as_number": "15169", "as_name": "GOOGLE, US", "as_rank": "1788", "route": "8.8.8.0/24", "route_name": "", "roa_count": "1", "roa_validity": "valid" }, "type": { "is_bogon": false, "is_anycast": true, "is_mobile": false, "is_proxy": false, "is_dc": true, "dc_details": { "dc_name": "Google LLC" }, "is_ixp": false }, "geolocation": { "city": "Mountain View", "region": "California", "country": "United States", "cc": "US" }, "reputation": { "status": "good", "is_known_good": true, "known_as": "Google Public DNS" }, "fingerprinting": { "ports": [ 53, 443 ] } } ] } ```

示例 2 - ASN 查找

##### 命令: `asn -J 5505` ##### 输出: ``` { "target": "5505", "target_type": "asn", "result": "ok", "reason": "success", "version": "0.78.0", "request_time": "2024-08-20T02:50:46", "request_duration": 17, "api_tokens": { "ipqualityscore": true, "ipinfo": true, "cloudflare": true }, "result_count": 1, "results": [ { "asn": "5505", "asname": "VADAVO, ES", "asrank": 4448, "org": "VDV-VLC-RED06 VDV-VLC-RED06 - CLIENTES TELECOM", "holder": "VADAVO SOLUCIONES SL", "abuse_contacts": [ "abuse@vadavo.com" ], "registration_date": "2016-12-13T08:28:07", "ixp_presence": [ "DE-CIX Madrid: DE-CIX Madrid Peering LAN", "ESpanix Madrid Lower LAN" ], "prefix_count_v4": 8, "prefix_count_v6": 1, "bgp_peer_count": 36, "bgp_hijack_incidents": { "total": 0, "as_hijacker": 0, "as_victim": 0 }, "bgp_leak_incidents": { "total": 0 }, "bgp_peers": { "upstream": [ "1299", "6939", "59432", "174", "34549", "25091", "35625", "33891", "48348", "13030", "8218", "41327", "3303", "4455", "6424", "6057", "34927", "9498", "35280", "1239" ], "downstream": [ "48952", "208248", "205086", "202054" ], "uncertain": [ "24482", "51185", "41047", "29680", "212483", "198150", "14840", "49544", "39384", "37721", "36236", "25160" ] }, "announced_prefixes": { "v4": [ "185.210.225.0/24", "188.130.247.0/24", "185.210.227.0/24", "185.123.205.0/24", "185.123.207.0/24", "185.210.226.0/24", "185.123.206.0/24", "185.123.204.0/24" ], "v6": [ "2a03:9320::/32" ] }, "inetnums": { "v4": [ "185.123.204.0/22", "185.210.225.0/24", "185.210.226.0/24", "185.210.227.0/24", "188.130.247.0/24" ], "v6": [ "2a03:9320::/32" ] }, "inetnums_announced_by_other_as": { "v4": [ { "prefix": "188.130.254.0/24", "origin_asn": "", "origin_org": "", "is_announced": false } ], "v6": [] } } ] } ```

示例 3 - 枚举主机名解析到的每个 IP 的滥用联系人

##### 命令: `asn -j www.google.com | jq '[.results[].abuse_contacts[]] | unique[]'` ##### 输出: ``` "network-abuse@google.com" "ripe-contact@google.com" ```

示例 4 - 枚举目标的已知漏洞

##### 命令: `asn -j 45.67.34.100 | jq '.results[].fingerprinting.vulns[]'` ##### 输出: ``` "CVE-2017-15906" "CVE-2018-15919" ```

示例 5 - 给定 IP 的上游/中转 AS 查找

##### 命令: `asn -Ju 72.17.119.201` ##### 输出: ``` { "target": "72.17.119.201", "target_type": "ipv4", "result": "ok", "reason": "success", "version": "0.78.0", "request_time": "2024-08-20T02:54:03", "request_duration": 4, "api_tokens": { "ipqualityscore": true, "ipinfo": true, "cloudflare": true }, "result_count": 1, "results": [ { "prefix": "72.17.0.0/17", "origin_as": "33363", "origin_as_name": "BHN-33363, US", "origin_as_rank": 441, "upstreams_count": 1, "upstreams": [ { "asn": "7843", "asname": "TWC-7843-BB, US", "probability": 100, "is_tier1": false } ], "multiple_upstreams": false } ] } ```

示例 6 - 枚举给定 AS 的未公告地址块

##### 命令: `asn -j AS5505 | jq -r '.results[].inetnums_announced_by_other_as.v4[] | select(.is_announced==false) | .prefix'` ##### 输出: ``` 188.130.254.0/24 ```

示例 7 - 枚举涉及给定 AS 的 BGP 劫持事件数量

##### 命令: `asn -j AS8860 | jq '.results[].bgp_hijack_incidents'` ##### 输出: ``` { "total": 18, "as_hijacker": 11, "as_victim": 7 } ```

#### 远程(API 端点) 通过在 [服务器模式](#running-lookups-from-the-browser) 下运行脚本,可以通过对其运行 HTTP 查询并以紧凑或漂亮的 JSON 格式检索结果,将其用作自托管的查找 API 服务。服务器为此目的公开了 `asn_lookup_json` 和 `asn_lookup_jsonp` 端点。语法与基于浏览器的普通远程查询相同。 *示例 1:使用 `curl` 远程查询服务器(紧凑输出):* ``` root@KRUSTY:~# curl -s "http://localhost:49200/asn_lookup_json&1.1.1.1" {"target":"1.1.1.1","target_type":"ipv4","result":"ok","reason":"success","version":"0.72.1","request_time":"2022-03-29T00:13:11","request_duration":5,"result_count":1,"results":[{"ip":"1.1.1.1","ip_version":"4","reverse":"one.one.one.one","org_name":"APNIC and Cloudflare DNS Resolver project","abuse_contacts":["helpdesk@apnic.net"],"routing":{"is_announced":true,"as_number":"13335","as_name":"CLOUDFLARENET, US","net_range":"1.1.1.0/24","net_name":"APNIC-LABS","roa_count":"1","roa_validity":"valid"},"type":{"is_bogon":false,"is_anycast":true,"is_mobile":false,"is_proxy":false,"is_dc":true,"dc_details":{"dc_name":"Cloudflare"},"is_ixp":false},"geolocation":{"city":"Magomeni","region":"Dar es Salaam","country":"Tanzania","cc":"TZ"},"reputation":{"status":"good","is_known_good":true,"known_as":"Cloudflare Public DNS"},"fingerprinting":{"ports":[53,80,443]}}]} ``` *示例 2:使用 `curl` 远程查询服务器(漂亮的输出):* ``` root@KRUSTY:~# curl -s "http://localhost:49200/asn_lookup_jsonp&10.0.0.1" { "target": "10.0.0.1", "target_type": "ipv4", "result": "ok", "reason": "success", "version": "0.72.1", "request_time": "2022-03-29T00:14:57", "request_duration": 0, "result_count": 1, "results": [ { "ip": "10.0.0.1", "ip_version": "4", "org_name": "IANA", "routing": { "is_announced": false, "net_name": "PRIVATE-ADDRESS-ABLK-RFC1918-IANA-RESERVED" }, "type": { "is_bogon": true, "bogon_type": "rfc1918 (Private Space)" }, "reputation": {}, "fingerprinting": {} } ] } ``` ## 致谢 此脚本的初始版本被收录在 **Security Trails** 博客文章“[*ASN 查询工具、策略和技术*](https://web.archive.org/web/20250428214209/https://securitytrails.com/blog/asn-lookup)”中。谢谢 [Esteban](https://www.estebanborges.com/)! 感谢 [Massimo Candela](https://github.com/massimocandela/) 对 [IPmap](https://ipmap.ripe.net/)、[BGPlay](https://github.com/massimocandela/BGPlay) 和 [TraceMON](https://github.com/RIPE-NCC/tracemon) 的支持和出色工作! 感谢所有出色的贡献者提供的代码、想法、建议、软件包和错误报告! ## 反馈和贡献 欢迎任何反馈或拉取请求以改进代码。随时做出贡献!
标签:API服务器, ASN查询, AS路径, BGP, CTI, DNS通配符暴力破解, Docker, ESC4, GitHub, IPv4, IPv6, IP信誉, IP地理位置, IP指纹, OSINT, PowerShell, RPKI, Traceroute, 二进制模式, 前缀查询, 后渗透, 安全防御评估, 实时处理, 应用安全, 网络侦查, 网络基础设施, 网络工具, 请求拦截, 路由分析