摘要:在数字化时代,开源情报(OSINT)和安全研究能力已成为网络安全从业者、白帽子和隐私保护者的核心技能。本文以 Awesome Security 和 Awesome Hacking 资源为线索,系统梳理OSINT工具、漏洞研究、网络扫描、数字取证等领域的精品资源。通过 Python 自动化工具和流程图,帮助中国安全研究者建立系统化的情报收集和分析能力。
目录
- 一、引言:OSINT是什么?为什么重要?
- 二、OSINT方法论与流程
- 三、信息收集工具链
- 四、网络资产测绘实战
- 五、自动化OSINT框架
- 六、安全研究伦理与法律边界
- 七、漏洞研究资源导航
- 八、常见问题解答
- 九、总结
- 参考资料
一、引言:OSINT是什么?为什么重要?
1.1 OSINT的定义与价值
OSINT(Open Source Intelligence,开源情报)是指从公开可获取的来源收集、分析和利用信息的过程。这些来源包括:
- 社交媒体平台
- 公开的网站和数据库
- 搜索引擎缓存
- 代码仓库(GitHub/GitLab)
- 域名和IP注册信息
- 学术论文和专利
- 新闻媒体和论坛
#mermaid-svg-R2jRlN1fHdDrZOlF{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-R2jRlN1fHdDrZOlF .error-icon{fill:#552222;}#mermaid-svg-R2jRlN1fHdDrZOlF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-R2jRlN1fHdDrZOlF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-R2jRlN1fHdDrZOlF .marker.cross{stroke:#333333;}#mermaid-svg-R2jRlN1fHdDrZOlF svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-R2jRlN1fHdDrZOlF p{margin:0;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge{stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .section–1 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section–1 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section–1 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section–1 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section–1 text{fill:#ffffff;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth–1{stroke-width:17;}#mermaid-svg-R2jRlN1fHdDrZOlF .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-0 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-0 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-0 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-0 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-0 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-0{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-0{stroke-width:14;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-1 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-1 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-1 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-1 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-1 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-1{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-1{stroke-width:11;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-2 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-2 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-2 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-2 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-2 text{fill:#ffffff;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-2{stroke-width:8;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-3 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-3 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-3 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-3 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-3 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-3{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-3{stroke-width:5;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-4 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-4 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-4 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-4 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-4 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-4{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-4{stroke-width:2;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-5 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-5 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-5 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-5 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-5 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-5{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-5{stroke-width:-1;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-6 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-6 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-6 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-6 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-6 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-6{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-6{stroke-width:-4;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-7 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-7 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-7 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-7 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-7 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-7{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-7{stroke-width:-7;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-8 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-8 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-8 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-8 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-8 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-8{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-8{stroke-width:-10;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-9 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-9 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-9 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-9 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-9 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-9{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-9{stroke-width:-13;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-10 rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-10 path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-10 circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-10 polygon,#mermaid-svg-R2jRlN1fHdDrZOlF .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-10 text{fill:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .node-icon-10{font-size:40px;color:black;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .edge-depth-10{stroke-width:-16;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled circle,#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:lightgray;}#mermaid-svg-R2jRlN1fHdDrZOlF .disabled text{fill:#efefef;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-root rect,#mermaid-svg-R2jRlN1fHdDrZOlF .section-root path,#mermaid-svg-R2jRlN1fHdDrZOlF .section-root circle,#mermaid-svg-R2jRlN1fHdDrZOlF .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-R2jRlN1fHdDrZOlF .section-root text{fill:#ffffff;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-root span{color:#ffffff;}#mermaid-svg-R2jRlN1fHdDrZOlF .section-2 span{color:#ffffff;}#mermaid-svg-R2jRlN1fHdDrZOlF .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-R2jRlN1fHdDrZOlF .edge{fill:none;}#mermaid-svg-R2jRlN1fHdDrZOlF .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-R2jRlN1fHdDrZOlF :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
OSINT信息来源
网络资产
域名/IP
子域名
开放端口
技术栈
社交媒体
个人资料
关系网络
地理位置
时间线
代码仓库
泄露密钥
内部路径
开发者信息
依赖分析
公开数据
工商注册
招聘网站
专利论文
法院公告
1.2 OSINT的合法应用场景
| 企业安全 | 暴露面梳理 | 发现影子IT和泄露资产 |
| 红队演练 | 攻击面分析 | 模拟真实攻击路径 |
| 威胁情报 | 追踪攻击者 | 关联IOC和TTP |
| 品牌保护 | 假冒监测 | 发现钓鱼网站和仿冒APP |
| 合规审计 | 数据泄露检测 | 发现员工泄露敏感信息 |
⚠️ 法律声明:OSINT仅限于收集公开可获取的信息,严禁未经授权访问非公开系统。
二、OSINT方法论与流程
2.1 情报收集流程
#mermaid-svg-UbkSV4RsjQjPxgNa{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UbkSV4RsjQjPxgNa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UbkSV4RsjQjPxgNa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UbkSV4RsjQjPxgNa .error-icon{fill:#552222;}#mermaid-svg-UbkSV4RsjQjPxgNa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UbkSV4RsjQjPxgNa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UbkSV4RsjQjPxgNa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UbkSV4RsjQjPxgNa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UbkSV4RsjQjPxgNa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UbkSV4RsjQjPxgNa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UbkSV4RsjQjPxgNa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UbkSV4RsjQjPxgNa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UbkSV4RsjQjPxgNa .marker.cross{stroke:#333333;}#mermaid-svg-UbkSV4RsjQjPxgNa svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UbkSV4RsjQjPxgNa p{margin:0;}#mermaid-svg-UbkSV4RsjQjPxgNa .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-UbkSV4RsjQjPxgNa .cluster-label text{fill:#333;}#mermaid-svg-UbkSV4RsjQjPxgNa .cluster-label span{color:#333;}#mermaid-svg-UbkSV4RsjQjPxgNa .cluster-label span p{background-color:transparent;}#mermaid-svg-UbkSV4RsjQjPxgNa .label text,#mermaid-svg-UbkSV4RsjQjPxgNa span{fill:#333;color:#333;}#mermaid-svg-UbkSV4RsjQjPxgNa .node rect,#mermaid-svg-UbkSV4RsjQjPxgNa .node circle,#mermaid-svg-UbkSV4RsjQjPxgNa .node ellipse,#mermaid-svg-UbkSV4RsjQjPxgNa .node polygon,#mermaid-svg-UbkSV4RsjQjPxgNa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UbkSV4RsjQjPxgNa .rough-node .label text,#mermaid-svg-UbkSV4RsjQjPxgNa .node .label text,#mermaid-svg-UbkSV4RsjQjPxgNa .image-shape .label,#mermaid-svg-UbkSV4RsjQjPxgNa .icon-shape .label{text-anchor:middle;}#mermaid-svg-UbkSV4RsjQjPxgNa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UbkSV4RsjQjPxgNa .rough-node .label,#mermaid-svg-UbkSV4RsjQjPxgNa .node .label,#mermaid-svg-UbkSV4RsjQjPxgNa .image-shape .label,#mermaid-svg-UbkSV4RsjQjPxgNa .icon-shape .label{text-align:center;}#mermaid-svg-UbkSV4RsjQjPxgNa .node.clickable{cursor:pointer;}#mermaid-svg-UbkSV4RsjQjPxgNa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UbkSV4RsjQjPxgNa .arrowheadPath{fill:#333333;}#mermaid-svg-UbkSV4RsjQjPxgNa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UbkSV4RsjQjPxgNa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UbkSV4RsjQjPxgNa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UbkSV4RsjQjPxgNa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UbkSV4RsjQjPxgNa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UbkSV4RsjQjPxgNa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UbkSV4RsjQjPxgNa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UbkSV4RsjQjPxgNa .cluster text{fill:#333;}#mermaid-svg-UbkSV4RsjQjPxgNa .cluster span{color:#333;}#mermaid-svg-UbkSV4RsjQjPxgNa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UbkSV4RsjQjPxgNa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UbkSV4RsjQjPxgNa rect.text{fill:none;stroke-width:0;}#mermaid-svg-UbkSV4RsjQjPxgNa .icon-shape,#mermaid-svg-UbkSV4RsjQjPxgNa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UbkSV4RsjQjPxgNa .icon-shape p,#mermaid-svg-UbkSV4RsjQjPxgNa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UbkSV4RsjQjPxgNa .icon-shape .label rect,#mermaid-svg-UbkSV4RsjQjPxgNa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UbkSV4RsjQjPxgNa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UbkSV4RsjQjPxgNa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UbkSV4RsjQjPxgNa :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
目标定义
信息收集
数据处理
关联分析
情报产出
验证反馈
主动扫描
被动收集
历史数据
去重清洗
标准化
时间线
关系图谱
行为模式
归因分析
三、信息收集工具链
3.1 域名与IP信息收集
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
OSINT域名信息收集工具
功能:收集域名的WHOIS、DNS、子域名信息
"""
import socket
import subprocess
from typing import List, Dict, Optional
from dataclasses import dataclass
@dataclass
class DomainInfo:
"""域名信息"""
domain: str
ip_addresses: List[str]
subdomains: List[str]
whois_data: Dict
dns_records: Dict
class DomainIntelligence:
"""
域名情报收集器
收集目标域名的多维信息。
"""
def __init__(self):
self.results: Dict[str, DomainInfo] = {}
def resolve_ip(self, domain: str) –> List[str]:
"""
解析域名IP地址
Args:
domain: 目标域名
Returns:
IP地址列表
"""
try:
ips = socket.gethostbyname_ex(domain)[2]
return ips
except socket.gaierror:
return []
def get_dns_records(self, domain: str) –> Dict[str, List[str]]:
"""
获取DNS记录
使用dig命令获取各种DNS记录类型。
"""
records = {}
record_types = ["A", "AAAA", "MX", "NS", "TXT", "CNAME"]
for rtype in record_types:
try:
result = subprocess.run(
["dig", "+short", rtype, domain],
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0 and result.stdout.strip():
records[rtype] = result.stdout.strip().split("\\n")
except (subprocess.TimeoutExpired, FileNotFoundError):
pass
return records
def subdomain_enum(self, domain: str, wordlist: List[str] = None) –> List[str]:
"""
子域名枚举
Args:
domain: 目标域名
wordlist: 子域名字典
Returns:
发现的子域名列表
"""
if wordlist is None:
wordlist = ["www", "mail", "ftp", "api", "blog", "admin", "test", "dev", "staging"]
found = []
print(f"🔍 开始枚举 {domain} 的子域名…")
for sub in wordlist:
subdomain = f"{sub}.{domain}"
try:
socket.gethostbyname(subdomain)
found.append(subdomain)
print(f" ✅ 发现: {subdomain}")
except socket.gaierror:
pass
return found
def analyze(self, domain: str) –> DomainInfo:
"""
完整分析域名
Args:
domain: 目标域名
Returns:
DomainInfo对象
"""
print(f"\\n{'='*60}")
print(f"域名情报分析: {domain}")
print(f"{'='*60}")
ips = self.resolve_ip(domain)
print(f"\\n📍 IP地址: {ips}")
dns = self.get_dns_records(domain)
print(f"\\n📋 DNS记录:")
for rtype, values in dns.items():
print(f" {rtype}: {values}")
subs = self.subdomain_enum(domain)
print(f"\\n🔍 子域名 ({len(subs)}个): {subs}")
info = DomainInfo(
domain=domain,
ip_addresses=ips,
subdomains=subs,
whois_data={},
dns_records=dns
)
self.results[domain] = info
return info
def demo_domain_intel():
"""演示域名情报收集"""
intel = DomainIntelligence()
# 使用示例域名
intel.analyze("example.com")
print("\\n💡 生产环境建议:")
print(" – 使用Amass进行大规模子域名枚举")
print(" – 使用Shodan/Censys查询IP关联资产")
print(" – 使用SecurityTrails获取历史DNS数据")
if __name__ == "__main__":
demo_domain_intel()
四、网络资产测绘实战
4.1 端口扫描与服务识别
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
网络资产扫描工具
功能:端口扫描和服务指纹识别
"""
import socket
import asyncio
from typing import List, Dict, Set
from dataclasses import dataclass
@dataclass
class PortScanResult:
"""端口扫描结果"""
host: str
port: int
state: str # open/closed/filtered
service: str
banner: str
class NetworkScanner:
"""
网络扫描器
异步端口扫描和服务识别。
"""
COMMON_PORTS = {
21: "FTP", 22: "SSH", 23: "Telnet", 25: "SMTP",
53: "DNS", 80: "HTTP", 110: "POP3", 143: "IMAP",
443: "HTTPS", 3306: "MySQL", 3389: "RDP",
5432: "PostgreSQL", 6379: "Redis", 8080: "HTTP-Proxy",
8443: "HTTPS-Alt", 9200: "Elasticsearch", 27017: "MongoDB"
}
def __init__(self, timeout: float = 2.0):
self.timeout = timeout
async def scan_port(self, host: str, port: int) –> Optional[PortScanResult]:
"""
扫描单个端口
Args:
host: 目标主机
port: 目标端口
Returns:
扫描结果或None
"""
try:
reader, writer = await asyncio.wait_for(
asyncio.open_connection(host, port),
timeout=self.timeout
)
# 尝试获取banner
banner = ""
try:
writer.write(b"\\r\\n")
await writer.drain()
data = await asyncio.wait_for(reader.read(1024), timeout=1.0)
banner = data.decode("utf-8", errors="ignore").strip()[:100]
except:
pass
writer.close()
await writer.wait_closed()
return PortScanResult(
host=host,
port=port,
state="open",
service=self.COMMON_PORTS.get(port, "unknown"),
banner=banner
)
except (asyncio.TimeoutError, ConnectionRefusedError, OSError):
return None
async def scan_host(
self,
host: str,
ports: List[int] = None
) –> List[PortScanResult]:
"""
扫描主机端口
Args:
host: 目标主机
ports: 端口列表,None则扫描常用端口
Returns:
开放的端口列表
"""
if ports is None:
ports = list(self.COMMON_PORTS.keys())
print(f"🔍 扫描 {host} 的 {len(ports)} 个端口…")
tasks = [self.scan_port(host, port) for port in ports]
results = await asyncio.gather(*tasks)
open_ports = [r for r in results if r is not None]
return open_ports
def generate_report(self, results: List[PortScanResult]) –> str:
"""生成扫描报告"""
lines = ["=" * 60, "端口扫描报告", "=" * 60]
if not results:
lines.append("\\n未发现开放端口")
return "\\n".join(lines)
lines.append(f"\\n发现 {len(results)} 个开放端口:\\n")
lines.append(f"{'端口':<8} {'状态':<10} {'服务':<15} {'Banner'}")
lines.append("-" * 60)
for r in sorted(results, key=lambda x: x.port):
banner = r.banner[:30] + "…" if len(r.banner) > 30 else r.banner
lines.append(f"{r.port:<8} {r.state:<10} {r.service:<15} {banner}")
return "\\n".join(lines)
def demo_scanner():
"""演示网络扫描"""
print("=" * 60)
print("网络资产扫描工具")
print("=" * 60)
scanner = NetworkScanner(timeout=1.0)
# 扫描本地服务
async def run_scan():
results = await scanner.scan_host("127.0.0.1", [8000, 8080, 3000, 22, 80])
print(scanner.generate_report(results))
asyncio.run(run_scan())
print("\\n⚠️ 法律提醒:")
print(" 仅扫描您拥有授权的目标!")
print(" 未经授权扫描他人系统可能违法。")
if __name__ == "__main__":
demo_scanner()
五、自动化OSINT框架
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
自动化OSINT报告生成器
功能:整合多个信息源,生成结构化情报报告
"""
import json
from datetime import datetime
from typing import List, Dict
from dataclasses import dataclass, asdict
@dataclass
class OSINTFinding:
"""OSINT发现"""
source: str
category: str
finding: str
confidence: str # high/medium/low
evidence: str
timestamp: str
class OSINTReportGenerator:
"""
OSINT报告生成器
整合多个收集器的结果,生成标准化报告。
"""
def __init__(self, target: str):
self.target = target
self.findings: List[OSINTFinding] = []
self.timestamp = datetime.now().isoformat()
def add_finding(self, finding: OSINTFinding):
"""添加发现"""
self.findings.append(finding)
def generate_markdown(self) –> str:
"""生成Markdown报告"""
lines = [
f"# OSINT情报报告: {self.target}",
f"\\n> 生成时间: {self.timestamp}",
f"> 发现总数: {len(self.findings)}\\n",
"## 执行摘要\\n",
self._generate_summary(),
"\\n## 详细发现\\n"
]
# 按类别分组
categories: Dict[str, List[OSINTFinding]] = {}
for f in self.findings:
categories.setdefault(f.category, []).append(f)
for category, findings in categories.items():
lines.append(f"### {category}\\n")
for i, f in enumerate(findings, 1):
lines.extend([
f"**发现 {i}** ({f.confidence}置信度)",
f"- 来源: {f.source}",
f"- 内容: {f.finding}",
f"- 证据: {f.evidence}",
f"- 时间: {f.timestamp}",
""
])
lines.extend([
"## 风险评级\\n",
self._risk_assessment(),
"\\n## 建议措施\\n",
self._recommendations(),
"\\n—",
"*本报告基于公开信息生成,仅供授权人员使用*"
])
return "\\n".join(lines)
def generate_json(self) –> str:
"""生成JSON报告"""
report = {
"target": self.target,
"timestamp": self.timestamp,
"findings_count": len(self.findings),
"findings": [asdict(f) for f in self.findings]
}
return json.dumps(report, ensure_ascii=False, indent=2)
def _generate_summary(self) –> str:
"""生成摘要"""
high_conf = sum(1 for f in self.findings if f.confidence == "high")
return f"共发现 {len(self.findings)} 条情报,其中高置信度 {high_conf} 条。"
def _risk_assessment(self) –> str:
"""风险评估"""
return "基于收集到的信息,建议关注暴露的网络资产和潜在的敏感信息泄露。"
def _recommendations(self) –> str:
"""建议措施"""
return """1. 审查暴露的子域名和服务
2. 检查代码仓库中的敏感信息
3. 评估社交媒体的隐私设置
4. 定期监控域名注册信息变化"""
def demo_report():
"""演示报告生成"""
print("=" * 60)
print("OSINT报告生成器")
print("=" * 60)
generator = OSINTReportGenerator("example.com")
# 添加模拟发现
generator.add_finding(OSINTFinding(
source="DNS枚举",
category="网络资产",
finding="发现12个子域名",
confidence="high",
evidence="admin.example.com, api.example.com 等",
timestamp=datetime.now().isoformat()
))
generator.add_finding(OSINTFinding(
source="GitHub搜索",
category="代码泄露",
finding="发现包含公司邮箱的公开仓库",
confidence="medium",
evidence="github.com/user/repo 包含配置信息",
timestamp=datetime.now().isoformat()
))
report = generator.generate_markdown()
print(report[:1500] + "\\n… [报告截断]")
# 保存
with open("osint_report.md", "w", encoding="utf-8") as f:
f.write(report)
print("\\n💾 报告已保存: osint_report.md")
if __name__ == "__main__":
demo_report()
六、安全研究伦理与法律边界
6.1 法律红线
#mermaid-svg-6jfWNAaSlMZ1RA8d{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-6jfWNAaSlMZ1RA8d .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-6jfWNAaSlMZ1RA8d .error-icon{fill:#552222;}#mermaid-svg-6jfWNAaSlMZ1RA8d .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6jfWNAaSlMZ1RA8d .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6jfWNAaSlMZ1RA8d .marker.cross{stroke:#333333;}#mermaid-svg-6jfWNAaSlMZ1RA8d svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6jfWNAaSlMZ1RA8d p{margin:0;}#mermaid-svg-6jfWNAaSlMZ1RA8d .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-6jfWNAaSlMZ1RA8d .cluster-label text{fill:#333;}#mermaid-svg-6jfWNAaSlMZ1RA8d .cluster-label span{color:#333;}#mermaid-svg-6jfWNAaSlMZ1RA8d .cluster-label span p{background-color:transparent;}#mermaid-svg-6jfWNAaSlMZ1RA8d .label text,#mermaid-svg-6jfWNAaSlMZ1RA8d span{fill:#333;color:#333;}#mermaid-svg-6jfWNAaSlMZ1RA8d .node rect,#mermaid-svg-6jfWNAaSlMZ1RA8d .node circle,#mermaid-svg-6jfWNAaSlMZ1RA8d .node ellipse,#mermaid-svg-6jfWNAaSlMZ1RA8d .node polygon,#mermaid-svg-6jfWNAaSlMZ1RA8d .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6jfWNAaSlMZ1RA8d .rough-node .label text,#mermaid-svg-6jfWNAaSlMZ1RA8d .node .label text,#mermaid-svg-6jfWNAaSlMZ1RA8d .image-shape .label,#mermaid-svg-6jfWNAaSlMZ1RA8d .icon-shape .label{text-anchor:middle;}#mermaid-svg-6jfWNAaSlMZ1RA8d .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-6jfWNAaSlMZ1RA8d .rough-node .label,#mermaid-svg-6jfWNAaSlMZ1RA8d .node .label,#mermaid-svg-6jfWNAaSlMZ1RA8d .image-shape .label,#mermaid-svg-6jfWNAaSlMZ1RA8d .icon-shape .label{text-align:center;}#mermaid-svg-6jfWNAaSlMZ1RA8d .node.clickable{cursor:pointer;}#mermaid-svg-6jfWNAaSlMZ1RA8d .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-6jfWNAaSlMZ1RA8d .arrowheadPath{fill:#333333;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6jfWNAaSlMZ1RA8d .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6jfWNAaSlMZ1RA8d .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-6jfWNAaSlMZ1RA8d .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6jfWNAaSlMZ1RA8d .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-6jfWNAaSlMZ1RA8d .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6jfWNAaSlMZ1RA8d .cluster text{fill:#333;}#mermaid-svg-6jfWNAaSlMZ1RA8d .cluster span{color:#333;}#mermaid-svg-6jfWNAaSlMZ1RA8d div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6jfWNAaSlMZ1RA8d .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-6jfWNAaSlMZ1RA8d rect.text{fill:none;stroke-width:0;}#mermaid-svg-6jfWNAaSlMZ1RA8d .icon-shape,#mermaid-svg-6jfWNAaSlMZ1RA8d .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6jfWNAaSlMZ1RA8d .icon-shape p,#mermaid-svg-6jfWNAaSlMZ1RA8d .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-6jfWNAaSlMZ1RA8d .icon-shape .label rect,#mermaid-svg-6jfWNAaSlMZ1RA8d .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6jfWNAaSlMZ1RA8d .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-6jfWNAaSlMZ1RA8d .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-6jfWNAaSlMZ1RA8d :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
是
否
是
否
是
安全研究
授权?
白盒测试
公开信息?
OSINT收集
停止!
漏洞挖掘
情报分析
发现漏洞?
负责任披露
6.2 道德准则
七、漏洞研究资源导航
| 漏洞数据库 | CVE/NVD | 官方漏洞编号库 |
| Exploit库 | Exploit-DB | 公开的漏洞利用代码 |
| 威胁情报 | MISP | 威胁情报共享平台 |
| 工具集 | Kali Linux | 渗透测试发行版 |
| 学习平台 | Hack The Box | 在线CTF练习 |
| 漏洞赏金 | HackerOne | 漏洞赏金平台 |
| 代码审计 | SonarQube | 静态代码分析 |
| 依赖扫描 | Snyk | 开源依赖漏洞 |
八、常见问题解答
Q1:OSINT和普通搜索有什么区别?
答:OSINT强调系统化的收集、分析和验证。普通搜索是找到信息,OSINT是将碎片化的公开信息关联成有价值的情报。
Q2:个人如何进行合法的OSINT练习?
答:
Q3:OSINT工具有哪些推荐?
答:
- 综合:Maltego、theHarvester、Amass
- 域名:SecurityTrails、VirusTotal
- 社交媒体:Sherlock、Spiderfoot
- 代码:GitDorker、TruffleHog
- 网络:Shodan、Censys、Nmap
九、总结
#mermaid-svg-yT0uRUOy5mCpzCs0{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yT0uRUOy5mCpzCs0 .error-icon{fill:#552222;}#mermaid-svg-yT0uRUOy5mCpzCs0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yT0uRUOy5mCpzCs0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yT0uRUOy5mCpzCs0 .marker.cross{stroke:#333333;}#mermaid-svg-yT0uRUOy5mCpzCs0 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yT0uRUOy5mCpzCs0 p{margin:0;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge{stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section–1 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section–1 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section–1 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section–1 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section–1 text{fill:#ffffff;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth–1{stroke-width:17;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-0 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-0 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-0 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-0 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-0 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-0{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-0{stroke-width:14;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-1 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-1 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-1 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-1 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-1 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-1{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-1{stroke-width:11;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-2 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-2 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-2 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-2 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-2 text{fill:#ffffff;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-2{stroke-width:8;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-3 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-3 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-3 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-3 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-3 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-3{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-3{stroke-width:5;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-4 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-4 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-4 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-4 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-4 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-4{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-4{stroke-width:2;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-5 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-5 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-5 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-5 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-5 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-5{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-5{stroke-width:-1;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-6 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-6 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-6 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-6 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-6 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-6{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-6{stroke-width:-4;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-7 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-7 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-7 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-7 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-7 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-7{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-7{stroke-width:-7;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-8 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-8 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-8 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-8 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-8 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-8{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-8{stroke-width:-10;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-9 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-9 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-9 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-9 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-9 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-9{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-9{stroke-width:-13;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-10 rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-10 path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-10 circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-10 polygon,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-10 text{fill:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .node-icon-10{font-size:40px;color:black;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge-depth-10{stroke-width:-16;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:lightgray;}#mermaid-svg-yT0uRUOy5mCpzCs0 .disabled text{fill:#efefef;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-root rect,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-root path,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-root circle,#mermaid-svg-yT0uRUOy5mCpzCs0 .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-root text{fill:#ffffff;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-root span{color:#ffffff;}#mermaid-svg-yT0uRUOy5mCpzCs0 .section-2 span{color:#ffffff;}#mermaid-svg-yT0uRUOy5mCpzCs0 .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-yT0uRUOy5mCpzCs0 .edge{fill:none;}#mermaid-svg-yT0uRUOy5mCpzCs0 .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-yT0uRUOy5mCpzCs0 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
OSINT知识体系
收集阶段
域名信息
网络扫描
代码仓库
社交媒体
分析阶段
关联分析
时间线
关系图谱
行为模式
产出阶段
情报报告
风险评估
修复建议
合规要求
法律边界
道德准则
授权范围
参考资料
本文仅供安全研究和教育目的,所有操作应在合法授权范围内进行。




