最佳初学者指南:使用 Python 进行网络安全侦察

发布: (2025年12月4日 GMT+8 22:48)
7 min read
原文: Dev.to

Source: Dev.to

介绍

网络安全侦察是了解目标数字足迹的第一步,也是最关键的一步。作为初学者,知道该去哪里查、怎么查以及使用哪些工具,能够显著提升你在网络安全、渗透测试和 OSINT 调查中的效率。

Python 由于其简洁、通用以及强大的库,已成为安全专家的首选语言。本指南分解了侦察、DNS 枚举和网络扫描的基础,帮助初学者以实用的方式快速上手并立即开始实验。

阅读完本指南后,你将能够

  • 理解被动侦察与主动侦察的区别。
  • 为任何侦察项目有效地定义范围和目标。
  • 使用 Python 查询 DNS 记录、子域名和证书透明日志。
  • 执行异步网络扫描以发现主机和服务。
  • 高效组织侦察数据,以便分析和报告。
  • 应用 OPSEC 与速率限制,在侦察过程中保持隐蔽。

这些技能为渗透测试、漏洞赏金猎手和 OSINT 调查奠定了坚实的基础。

前置条件

开始之前,请确保你已经准备好 Python 3.12 环境。以下库推荐用于侦察任务:

Library目的
asyncio / trio在不使用线程的情况下并发处理成千上万的任务
httpx支持 HTTP/2、代理和 SOCKS 的异步 HTTP/HTTPS 请求
aiodns支持 DNSSEC 的异步 DNS 解析
ipwhoisASN 与前缀查询
rich带进度条的美化终端输出
pandas数据组织、CSV/HTML 导出

安装

python3 -m venv recon
source recon/bin/activate
pip install httpx[http2] aiodns ipwhois rich pandas

侦察基础:主动 vs 被动

被动侦察

  • 直接接触目标。
  • 来源包括 WHOIScrt.shShodanGitHub 和泄露的数据库。
  • 隐蔽,不会在目标上留下日志。

主动侦察

  • 通过 DNS 查询、端口扫描、横幅抓取和网页爬取进行直接探测。
  • 功能强大,但会生成日志并可能触发防火墙。

规则: 始终从被动侦察开始。它更安全、免费,并帮助你缩小需要主动探测的范围。

标准工作流

  1. 范围定义 – 确定 IP 段、域名和员工别名。
  2. 被动侦察 – 收集公开的工件。
  3. 关联与枢纽 – 去重、丰富、生成线索。
  4. 主动侦察 – 探测活跃主机、服务和版本。
  5. 报告 – 导出结构化的 JSON 或 CSV 供分析使用。

DNS 记录概览

DNS 是互联网识别和路由流量的基础。了解各种记录类型可以让你提前洞悉组织的在线结构。

A / AAAA – 主机到 IP 的映射

  • A – IPv4 地址。
  • AAAA – IPv6 地址。
    这些记录揭示服务托管位置(云提供商、本地、共享主机)。

CNAME – 别名与 CDN

CNAME 将一个域指向另一个域,常常暴露第三方服务:

blog.example.com → cname → example-blog.hosting.net

常见暴露的服务包括:

  • CDN 提供商(Cloudflare、Akamai)
  • 邮件平台
  • SaaS 仪表盘
  • 云托管环境(AWS、GCP、Azure)

NS – 权威服务器

NS 记录指示哪个服务器对域名拥有权威,帮助你推断:

  • 托管提供商
  • DNS 是自建还是外包
  • 冗余/故障转移配置
  • 通过区域配置错误可能泄露的子域

注意: 自建 NS 服务器通常意味着内部基础设施规模较大。

MX – 邮件路由

MX 记录显示负责接收邮件的服务器:

  • 揭示使用 Google Workspace、Microsoft 365 或自建邮件服务器。
  • 突出旧版或不安全的邮件系统。
  • 暴露与邮件基础设施相关的额外子域。

TXT – 安全策略与验证工件

常见用途:

  • SPF、DMARC、DKIM(邮件身份验证)
  • 云/SaaS 验证令牌
  • 公开的安全披露
  • 域名元数据

注意: SPF、DKIM 与 DMARC 共同帮助防止伪造邮件。

SRV – 服务发现

SRV 记录为 SIP、LDAP、Kerberos、VoIP、Microsoft 服务和游戏服务器等服务指定主机名和端口。它们可以揭示:

  • 内部认证服务
  • 目录服务
  • 公网不可见的基础设施依赖

子域名发现 – 扩大攻击面

子域名往往承载独立的应用、API、管理面板或内部系统(如 api.example.comvpn.example.comdev.example.com),发现它们可以扩大攻击面。

被动枚举

从已经监控互联网的外部来源收集信息:

  • 证书透明(CT)日志
  • 历史 DNS 数据
  • 搜索引擎 dork

每个来源揭示域名演进的不同层面。

证书透明日志

每个 HTTPS 站点都必须将其 SSL/TLS 证书发布到公开的 CT 日志中,包括本应保持私密的子域名。

  • crt.sh – 公共 CT 日志搜索引擎
  • bufferover.run – 提供 CT、DNS 与反向查询数据集

通过 CT 日志发现的示例子域名

api.example.com
dev.example.com
staging-api.example.com
internal-vpn.example.com

适合初学者的 Python 脚本:获取 CT 日志

import requests

domain = "example.com"
url = f"https://crt.sh/?q=%25.{domain}&output=json"

response = requests.get(url, timeout=10)
if response.status_code == 200:
    entries = response.json()
    subdomains = {entry["name_value"] for entry in entries}
    for sub in sorted(subdomains):
        print(sub)
else:
    print("Failed to fetch CT logs")

该脚本查询 crt.sh,获取所有包含目标域的证书,提取唯一的子域名并打印。你可以将输出通过管道保存到文件,以便后续分析。

指南结束。

Back to Blog

相关文章

阅读更多 »