Knockpy使用教程#
软件介绍#
Knockpy是一款用Python编写的子域名扫描工具,专注于通过字典暴力破解和DNS查询发现子域名。它的设计目标是提供快速、高效的子域名枚举能力。
入门级使用#
基本子域名枚举#
功能说明:使用默认设置枚举目标域名的子域名
使用示例:
# 基本子域名枚举
knockpy example.com
# 枚举多个域名
for domain in example.com test.com; do knockpy $domain; done
# 将结果输出到文件
knockpy example.com -o results.txt
# 从文件中读取域名
cat domains.txt | xargs -I {} knockpy {}参数说明:
- 无特殊参数:执行基本的子域名枚举
-o:指定输出文件
简单的字典扫描#
功能说明:使用默认字典进行子域名暴力破解
使用示例:
# 使用默认字典
knockpy example.com
# 使用指定字典
knockpy example.com -w /path/to/wordlist.txt
# 使用小字典(快速扫描)
knockpy example.com -w wordlist_small.txt
# 使用大字典(深度扫描)
knockpy example.com -w wordlist_large.txt参数说明:
-w:指定自定义字典
初级使用#
扫描控制#
功能说明:控制扫描的行为和速度
使用示例:
# 设置线程数
knockpy example.com -t 50
# 设置超时时间
knockpy example.com -c 10
# 设置重试次数
knockpy example.com -r 3
# 启用详细输出
knockpy example.com -v
# 启用安静模式
knockpy example.com -q参数说明:
-t:设置线程数-c:设置超时时间(秒)-r:设置重试次数-v:详细输出-q:安静模式
结果格式化#
功能说明:控制输出结果的格式
使用示例:
# 以JSON格式输出
knockpy example.com -j
# 以CSV格式输出
knockpy example.com -csv
# 以表格格式输出
knockpy example.com -table
# 仅输出子域名
knockpy example.com -s
# 输出详细信息
knockpy example.com -v参数说明:
-j:以JSON格式输出-csv:以CSV格式输出-table:以表格格式输出-s:仅输出子域名-v:详细输出
中级使用#
高级枚举选项#
功能说明:使用高级选项进行更深入的子域名枚举
使用示例:
# 启用递归枚举
knockpy example.com -d
# 启用DNS区域传输
knockpy example.com -axfr
# 启用反向DNS查询
knockpy example.com -rev
# 启用所有高级选项
knockpy example.com -d -axfr -rev
# 完整的子域名枚举
knockpy example.com -d -axfr -rev -w wordlist_large.txt -t 50 -o complete_results.txt参数说明:
-d:启用递归枚举-axfr:尝试DNS区域传输-rev:启用反向DNS查询-w:指定自定义字典-t:设置线程数-o:指定输出文件
DNS配置#
功能说明:配置DNS解析选项
使用示例:
# 使用指定的DNS服务器
knockpy example.com -ns 8.8.8.8,8.8.4.4
# 从文件中读取DNS服务器列表
knockpy example.com -nsl resolvers.txt
# 设置DNS超时时间
knockpy example.com -c 5
# 启用DNS缓存
knockpy example.com -cache
# 禁用DNS验证
knockpy example.com -no-verify参数说明:
-ns:指定DNS服务器-nsl:从文件中读取DNS服务器列表-c:设置DNS超时时间(秒)-cache:启用DNS缓存-no-verify:禁用DNS验证
中上级使用#
攻击面映射#
功能说明:使用Knockpy进行完整的攻击面映射
使用示例:
# 执行完整的子域名枚举
knockpy example.com -d -axfr -rev -w wordlist_large.txt -t 50 -o complete_results.txt
# 结合其他工具进行深入分析
knockpy example.com -s > subdomains.txt
cat subdomains.txt | xargs -I {} nmap -sV {}
# 与httpx结合使用,检查子域名是否可访问
knockpy example.com -s | httpx
# 与shuffledns结合使用,进行DNS验证
knockpy example.com -s | shuffledns -d example.com -r resolvers.txt
# 与amass结合使用,获得更全面的结果
knockpy example.com -s > knockpy_results.txt
amass enum -d example.com -passive -o amass_results.txt
cat knockpy_results.txt amass_results.txt | sort -u > final_results.txt参数说明:
-d:启用递归枚举-axfr:尝试DNS区域传输-rev:启用反向DNS查询-w:指定自定义字典-t:设置线程数-o:指定输出文件-s:仅输出子域名
批量操作#
功能说明:处理多个域名的枚举任务
使用示例:
# 批量枚举多个域名
cat domains.txt | xargs -I {} knockpy {}
# 批量枚举并分别输出结果
for domain in $(cat domains.txt); do
knockpy $domain -o "$domain.txt"
echo "Completed: $domain"
done
# 分布式枚举(使用多个实例)
# 实例1
head -n 50 domains.txt | xargs -I {} knockpy {} -o results1.txt
# 实例2
tail -n 50 domains.txt | xargs -I {} knockpy {} -o results2.txt
# 合并结果
cat results1.txt results2.txt | sort -u > final_results.txt参数说明:
-o:指定输出文件
高级使用#
大规模扫描#
功能说明:处理大规模的子域名枚举任务
使用示例:
# 大规模域名枚举
cat large_domains.txt | xargs -P 10 -I {} knockpy {} -s -o {}.txt
# 增量扫描
knockpy example.com -w new_wordlist.txt -o incremental_results.txt
# 与其他工具结合进行大规模扫描
knockpy example.com -s | httpx -silent | tee -a accessible_subdomains.txt
# 使用子进程进行并行处理
cat domains.txt | xargs -P 5 -I {} knockpy {} -s >> all_subdomains.txt参数说明:
-s:仅输出子域名-o:指定输出文件-w:指定自定义字典
结果分析#
功能说明:分析和处理枚举结果
使用示例:
# 统计子域名数量
knockpy example.com -s | wc -l
# 按长度排序子域名
knockpy example.com -s | awk '{print length($0) " " $0}' | sort -n | cut -d' ' -f2-
# 过滤特定模式的子域名
knockpy example.com -s | grep -E "test|dev|staging"
# 验证子域名是否可访问
knockpy example.com -s | xargs -I {} curl -I -m 2 {}
# 按域名分组结果
for domain in $(cat domains.txt); do
knockpy $domain -s > "$domain.txt"
count=$(wc -l "$domain.txt" | awk '{print $1}')
echo "$domain: $count subdomains"
done参数说明:
-s:仅输出子域名
大师级使用#
自定义配置和脚本#
功能说明:创建和使用自定义配置和脚本
使用示例:
# 创建自定义字典
# 基于已发现的子域名生成新字典
knockpy example.com -s | cut -d'.' -f1 | sort -u > custom_wordlist.txt
# 自定义扫描脚本
#!/usr/bin/env bash
# 批量枚举并生成报告
domains_file="$1"
output_dir="reports"
mkdir -p "$output_dir"
for domain in $(cat "$domains_file"); do
echo "Processing $domain..."
knockpy $domain -d -axfr -rev -w wordlist_large.txt -s > "$output_dir/$domain.txt"
# 生成报告
count=$(wc -l "$output_dir/$domain.txt" | awk '{print $1}')
echo "$domain: $count subdomains" >> "$output_dir/summary.txt"
# 检查可访问性
cat "$output_dir/$domain.txt" | xargs -I {} curl -s -o /dev/null -m 2 "http://{}" && echo "{}" >> "$output_dir/${domain}_accessible.txt"
done
echo "Report generated in $output_dir"
# 高级分析脚本
#!/usr/bin/env bash
knockpy $1 -d -axfr -rev -w wordlist_large.txt -o subdomains.txt
# 统计子域名数量
total=$(wc -l subdomains.txt | awk '{print $1}')
echo "Total subdomains found: $total"
# 检查可访问性
accessible=0
while read subdomain; do
if curl -s -o /dev/null -m 2 "http://$subdomain"; then
echo "$subdomain is accessible" >> accessible.txt
accessible=$((accessible+1))
fi
done < subdomains.txt
echo "Accessible subdomains: $accessible"参数说明:
- 使用自定义脚本处理Knockpy的结果
高级扫描策略#
功能说明:使用高级策略进行更有效的子域名枚举
使用示例:
# 多阶段扫描策略
# 第一阶段:快速扫描(小字典)
knockpy example.com -w wordlist_small.txt -t 50 -o fast_scan.txt
# 第二阶段:深度扫描(大字典)
knockpy example.com -w wordlist_large.txt -t 20 -o deep_scan.txt
# 第三阶段:定向扫描(针对特定路径)
knockpy example.com -w admin_wordlist.txt -o admin_scan.txt
# 智能扫描策略
# 1. 先使用小字典快速扫描
knockpy example.com -w wordlist_small.txt -o small_scan.txt
# 2. 基于发现的子域名生成新字典
cat small_scan.txt | cut -d'.' -f1 | sort -u > custom_wordlist.txt
# 3. 使用生成的字典进行深度扫描
knockpy example.com -w custom_wordlist.txt -o custom_scan.txt
# 4. 合并结果
cat small_scan.txt custom_scan.txt | sort -u > final_results.txt
# 持续监控策略
while true; do
knockpy example.com -s > current_subdomains.txt
if [ -f previous_subdomains.txt ]; then
diff previous_subdomains.txt current_subdomains.txt > changes.txt
if [ -s changes.txt ]; then
echo "New subdomains found:"
cat changes.txt | grep '>'
fi
fi
mv current_subdomains.txt previous_subdomains.txt
sleep 86400 # 每天扫描一次
done参数说明:
-w:指定自定义字典-t:设置线程数-o:指定输出文件-s:仅输出子域名
实战案例#
案例1:企业资产发现#
任务:发现企业的所有互联网资产
执行步骤:
基本枚举
knockpy company.com -o initial_results.txt深度枚举
# 递归枚举子域名的子域名 knockpy company.com -d -axfr -rev -w wordlist_large.txt -o recursive_results.txt验证结果
cat recursive_results.txt | sort -u > final_subdomains.txt wc -l final_subdomains.txt资产分类
# 按环境分类 cat final_subdomains.txt | grep -E "prod|live" > production.txt cat final_subdomains.txt | grep -E "test|dev|staging" > non_production.txt可访问性检查
cat final_subdomains.txt | xargs -I {} curl -s -o /dev/null -m 2 "http://{}" && echo "{}" >> accessible.txt
案例2:安全评估前的攻击面映射#
任务:在安全评估前映射目标的完整攻击面
执行步骤:
多轮枚举
# 第一轮:使用Knockpy knockpy target.com -d -axfr -rev -w wordlist_large.txt -o knockpy_results.txt # 第二轮:使用其他工具 subfinder -d target.com -silent -o subfinder_results.txt # 第三轮:合并结果 cat knockpy_results.txt subfinder_results.txt | sort -u > all_subdomains.txt服务发现
cat all_subdomains.txt | xargs -I {} nmap -sV {}漏洞扫描
cat all_subdomains.txt | xargs -I {} nikto -h {}报告生成
# 生成详细报告 echo "Total subdomains found: $(wc -l all_subdomains.txt | awk '{print $1}')" > report.txt echo "\nAccessible subdomains: $(wc -l accessible.txt | awk '{print $1}')" >> report.txt echo "\nTop subdomains by frequency:" >> report.txt cat all_subdomains.txt | cut -d'.' -f1 | sort | uniq -c | sort -rn | head -10 >> report.txt
总结#
Knockpy是一款快速、高效的子域名扫描工具,专注于通过字典暴力破解和DNS查询发现子域名。通过本教程的学习,您应该能够:
- 入门级:掌握基本的子域名枚举和简单的字典扫描
- 初级:了解扫描控制和结果格式化
- 中级:使用高级枚举选项和DNS配置
- 中上级:掌握攻击面映射和批量操作
- 高级:进行大规模扫描和结果分析
- 大师级:创建自定义配置和脚本,以及使用高级扫描策略
Knockpy的优势在于其速度快、配置灵活、支持多种扫描模式。在实际使用中,Knockpy常常与其他子域名枚举工具结合使用,以获得更全面的结果。