Skip to content

nessus python(python调用nessus api的详细步骤?如何用python实现nessus自动化扫描?nessus与python集成的入门教程?新手必看的nessus api操作指南?)


🌟 为什么新手要学Python调用Nessus API?

Nessus作为全球知名漏洞扫描工具,能检测网络设备、服务器、应用的安全风险,但手动操作效率低😩!通过Python调用其API,可以实现自动化扫描任务创建、结果获取、报告生成,比如批量扫描内网主机、定时检测高危漏洞。对小白来说,掌握这个技能=拥有了“安全自动化神器”🔧!


🔧 第一步:环境准备——Python和Nessus基础配置

你需要准备什么?
– Python 3.6+(推荐用PyCharm或VS Code编辑代码)
– Nessus专业版/家庭版(本地部署或Tenable.io云端,确保账号有API权限)
– Nessus官方API文档(地址:https://docs.tenable.com/)

关键操作:
1. 登录Nessus后台,找到「设置」→「API Keys」,生成你的Access Key和Secret Key(相当于登录凭证);
2. 确认Nessus服务地址(本地默认是https://localhost:8834,云端根据账号提示);
3. 安装Python请求库:命令行输入pip install requests

💡 个人经验:本地部署Nessus的话,记得关闭防火墙或放行8834端口,否则API请求会报错“连接拒绝”!


📡 第二步:Python连接Nessus API——获取会话Token

调用API的第一步是登录认证,Nessus通过Token验证身份。以下是核心代码示例👇:

“`python
import requests
import json

Nessus服务地址和认证信息(替换成你的!)

NESSUS_URL = “https://localhost:8834”
ACCESS_KEY = “你的AccessKey”
SECRET_KEY = “你的SecretKey”

请求头(必须带Content-Type和X-APIKeys)

headers = {
“Content-Type”: “application/json”,
“X-APIKeys”: f”accessKey={ACCESS_KEY}; secretKey={SECRET_KEY}”
}

发送登录请求(获取用户信息验证连通性)

response = requests.get(f”{NESSUS_URL}/session”, headers=headers, verify=False) # verify=False跳过证书验证(测试环境用)
if response.status_code == 200:
print(“✅ 连接成功!用户信息:”, response.json())
else:
print(“❌ 连接失败,状态码:”, response.status_code, “错误信息:”, response.text)
“`

常见问题解答:
– Q:为什么提示“SSL证书错误”?
A:测试环境可以加verify=False跳过验证(生产环境建议配置正规证书);
– Q:AccessKey和SecretKey在哪找?
A:Nessus网页端右上角头像→「My Account」→「API Keys」生成;


🛠️ 第三步:核心操作——创建扫描任务并获取结果

连接成功后,就能用API控制Nessus干活啦!以下是创建扫描任务→启动扫描→下载报告的全流程:

1️⃣ 创建扫描任务(定义目标IP和扫描模板)

“`python

扫描任务配置(目标IP:192.168.1.1,使用“基础网络扫描”模板)

scan_data = {
“uuid”: “ad629e42-2f26-11e4-8013-b9c0d524f823”, # 模板ID(基础网络扫描,可通过API获取所有模板)
“settings”: {
“name”: “Python自动扫描-测试IP”,
“text_targets”: “192.168.1.1”, # 目标IP(可填多个,用逗号分隔)
“enabled”: True,
“launch”: “ON_DEMAND” # 手动启动(后续用API触发)
}
}

发送创建任务请求

create_url = f”{NESSUS_URL}/scans”
response = requests.post(create_url, headers=headers, data=json.dumps(scan_data), verify=False)
if response.status_code == 200:
scan_id = response.json()[“scan”][“id”] # 获取任务ID
print(“✅ 扫描任务创建成功!任务ID:”, scan_id)
else:
print(“❌ 任务创建失败:”, response.text)
“`

2️⃣ 启动扫描并等待完成

用任务ID触发扫描,然后轮询状态直到完成:
“`python

启动扫描

start_url = f”{NESSUS_URL}/scans/{scan_id}/launch”
requests.post(start_url, headers=headers, verify=False)

轮询扫描状态(每10秒查一次,直到状态为“completed”)

import time
while True:
status_url = f”{NESSUS_URL}/scans/{scan_id}”
status_response = requests.get(status_url, headers=headers, verify=False)
status = status_response.json()[“info”][“status”]
print(f”⏳ 当前扫描状态:{status}”)
if status == “completed”:
break
time.sleep(10)
“`

3️⃣ 下载扫描报告(导出为PDF/HTML)

“`python

导出报告(格式:PDF,报告类型:常规漏洞)

export_url = f”{NESSUS_URL}/scans/{scan_id}/export”
export_data = {
“format”: “pdf”, # 可选:pdf/html/csv/nessus
“reportType”: “vulnerability”
}
export_response = requests.post(export_url, headers=headers, data=json.dumps(export_data), verify=False)
file_id = export_response.json()[“file”]

下载文件

download_url = f”{NESSUS_URL}/scans/{scan_id}/export/{file_id}/download”
download_response = requests.get(download_url, headers=headers, verify=False)
with open(“nessus_scan_result.pdf”, “wb”) as f:
f.write(download_response.content)
print(“✅ 报告已保存为:nessus_scan_result.pdf”)
“`


🎯 新手常见问题答疑

Q:模板ID(uuid)怎么找?
A:通过API获取所有模板列表:requests.get(f"{NESSUS_URL}/editor/scan/templates", headers=headers, verify=False).json(),找到“basic”或“web app”相关模板的UUID。

Q:扫描结果里怎么看具体漏洞?
A:导出的PDF/HTML报告会标注漏洞等级(高危/中危/低危)、受影响IP、修复建议,重点关注“Critical”和“High”级别的条目!


个人观点总结:Python+ Nessus API的组合,能让安全测试从“手工点点点”升级为“批量自动化”,尤其适合企业内网定期扫描、渗透测试前期信息收集。对小白来说,先跑通基础流程(连接→创建任务→下载报告),再逐步研究高级功能(自定义模板、漏洞修复跟踪),绝对值得投入时间学习!

Leave a Reply

Your email address will not be published. Required fields are marked *