通过查询 IP 地址,基于云服务商发布的 JSON、CSV 或文本数据,找出其所属的云服务商及其他详细信息
Cloud edge 是一款专注于探索云服务提供商的侦察工具。它可以用于云归属与取证、渗透测试、漏洞赏金、红队行动或针对云服务商的通用研发。Edge 会自动加载云服务商(CSP)已发布的 IP 地址范围文件(AWS、Azure、GCP、Cloudflare、Digital Ocean),并根据输入的 IP 地址执行前缀查询。可以与其他侦察工具集成使用。在黑盒网络渗透测试中,edge 能快速发现客户托管在哪个云 CSP 上,或用于双重确认交战规则的 scope。这些 CSP 各自发布了所有 IP 前缀和/或网段列表。对于 Azure 和 AWS,还会增加区域/数据中心和服务名称。这是威胁情报中极好的富化手段,能将 IP 地址映射到物理数据中心和云服务。Cloud Edge 对于侦察工作流非常有用,能快速了解“你正在处理什么”——它基于 IP 前缀快速解析并执行查询。

以下是关于该工具输入输出的一些说明。
运行 Cloud Edge,它会自动下载所有受支持的云服务商文件。如果工作目录中不存在这些文件,它们将被下载:
% ./edge
[INF] 启动 Cloud Edge 版本 0.2.4
[INF] 文件 cloud.json 已下载并创建
[INF] 文件 aws.json 已下载并创建
[INF] 文件 cloudflare-ipv4.txt 已下载并创建
[INF] 文件 cloudflare-ipv6.txt 已下载并创建
[INF] 文件 digitalocean.csv 已下载并创建
[INF] 文件 azure.json 已下载并创建
如果你处于离线状态无法下载,请检查本仓库中的 csp-files 目录。将它们复制到工作目录即可。
工具首次运行时,会自动尝试将六个云服务商的 IP 地址范围 JSON、文本和 CSV 文件下载到工作目录。工作原理如下:
默认情况下,它会尝试从以下 URL 下载这六个文件,除非这些文件已存在于工作目录。
Cloud Edge 在下载前会检查每个文件。因此,如果文件已存在,除非你删除它,否则不会再次下载。
这六个文件已包含在此 GitHub 仓库的 csp-files 目录中。由于云服务商会频繁更新其列表,请确保使用最新文件——删除工作目录中的以下文件:aws.json, azure.json, cloud.json, cloudflare-ipv4.txt, cloudflare-ipv6.txt, digitalocean.csv。
如果在工作目录中找到,所有 IP 前缀会被加载到内存中。云服务商 IP 范围文件始终会尝试从工作目录加载。使用 -prefix 标志启用实际的查询。
当启用 -dns 模式时,DNS 查询(A 和 CNAME 记录)会被缓冲,直到所有 DNS 查询完成才显示输出。查询完成后,输出结果会被显示。
默认情况下,输出会显示以 [INF] 开头的信息消息。可以使用 -silent 标志禁用。输出示例如下:
./edge -single 140.179.144.130
[INF] 单 IP 前缀查询:140.179.144.130
[INF] IP [140.179.144.130] 通过前缀 [AWS:140.179.144.128/25] 匹配到云服务商
[INF] IP [140.179.144.130] 匹配到云服务 [API_GATEWAY] 和区域 [cn-north-1]
140.179.144.130,Provider:AWS;Prefix:140.179.144.128/25;Region:cn-north-1;Service:API_GATEWAY
信息消息会告诉你记录是否通过 DNS 'A' 记录、DNS 'CNAME' 记录、证书 (crt.sh) 或前缀匹配找到。前缀匹配会告诉你检测到的云服务商及其匹配的前缀,以及适用的云服务和区域。目前未检测 Azure 区域,但 AWS 区域可以检测。
使用 -dns 或 crt 模式时,输出默认以逗号分隔的结果形式发送到控制台。这便于使用其他工具解析这些结果。
FQDN,IP,SOURCE,CNAME,DESCRIPTION
-prefix,则返回 IP 地址范围描述中的任何结果。使用 -prefix 模式并配合 -ip 或 -nmap 时,输出默认以逗号分隔的结果形式发送到控制台:
IP,DESCRIPTION
IP 是 IP 地址,DESCRIPTION 是云服务商 IP 地址范围 JSON 文件中查找 IP 地址范围所得的结果(如适用)。
使用 -ptr 模式并配合 ip 或 nmap 时,输出默认以逗号分隔的结果形式发送到控制台:
IP,PTR
IP 是 IP 地址,PTR 是 DNS PTR 查询的结果(如果找到)。
-ip 标志用于遍历 IP 地址列表,可在 prefix 或 ptr 模式下使用。当你使用 -ip <hosts.txt> 运行工具时,它期望每行一个 IP 地址,并遍历列表执行查询。以下是文件内容示例:
user@host:~/demo$ cat ip.txt
3.133.110.237
18.117.232.92
18.221.247.211
3.137.199.52
-nmap 标志用于解析 nmap XML 文件。它会查找 nmap 扫描文件中标记为 "Up" 的任何主机。例如,-nmap scan1.xml 指示工具解析 scan1.xml 文件并查找 nmap 标记为 Up 的主机。然后配合 -ptr 或 -prefix 执行 IP 查询。
该工具通过遍历包含主机名的字典(每行一个主机名)执行经典的子域名枚举。该功能在 -dns 模式下与 -wordlist <hosts.txt> 一起使用。hosts.txt 文件示例如下:
user@host:~/demo$ more subdomains-5k.txt
www
blog
news
blogs
en
online
$ edge -help
Usage of edge:
-crt
Certificate transparency lookup mode(证书透明度查询模式)
-csv string
将结果输出到 CSV 文件
-dns
A 和 CNAME 记录查询模式
-domain string
要进行猜测的域名。
-ip string
包含 IP 地址的文本文件
-nmap string
要使用的 Nmap 扫描 xml 文件。
-output
启用输出到 CSV
-prefix
IP 前缀 CSP 查询模式
-ptr
PTR 查询模式
-resolver string
要使用的 DNS 服务器。(默认 "8.8.8.8:53")
-silent
启用静默模式以抑制 [INF]
-single string
单个 IP 地址,进行前缀查询
-verbose
启用详细输出
-wordlist string
用于猜测的字典。
-workers int
要使用的 worker 数量。(默认 10)
示例 #1: 查询单个 IP 地址
edge -single <ip_address>
描述: 针对提供的单个 IP 地址 <ip_addr>,在云服务商的 JSON 文件中执行前缀查询。
输出示例:
edge -single 140.179.144.130
[INF] 单 IP 前缀查询:140.179.144.130
[INF] IP [140.179.144.130] 通过前缀 [AWS:140.179.144.128/25] 匹配到云服务商
[INF] IP [140.179.144.130] 匹配到云服务 [API_GATEWAY] 和区域 [cn-north-1]
140.179.144.130,Provider:AWS;Prefix:140.179.144.128/25;Region:cn-north-1;Service:API_GATEWAY
示例 #2: 查询单个 IP 地址并抑制信息消息
$ edge -single <ip_address> -silent
描述: 与上例相同,但启用静默模式。这会抑制带有额外信息的 [INF] 消息。
输出示例:
edge -single 140.179.144.130
140.179.144.130,Provider:AWS;Prefix:140.179.144.128/25;Region:cn-north-1;Service:API_GATEWAY
示例 #3: 使用本地提供商 JSON 文件而不是下载
edge -single <ip_address> -silent -nd
描述: 不尝试下载提供商 JSON 文件,而是使用工作目录中的本地文件。
示例 #4: 带证书透明度和前缀查询的字典子域名枚举
edge -domain <domain> -dns -crt -prefix -wordlist <wordlist.txt>
描述: 基于 wordlist.txt 对 domain 执行字典子域名枚举,包含所有 A 和 CNAME 记录,并辅以证书透明度查询。对于通过证书透明度找到的每个主机,也执行 DNS 查询。对 IP 地址在所有三个云服务商发布的 IP 前缀列表中进行前缀查询。
输出示例:
edge -domain tesla.com -dns -crt -prefix -wordlist subdomains-5k.txt
[INF] 通过 crt.sh 找到主机 [nas-origin.tesla.com]
nas-origin.tesla.com,,Certificate,,
[INF] 通过 crt.sh 找到主机 [eua-origin.tesla.com]
eua-origin.tesla.com,,Certificate,,
[INF] 通过 CNAME 找到主机 [fleetview.prd.na.fn.tesla.com.:fleetview.prd.usw2.fn.tesla.com]
fleetview.prd.na.fn.tesla.com.,,CNAME,fleetview.prd.usw2.fn.tesla.com,
[INF] 通过 CNAME 找到主机 [fleetview.prd.usw2.fn.tesla.com.:a69ff530d53f14d8e8059a3aee44e9ab-1848028946.us-west-2.elb.amazonaws.com]
fleetview.prd.usw2.fn.tesla.com.,,CNAME,a69ff530d53f14d8e8059a3aee44e9ab-1848028946.us-west-2.elb.amazonaws.com,
[INF] 通过 A 记录找到主机 [a69ff530d53f14d8e8059a3aee44e9ab-1848028946.us-west-2.elb.amazonaws.com:52.39.128.70]
[INF] 通过前缀 [AWS:52.36.0.0/14] 匹配到云服务商
[INF] IP [52.39.128.70] 匹配到云服务 [EC2] 和区域 [us-west-2]
示例 #5: 不带证书透明度和 IP 前缀查询的字典子域名枚举
edge -domain <domain> -dns -wordlist <wordlist.txt>
描述: 仅基于字典扫描所有 A 和 CNAME 记录。
输出示例:
edge -domain tesla.com -dns -wordlist subdomains-5k.txt
[INF] 通过 CNAME 找到主机 [fleetview.prd.na.fn.tesla.com.:fleetview.prd.usw2.fn.tesla.com]
fleetview.prd.na.fn.tesla.com.,,CNAME,fleetview.prd.usw2.fn.tesla.com,
[INF] 通过 A 记录找到主机 [e9056.b.akamaiedge.net:23.2.254.58]
e9056.b.akamaiedge.net,23.2.254.58,A,teslamotors.vanity3.ca1.qualtrics.com,
示例 #6: 不带证书透明度但查询任何发现 IP 地址前缀的字典子域名枚举
edge -domain <domain> -dns -wordlist <wordlist.txt> -prefix
描述: 仅基于字典扫描所有 A 和 CNAME 记录。对于枚举到的每个 IP 地址,执行前缀查询。
示例 #7: 证书透明度日志查询
edge -domain <domain> -crt
描述: 使用 https://crt.sh 进行证书透明度日志查询。
输出示例:
edge -domain tesla.com -crt
[INF] 正在运行证书透明度查询 crt.sh
[INF] 通过 crt.sh 找到主机 [solarbonds.tesla.com]
solarbonds.tesla.com,,Certificate,,
[INF] 通过 crt.sh 找到主机 [energydesk.tesla.com]
energydesk.tesla.com,,Certificate,,
示例 #8: 带 DNS 查询的证书透明度
edge -domain <domain> -dns -crt
描述: 执行证书透明度查询。对于通过证书透明度发现的每个主机,执行完整的 DNS A 或 CNAME 查询。
示例 #9: 使用 IP 地址列表进行 IP 前缀查询
edge -prefix -ip <ip-hosts.txt>
描述: 对 IP 地址执行云服务商 IP 前缀查询。读取 ip-hosts.txt 中的 IP 地址列表并逐个查询。每行一个 IP 地址。
输出示例:
edge -prefix -ip ip-hosts.txt
[INF] IP [140.179.144.130] 通过前缀 [AWS:140.179.144.128/25] 匹配到云服务商
[INF] IP [140.179.144.130] 匹配到云服务 [API_GATEWAY] 和区域 [cn-north-1]
140.179.144.130,Provider:AWS;Prefix:140.179.144.128/25;Region:cn-north-1;Service:API_GATEWAY
[INF] IP [18.189.124.22] 通过前缀 [AWS:18.189.0.0/16] 匹配到云服务商
[INF] IP [18.189.124.22] 匹配到云服务 [EC2] 和区域 [us-east-2]
18.189.124.22,Provider:AWS;Prefix:18.189.0.0/16;Region:us-east-2;Service:EC2
[INF] IP [20.60.128.132] 通过前缀 [Azure:20.60.0.0/16] 匹配到云服务商
[INF] IP [20.60.128.132] 匹配到云服务 [AzureStorage]
20.60.128.132,Provider:Azure;Prefix:20.60.0.0/16;Name:Storage;ID:Storage;Platform:Azure;SystemService:AzureStorage
示例 #10: 使用 IP 地址列表进行 DNS PTR 查询
edge -ptr -ip <ip-hosts.txt>
描述: 基于 ip-hosts.txt 中每行的 IP 地址执行 DNS PTR 查询。
输出示例:
edge -ptr -ip ip-hosts.txt
140.179.144.130,ec2-140-179-144-130.cn-north-1.compute.amazonaws.com.cn.
示例 #11: 解析 nmap 文件并对发现的 IP 地址执行前缀查询
edge -prefix -nmap <results.xml>
描述: 解析 nmap 扫描 XML 文件,识别所有 "Up" 主机。对于 nmap XML 扫描结果中的每个 "Up" 主机,执行云服务商 IP 前缀查询。
示例 #12: 解析 nmap 文件并对每个发现的 IP 地址执行 DNS PTR 查询
edge -ptr -nmap <results.xml>
描述: 解析 nmap 扫描 XML 文件,并对每个 "Up" 主机执行 PTR 查询。
示例 #13: 使用 100 个 worker 增加并发提升性能
edge -domain <domain> -dns -wordlist <wordlist.txt> -workers 100
描述: 使用 100 个 worker 进行 DNS 并发扫描。这可以提升扫描速度。默认 worker 数:10。
示例 #14: 指定 DNS 解析器
edge -domain <domain> -dns -wordlist <wordlist.txt> -resolver 8.8.4.4:53
描述: 指定 DNS 解析器为 8.8.4.4(端口 53)。默认为 8.8.8.8。
你可以获取预编译的二进制文件或自行构建。请确保也获取云服务商 IP 前缀 JSON 文件。
在 go 1.25 上测试并构建
$ git clone https://github.com/iknowjason/edge.git
$ cd edge
~/edge$ go build edge.go
~/edge$ ./edge (验证)
@mosesrenegade 提供工具灵感
@0xdabbad00 提供通用 AWS 工具和灵感
本工具受许多其他工具和作者的启发,包括 dnsrecon 和 gobuster。是的,我知道——这里没有太多新东西,只是又一个子域名枚举工具。但我是真心想学 Golang :-)
《Black Hat Go》一书
| Provider(提供者) | Local File(本地文件) | Remote URL(远程 URL) |
|---|
| AWS | aws.json | https://ip-ranges.amazonaws.com/ip-ranges.json |
| Azure | azure.json | https://azservicetags.azurewebsites.net/ |
| GCP | cloud.json | https://www.gstatic.com/ipranges/cloud.json |
| Cloudflare | cloudflare-ipv4.txt | https://www.cloudflare.com/ips-v4/# |
| Cloudflare | cloudflare-ipv6.txt | https://www.cloudflare.com/ips-v6/# |
| Digital Ocean | digitalocean.csv | https://digitalocean.com/geo/google.csv |