第一次跑 theHarvester我敲的是这一句theHarvester-dexample.com-ball屏幕上开始刷。先是横幅接着一行行 Searching然后隔几行冒出一句[!] Missing API key for xxx。等了几分钟翻上去一看大半行都是这种提示真正有结果的没几个。我以为装坏了重装了一遍还是一样。后来才明白两件事-b all是把 51 个源按顺序挨个跑一遍跑完要几分钟到几十分钟没填 key 的源不报错打一行提示就跳过。换成-b crtsh,rapiddns两个源很快就出来了。下面按装好、跑通、看懂、落盘的顺序写。文里的版本号、路径、输出都来自 Kali 上那个 4.10.1GitHub master 上是另一套形态我单独用一节说差别免得你照着网上的截图敲参数结果报错。一、授权这件事得先定theHarvester 干的事是把你给的域名或者公司名拿到一堆第三方数据源上查一遍把查到的子域名、邮箱、IP、URL、ASN、人名、泄露记录整理成清单。查询发生在别人的服务器上目标机不会收到包。听起来很温和但你的目标字符串会发给每一个参与查询的数据源。README 的原话是这么写的被动只代表目标没有被直接接触被选中的提供商照样会收到目标字符串。所以两件事得先定。自己买的域名、公司内部授权的资产、nmap.org 和 owasp.org 这种公开演示域随便跑。别人的域名没有书面授权就别碰。《刑法》第 285 条、286 条不是摆着吓人的README 里也留了一句只在已授权的安全评估早期阶段使用只对自有或明确许可的目标运行。另一件是隐私。邮箱、人名、泄露记录这三类结果在授权范围内的社工演练里有用拿去做推广或者钓鱼就是另一码事。二、它吐出来的只有七类东西屏幕上是按段显示的IP 段、邮箱段、人名段、主机名段。哪段没货它就明说一句 No IPs found.不会留个空白让你猜。结果从哪来拿来做什么主机名、子域名证书透明日志、被动 DNS、搜索引擎主要收获邮箱搜索引擎、泄露库、猎头库社工演练素材IP被动 DNS、RapidDNS圈网段URL搜索引擎、归档站报告素材ASN路由库圈网段人名职业库社工评估泄露事件名haveibeenpwned 这类凭据有没有漏过要说清楚它的性质结果是快照不是台账。每次跑都重新查一遍不增量、不建库、不存历史。想对比两次跑出来的差别得靠自己把-f生成的文件留住。三、先认清你装的是哪一代新手最容易在这里卡住。Kali 预装的 4.10.1 和 GitHub master 上面那一版参数不是一套。Kali 的 4.10.1master 新一代装法apt install theharvesteruv syncPython 3.14源数量-h里列 51 个源表 60 个-b all51 个源串着全跑慢只跑 P0 被动源-f产物.json.xml.jsonl.json.xml图形界面没有HarvestView本地 127.0.0.1:5000并发单线程逐源-j/--source-workers按能力选源没有-b subdomains/emails之类判别办法三个随便挑-h第一屏的版本行-h里有没有-j、--no-hosts这种旗标跑一次带-f的命令看目录里有没有多出.jsonl。网上教程混着两代的截图照抄很容易得出参数坏了的结论。以你自己机器上的-h为准。Kali 那个稳定版够用不必为了并发和新格式去折腾 Python 3.14。四、自检顺便认三个配置文件dpkg-stheharvester|grep-EVersion|DescriptionVersion: 4.10.1-0kali2 Description: tool for gathering e-mail accounts and subdomain names from public sourcestheHarvester和theharvester两个入口都软链到同一个 Python 脚本大小写不用纠结。配置全在/etc/theHarvester就三样东西。api-keys.yaml放各家 key。proxies.yaml是-p用的代理列表。wordlists/底下是内置词表api_endpoints.txt、dns-big.txt、dns-names.txt、dorks.txt、names_small.txt爆破和端点扫描要用到。另外每次运行第一行都会打一句Read proxies.yaml from /etc/theHarvester/proxies.yaml。这是后台读代理配置正常现象不是报错。五、三条命令跑通第一发证书透明日志免 keytheHarvester-dnmap.org-bcrtsh回显实录[*] Target: nmap.org [*] Searching CRTsh. [*] No IPs found. [*] No emails found. [*] No people found. [*] Hosts found: 2 --------------------- issues.nmap.org svn.nmap.org两台。crtsh 查的是 HTTPS 证书里的 SAN 字段哪个子域签过公开证书才会留痕没签过的自然不出现。第二发被动 DNStheHarvester-dnmap.org-brapiddns87 台一行一个子域名:IP[*] Hosts found: 87 --------------------- ac.nmap.org:50.116.1.184 acp.nmap.org:50.116.1.184 u.nmap.org:50.116.1.184 uni.nmap.org:50.116.1.184 users.nmap.org:50.116.1.184 ... www7a.nmap.org:50.116.1.184同一个域名换个源2 台变 87 台。IP 全是同一个也就是说这些子域都落在同一台服务器上。第三发逗号连多个源theHarvester-dnmap.org-bcrtsh,rapiddns,otx它顺序打出几条 Searching 行几个源都跑。4.10.1 是串行的源加得越多越慢。-l管每个源取回多少条默认 500-S 100从第 100 条开始算是翻页。-d一次只吃一个目标写成-d a.com,b.com不会跑两个域得写两条命令或者套个循环。六、空结果不算工具坏了这事我碰过不止一次。同一个-d nmap.org -b crtsh早上跑出 2 台下午再跑一次是 0 台。otx那次也是空的换成rapiddns立刻 87 台。原因大多在源头那头证书日志本身有延迟搜索引擎会按 robots 和限流挡你被动 DNS 库的收录范围也不一样。单次空手说明不了什么多换两个源再判断。所以第一次先挑两三个免 key 的源-b crtsh,otx,rapiddns这种组合看哪边有货。全空的时候先别怀疑工具换个源试试。还有一个容易误判的dnsdumpster在 4.10.1 上没 key 也能跑60 秒实测空结果不报错。但 master 那份源表里它已经标成必须填 key 了上游在收紧。老教程说它免 key别全信。七、源怎么挑-h里-b能填的源一共 51 个一长串名字看着头晕。按有没有 key 分两堆就清楚了。免 key 能跑的常用组合crtsh、certspotter、otx、rapiddns、hackertarget、gitlab、urlscan、waybackarchive、thc、subdomaincenter、hudsonrock、baidu、duckduckgo、yahoo。haveibeenpwned也免 key但它只回泄露记录。要 key 的shodan、virustotal、hunter查邮箱、censys、securityTrails、intelx、fofa、zoomeye、tomba、dnsdumpster。没填不是崩溃是打一行 Missing API key 然后跳过。官方 README 还有一套源的分级叫 P0、P1、P2选源的时候有用分级意思碰目标吗P0查第三方数据集流量不直接打向目标不碰P1以 DNS 名义查询解析、爆破、逆向都算轻碰 DNSP2直接连目标端点HTTP、TLS、截图、端口碰要授权粗暴理解P0 是别人替你查P1 是问 DNSP2 是直接打到目标脸上。纯被动收情报-b里放 P0 的源就够了。按需求挑的话我平时这么配想要什么用哪组子域名要快-b crtsh,rapiddns,otx邮箱、人名-b baidu,yahoo免 key 起步有 key 加hunter、rocketreach凭据泄露-b haveibeenpwned代码泄露-b github-code、-b gitlab、-b bitbucket全家桶-b all慢且每个要 key 的源都打一条提示八、填 key 只动一个文件api-keys.yaml的模板长这样开头几十行都是空的apikeys: bevigil: key: bitbucket: key:填的时候保持两个空格缩进把值贴到冒号后面apikeys:hunter:key:hXXXXXX...censys:id:1a2b.....secret:9z8y...censys是唯一要两个字段的源模板里已经留了 id 和 secret 两行别的都是单个 key。填完做一件事chmod 600 /etc/theHarvester/api-keys.yaml。README 也写了填过的配置文件和 key 不要提交到任何仓库。代理走proxies.yaml填 HTTP 或 SOCKS5 列表运行时加-p让所有源都经代理转发。想藏住谁在查这个域名就靠这个。我实测只到运行首行这个层面具体行为按-h和 README 写的来。九、落盘-f出两个文件theHarvester-dnmap.org-botx-fth-otx收尾会打三行[*] Reporting started. [*] XML File saved. [*] JSON File saved.那次 otx 空手两个文件都是小的th-otx.json: {cmd:-d nmap.org -b otx -f th-otx,hosts:[],shodan:[]} th-otx.xml: ?xml version1.0 encodingUTF-8?theHarvestercmd-d nmap.org -b otx -f th-otx/cmd/theHarvester-f后面不用写扩展名NAME给什么它就自己拼成.json和.xml两个。看 json 的方法cmd是你那条命令的回放hosts数组装子域名有 IP 的时候写成子域名:IPshodan数组装-s的收获。邮箱、URL、人名有货时对应字段会出现。有个细节值得留意屏幕上结果按段显示json 里是几个并列的数组。别拿屏幕上的顺序去对 json 里的下标两边不是一个排列方式。要喂脚本就读 json要看大概就盯屏幕。新一代还有第三个.jsonl一行一条记录配 jq 方便。4.10.1 没有这个格式。十、会碰目标的开关单独说下面这些不只查数据集会往目标那边伸手用之前先确认授权范围。开关干什么-r/-r resolvers.txt对查到的子域做 DNS 解析拿存活 IP-n查 NS 记录-c加-w 词表子域爆破直接打 DNS-e DNS_SERVER指定 DNS 服务器-t检测子域接管-s用 Shodan API 取主机服务信息要有 key--screenshot 目录对查到的域名批量截图比较重-a加-w 词表扫 API 端点-p走 proxies.yaml 里的代理-q安静模式关掉 Missing API key 提示-c和-t要格外小心一个在爆破一个在试探接管都属于会留下痕迹的动作。--screenshot依赖本机有浏览器程序可能得装 playwright 之类装不上就别硬跑。只想知道这个 IP 开了什么又不想自己碰用-s让 Shodan 代劳前提是 api-keys.yaml 里 shodan 那行填好了。十一、常见错误对照现象大概是什么原因怎么办所有源都空手多半是真没数据或者被限流工具本身没坏换源重试比如换-b rapiddns重定向到文件、timeout 杀掉后文件 0 字节Python 输出到文件时是全缓冲进程被杀缓冲区丢了用python3 -u跑或者让 stdout 留在终端-b all半天没动静51 个源串行每个源都有自己的网络等待先挑两三个免 key 源出结果满屏 Missing API key模板里的 key 全空要用哪个源填哪个或者加-q某个源报错错误信息是空的上游接口变了或者网络抖动换源标了必须 key 的先填 key-f出来的 json 比屏幕少屏幕按段显示json 是并列数组用屏幕看概貌json 喂脚本网上教程的源名报错两代源表不一样大小写也照抄不了以本机-h的 51 个名字为准-j、-b subdomains在本机报错那是新一代的旗标按 4.10.1 的语法来十二、命令速查# 自检whichtheHarvesterdpkg-stheharvester|grepVersion theHarvester-h# 最小被动收割前提是目标已授权theHarvester-dnmap.org-bcrtsh,rapiddns,otx# 落盘方便后面对照python3-utheHarvester-dnmap.org-bcrtsh,rapiddns-frep1# 限量与翻页theHarvester-dnmap.org-bcrtsh-l200-S0# 关掉 Missing 提示theHarvester-dnmap.org-bcrtsh,otx-q# 邮箱、人名方向theHarvester-dowasp.org-bbaidu,yahoo# 解析与 NS属于 P1theHarvester-dnmap.org-bcrtsh-rtheHarvester-dnmap.org-bcrtsh-ntheHarvester-dnmap.org-bcrtsh-e1.1.1.1# 爆破P1theHarvester-dnmap.org-bcrtsh-c-w/etc/theHarvester/wordlists/dns-names.txt# 接管检测、Shodan、截图P2theHarvester-dnmap.org-bcrtsh-ttheHarvester-dnmap.org-bcrtsh-stheHarvester-dnmap.org-bcrtsh--screenshot./shots/# 全源慢日志留一份python3-utheHarvester-dnmap.org-ball-q|teefull.log我现在的固定做法是一次跑两三个源带-f存下来文件名带上日期。过一周再跑一次把两个 json 拿出来对照能看出哪些子域是新冒出来的。它不给你做增量这件事只能自己动手。示例里的 nmap.org 和 owasp.org 都是公开演示域换目标前先确认授权。