用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/killvxk/cybersecurity-skills-zh --skill performing-ip-reputation-analysis-with-shodan命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
通过分析 Zeek dns.log 中的高熵子域名查询、超量查询量、超长查询长度以及异常 DNS 记录类型,检测 DNS 隧道和数据外泄中的隐蔽通道通信。适用于:当需要狩猎基于 DNS 的 C2 或数据外泄通道、调查异常 DNS 查询模式、或响应涉及 DNS 隧道工具(iodine、dnscat2、DNSExfiltrator)的威胁情报时使用。
实施 Google 的 BeyondCorp 零信任访问模型,通过 IAP、Access Context Manager 和 Chrome Enterprise Premium,消除网络边界的隐式信任,强制执行基于身份的访问控制,实现无 VPN 的安全应用访问。适用于将传统 VPN 替换为零信任架构、部署 Identity-Aware Proxy、配置设备信任策略、或为远程办公实施上下文感知访问控制时使用。
在授权的安全评估过程中,使用 Burp Suite 的扫描器、Intruder 和 Repeater 工具识别和验证跨站脚本(XSS)漏洞。适用于 Web 应用渗透测试中检测反射型、存储型和 DOM 型 XSS,验证自动化扫描器报告的 XSS 发现,以及评估 CSP 和 XSS 过滤器的有效性时使用。
基于 SOC 职业分类
正在显示 SKILL.md
| name | performing-ip-reputation-analysis-with-shodan |
| description | 使用 Shodan API 分析 IP 地址声誉,识别开放端口、运行服务、已知漏洞和托管上下文,用于威胁情报富化和事件分类。 |
| domain | cybersecurity |
| subdomain | threat-intelligence |
| tags | ["shodan","ip-reputation","enrichment","threat-intelligence","reconnaissance","vulnerability","api","internet-scanning"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
Shodan 是全球首个互联网设备搜索引擎,持续扫描 IPv4 和 IPv6 地址空间,记录开放端口、运行服务、SSL 证书和已知漏洞。本技能涵盖使用 Shodan API 和 InternetDB 免费 API 富化来自安全告警的 IP 地址、根据暴露服务和漏洞评估威胁级别、识别托管基础设施模式,以及将 IP 声誉数据集成到 SOC 分类和威胁情报工作流中。
shodan 库(pip install shodan)Shodan 中的每条 IP 记录包含:开放端口和协议、Banner 数据(服务响应)、SSL/TLS 证书详情、已知 CVE 漏洞、主机名和反向 DNS、ASN 和 ISP 信息、地理位置、操作系统指纹,以及显示变化历史的历史扫描数据。
Shodan 的免费 InternetDB API(internetdb.shodan.io)无需身份验证即可快速查询 IP,返回开放端口、主机名、标签、CPE 和已知漏洞。适用于全量 Shodan API 可能触及速率限制的高容量富化场景。
通过以下维度综合评估 IP 声誉:开放端口数量和类型(异常端口表明可能遭到攻陷)、易受攻击服务(含已知 CVE 的未修补软件)、托管类型(住宅、云端、VPN/代理、防弹托管)、历史活动(过去与恶意软件、扫描、垃圾邮件的关联),以及地理背景(以特定威胁活动著称的国家/地区)。
import shodan
import json
from datetime import datetime
class ShodanEnricher:
def __init__(self, api_key):
self.api = shodan.Shodan(api_key)
self.info = self.api.info()
print(f"[+] Shodan API 已初始化。剩余扫描积分:{self.info.get('scan_credits', 0)}")
def enrich_ip(self, ip_address):
"""通过 Shodan 对 IP 地址进行完整富化。"""
try:
host = self.api.host(ip_address)
enrichment = {
"ip": ip_address,
"organization": host.get("org", ""),
"asn": host.get("asn", ""),
"isp": host.get("isp", ""),
"country": host.get("country_name", ""),
"country_code": host.get("country_code", ""),
"city": host.get("city", ""),
"latitude": host.get("latitude"),
"longitude": host.get("longitude"),
"os": host.get(, ),
: host.get(, []),
: host.get(, []),
: host.get(, []),
: host.get(, []),
: host.get(, []),
: host.get(, ),
: [],
}
service host.get(, []):
svc = {
: service.get(, ),
: service.get(, ),
: service.get(, ),
: service.get(, ),
: service.get(, {}).get(, ),
: service.get(, )[:],
}
service:
svc[] = service[].get(, {}).get(, {})
svc[] = service[].get(, {}).get(, {})
svc[] = service[].get(, {}).get(, )
enrichment[].append(svc)
enrichment[] = ._calculate_reputation(enrichment)
(
)
enrichment
shodan.APIError e:
()
():
score =
factors = []
vuln_count = (data.get(, []))
vuln_count > :
score +=
factors.append()
vuln_count > :
score +=
factors.append()
vuln_count > :
score +=
factors.append()
suspicious_ports = {, , , , , , ,
, , , , , }
open_ports = (data.get(, []))
sus_found = open_ports.intersection(suspicious_ports)
sus_found:
score +=
factors.append()
malicious_tags = {, , , , }
tags = (data.get(, []))
mal_tags = tags.intersection(malicious_tags)
mal_tags:
score +=
factors.append()
port_count = (data.get(, []))
port_count > :
score +=
factors.append()
level = (
score >=
score >=
score >=
)
{: score, : level, : factors}
():
requests
resp = requests.get(, timeout=)
resp.status_code == :
data = resp.json()
(
)
data
enricher = ShodanEnricher()
result = enricher.enrich_ip()
(json.dumps(result, indent=, default=))
import time
def batch_ip_reputation(enricher, ip_list, output_file="ip_reputation.json"):
"""检查 IP 地址列表的声誉。"""
results = []
for i, ip in enumerate(ip_list):
result = enricher.enrich_ip(ip)
if result:
results.append(result)
if (i + 1) % 10 == 0:
print(f" [{i+1}/{len(ip_list)}] 已处理")
time.sleep(1) # 速率限制
# 按声誉评分降序排列(最高风险在前)
results.sort(key=lambda x: x.get("reputation", {}).get("score", 0), reverse=True)
with open(output_file, "w") as f:
json.dump(results, f, indent=2, default=str)
# 汇总
levels = {"critical": 0, "high": 0, "medium": 0, "low": 0}
for r in results:
level = r.get("reputation", {}).get("level", "low")
levels[level] += 1
print(f"\n=== 批量声誉汇总 ===")
()
level, count levels.items():
()
results
suspicious_ips = [, , ]
results = batch_ip_reputation(enricher, suspicious_ips)
def correlate_infrastructure(enricher, ip_address):
"""根据共享属性发现相关基础设施。"""
host_data = enricher.enrich_ip(ip_address)
if not host_data:
return {}
correlations = {
"same_org": [],
"same_asn": [],
"shared_ssl": [],
}
# 搜索同一组织
org = host_data.get("organization", "")
if org:
try:
results = enricher.api.search(f'org:"{org}"', limit=20)
for match in results.get("matches", []):
correlations["same_org"].append({
"ip": match.get("ip_str", ""),
"port": match.get("port", 0),
"product": match.get("product", ""),
})
except shodan.APIError:
pass
# 搜索相同 SSL 证书
for service in host_data.get("services", []):
ssl_subject = service.get("ssl_subject", {})
if ssl_subject:
cn = ssl_subject.get("CN", "")
if cn:
:
results = enricher.api.search(, limit=)
results.get(, []):
correlations[].append({
: .get(, ),
: cn,
})
shodan.APIError:
()
()
()
correlations