面向非机器人的被动式主机名、域名和 IP 查询工具


wtfis 是一款命令行工具,通过多种 OSINT 服务收集域名、FQDN 或 IP 地址的相关信息。与其他同类工具不同,它专为人类阅读而设计,提供美观(效果因人而异)且易于阅读和理解的结果。
本工具假设你使用的是免费版/社区版账户,因此会尽可能减少 API 调用次数,以尽量避免触发配额和速率限制。
项目名称是 "whois" 的谐音。
| 服务 | 用于查询 | 必需 | 免费版 |
|---|---|---|---|
| Virustotal | 全部 | 否 | 是 |
| AbuseIPDB | IP 地址 | 否 | 是 |
| Greynoise | IP 地址 | 否 | 是 |
| IP2Location | IP 地址 | 否 | 是 |
| IP2Whois | 域名/FQDN | 否 | 是 |
| IPinfo | IP 地址 | 否 | 是(无需注册) |
| IPWhois | IP 地址 | 否 | 是(无需注册) |
| Shodan | IP 地址 | 否 | 否 |
| URLhaus | 全部 | 否 | 是 |
主要信息来源。获取:
AbuseIPDB 是一个众包的恶意 IP 地址举报数据库。通过其 API,wtfis 会显示:
IP 地址的地理位置和 ASN 查询的替代来源(默认为 IPWhois)。获取:
IP2Whois 和 IP2Location 是同一服务的不同功能,因此你只需注册一次。之后该 API 密钥可用于这两种查询。
如果提供了凭据,则可选使用。获取:
就 whois 数据而言,推荐使用 IP2Whois 而非 Virustotal,原因如下:
另一种 IP 地址地理位置和 ASN 查询来源。获取:
IP 地址的默认地理位置和 ASN 查询来源。获取:
不要把 IPWhois 与 IP2Whois 混淆,后者提供域名 Whois 数据。
通过 Greynoise 的社区 API,wtfis 将显示某个 IP 是否属于 Greynoise 的数据集之一:
有关这些数据集的更多信息,请参见此处。
此外,该 API 还会返回 Greynoise 对 IP 的分类(如果可用)。可能的值为 benign、malicious 和 unknown。
从 /shodan/host/{ip} 端点获取数据(参见文档)。对于每个 IP,获取:
URLhaus 是一个众包的恶意 URL 举报数据库。该增强功能可帮助了解所查询的主机名或 IP 当前是否正在或曾经被用于通过 HTTP 或 HTTPS 分发恶意软件。提供的数据包括:
$ pip install wtfis
要通过 conda(从 conda-forge)安装,请参见 wtfis-feedstock。
要通过 brew 安装:
brew install wtfis
wtfis 使用以下环境变量(均为可选):
VT_API_KEY - Virustotal API 密钥ABUSEIPDB_API_KEY - AbuseIPDB API 密钥IP2LOCATION_API_KEY - IP2Location API 密钥IP2WHOIS_API_KEY - IP2Whois API 密钥GREYNOISE_API_KEY - Greynoise API 密钥SHODAN_API_KEY - Shodan API 密钥URLHAUS_API_KEY - URLhaus API 密钥WTFIS_DEFAULTS - 默认布尔参数GEOLOCATION_SERVICE - 要使用的地理位置 / ASN 查询服务请用你自己的方式设置这些变量。
或者,在你的主目录中创建一个包含上述选项的文件 ~/.env.wtfis。模板参见 .env.wtfis.example。注意:不要忘记对文件执行 chmod 400!
usage: wtfis [-h] [-A] [-s] [-g] [-a] [-u] [-m N] [-n] [-1] [-V] [--geolocation-service {ip2location,ipinfo,ipwhois}] entity
positional arguments:
entity Hostname, domain or IP
options:
-h, --help show this help message and exit
-A, --all Enable all possible enrichments
-s, --use-shodan Use Shodan to enrich IPs
-g, --use-greynoise Enable Greynoise for IPs
-a, --use-abuseipdb Enable AbuseIPDB for IPs
-u, --use-urlhaus Enable URLhaus for IPs and domains
-m N, --max-resolutions N
Maximum number of resolutions to show (default: 3)
-n, --no-color Show output without colors
-1, --one-column Display results in one column
-V, --version Print version number
--geolocation-service {ip2location,ipinfo,ipwhois}
Geolocation service to use (default: ipwhois)
基本用法:
$ wtfis FQDN_OR_DOMAIN_OR_IP
你会看到按面板组织的结果,类似于上图。
接受已去毒化的输入(例如 api[.]google[.]com)。
如果终端支持,某些字段和标题将是可点击的超链接,指向相应服务的网站。
无需逐个指定每个增强标志,你可以使用 -A / --all 标志在可能的情况下启用全部增强。该标志与 --use-* 标志互斥。
使用 -a 或 --use-abuseipdb 标志为主机名、域名和 IP 启用 AbuseIPDB 增强。

AbuseIPDB 字段名称是一个超链接(如果终端支持),可将你带到对应查询的 AbuseIPDB 数据库页面。
要启用 Greynoise,请使用 -g 或 --use-greynoise 标志调用。由于 API 配额相当低(截至 2023 年 3 月为每周 50 次请求),此查询默认关闭。

GreyNoise 字段名称也是一个超链接(如果终端支持),指向 Greynoise Web 界面中的 IP 条目,其中显示更多上下文信息。
Shodan 可用于显示 IP 的开放端口或服务,以及某些结果中的操作系统。使用 -s 或 --use-shodan 标志调用。

如果终端支持,Services 字段是一个可点击的超链接,可将你带到 Shodan Web 界面。
使用 -u 或 --use-urlhaus 标志为主机名、域名和 IP 启用 URLhaus 增强。

Malware URLs 字段名称是一个超链接(如果终端支持),可将你带到对应查询的 URLhaus 数据库页面。
对于 FQDN 和域名查询,你可以使用 -m NUMBER 或 --max-resolutions=NUMBER 增加或减少显示的 IP 解析结果的最大数量。上限为 10。如果完全不需要解析结果,请将该数字设置为 0。
要在一列中显示所有面板,请使用 -1 或 --one-column 标志。

可以使用 -n 或 --no-color 以无颜色方式显示面板。

可以通过设置 WTFIS_DEFAULTS 环境变量来定义默认参数。例如,默认使用 Shodan 并在一列中显示结果:
WTFIS_DEFAULTS=-s -1
如果某个参数位于 WTFIS_DEFAULTS 中,那么在命令调用时指定相同的参数会使该参数失效。因此,在上面的例子中,如果你接着运行:
$ wtfis example.com -s
那么将不会使用 Shodan。
请注意,目前无法在默认值中定义最大解析数(-m N, --max-resolutions N)。
推荐通过设置 GEOLOCATION_SERVICE 变量来更改此项。例如,要使用 IPinfo:
GEOLOCATION_SERVICE=ipinfo
或者,在命令调用时设置 --geolocation-service:
$ wtfis --geolocation-service=ipinfo 1.1.1.1
如果同时设置了上述两者,则命令行标志优先。
wtfis 可以通过 Docker 镜像运行。首先,通过运行以下命令构建镜像(使用随附的 Dockerfile):
$ make docker-image
该镜像将包含最新 标记 版本(不一定来自最新提交)的 wtfis。这确保你获得的是稳定版本。
运行该镜像有两种方式:
确保 .env.wtfis 位于你的主目录中,并已设置必要的环境变量。然后直接运行:
$ make docker-run
这是以下命令的别名
$ docker run --env-file=${HOME}/.env.wtfis -it wtfis
请注意,每个定义在等号前后不能有任何空格(应为 FOO=bar,而不是 FOO = bar)。
或者,你也可以自行设置环境变量,然后运行,例如:
$ docker run -e VT_API_KEY -e SHODAN_API_KEY -it wtfis