当前位置:网站首页 >  攻略

手把手教你用Python加免费开放API搭建简单高效的轻量恶意链接检测工具

时间:2026年06月03日 12:23:43 来源:易频IT社区

一、前期准备:安装Python环境与测试工具依赖

1. 安装Python3.8+

首先确保本地电脑已安装Python3.8及以上版本,可通过以下步骤验证或安装:

  • 验证已安装:打开Windows命令提示符(cmd)或Mac/Linux终端,输入python --version(Mac/Linux如果用python3 --version),显示Python版本需≥3.8;
  • 未安装的操作:访问Python官网下载稳定版(地址:https://www.python.org/downloads/,安装时务必勾选Add Python to PATH选项,否则需手动配置环境变量。

2. 安装Python依赖库

本次使用requests库(用于调用免费API),打开终端输入以下命令并回车:

``` pip install requests ```

如果安装成功后终端会显示Successfully installed requests-x.x.x类似内容。

二、获取免费恶意链接检测开放API

这里选取VirusTotal Public API v3,无需付费、无需复杂审核,单日调用限制为500次/月4次/分钟,完全满足个人轻量使用:

  • 注册VirusTotal账号:访问https://www.virustotal.com/gui/join-us,用邮箱或Google/GitHub账号注册;
  • 获取API Key:登录后点击右上角头像→API Key→复制Your API Key(注意保管,不要泄露)。

三、编写完整的恶意链接检测Python脚本

手把手教你用Python加免费开放API搭建简单高效的轻量恶意链接检测工具

新建一个文本文件,重命名为malicious_link_checker.py,用记事本、VS Code或其他编辑器打开,粘贴以下完整可直接运行的代码:

```python import requests import time 配置区域:粘贴你的VirusTotal API Key API_KEY = "这里粘贴你的API Key" BASE_URL = "https://www.virustotal.com/api/v3/urls" HEADERS = {"x-apikey": API_KEY} def check_malicious_link(url: str) -> dict: """ 检测单个恶意链接的核心函数 :param url: 需要检测的链接 :return: 检测结果字典 """ try: 第一步:提交链接到VirusTotal(需要先编码为base64url,v3 API要求) import base64 url_encoded = base64.urlsafe_b64encode(url.encode()).decode().rstrip('=') response_submit = requests.post( BASE_URL, headers=HEADERS, data={"url": url} ) response_submit.raise_for_status() 检查提交请求是否成功 第二步:获取分析ID analysis_id = response_submit.json()["data"]["id"] analysis_url = f"https://www.virustotal.com/api/v3/analyses/{analysis_id}" 第三步:轮询分析结果(等待分析完成,免费版最多等30秒,超时返回未完成) max_wait = 30 wait_interval = 5 elapsed = 0 while elapsed < max_wait: response_analysis = requests.get(analysis_url, headers=HEADERS) response_analysis.raise_for_status() analysis_data = response_analysis.json()["data"]["attributes"] status = analysis_data["status"] if status == "completed": break elapsed += wait_interval time.sleep(wait_interval) if status != "completed": return {"status": "timeout", "message": "分析超时,请稍后手动在VirusTotal网页查询"} 第四步:解析检测结果 stats = analysis_data["stats"] return { "status": "success", "original_url": url, "total_engines": stats["harmless"] + stats["malicious"] + stats["suspicious"] + stats["undetected"], "malicious_count": stats["malicious"], "suspicious_count": stats["suspicious"], "harmless_count": stats["harmless"], "undetected_count": stats["undetected"], "result_summary": f"{stats['malicious']} 个引擎标记恶意,{stats['suspicious']} 个标记可疑" } except requests.exceptions.RequestException as e: return {"status": "error", "message": f"请求失败:{str(e)}"} except Exception as e: return {"status": "error", "message": f"发生未知错误:{str(e)}"} def main(): """ 主函数:交互检测 """ print("轻量恶意链接检测工具启动!") print("提示:单次仅支持单个链接检测,如需批量可修改脚本逻辑") while True: url = input("\n请输入需要检测的链接(输入q退出):").strip() if url.lower() == 'q': print("工具已退出,再见!") break if not url.startswith(('http://', 'https://')): url = 'https://' + url print(f"自动补全协议为:{url}") print("正在检测,请稍候...") result = check_malicious_link(url) if result["status"] == "success": print("\n===== 检测结果 =====") print(f"原始链接:{result['original_url']}") print(f"参与检测的引擎总数:{result['total_engines']}") print(f"恶意引擎标记恶意数:{result['malicious_count']}") print(f"可疑引擎标记数:{result['suspicious_count']}") print(f"安全引擎标记数:{result['harmless_count']}") print(f"未检测到结果:{result['undetected_count']}") print(f"结果总结:{result['result_summary']}") if result["malicious_count"] > 0: print("\n⚠️ ⚠️ ⚠️ 警告:该链接存在风险,谨慎访问!") elif result["suspicious_count"] > 0: print("\n⚠️ 提示:该链接存在可疑性,建议谨慎访问!") else: print("\n✅ 该链接目前被标记为安全!") else: print(f"\n检测出错:{result['message']}") if __name__ == "__main__": main() ```

关键修改说明:找到代码中第6行的API_KEY = "这里粘贴你的API Key",将双引号内的内容替换为你刚才复制的VirusTotal API Key,不要留空格。

四、实操运行脚本检测链接

  • Windows系统
    1. 打开脚本所在的文件夹,在地址栏输入cmd并回车,打开终端;
    2. 输入python malicious_link_checker.py并回车;
  • Mac/Linux系统
    1. 打开终端,使用cd命令进入脚本所在文件夹(比如脚本在桌面,输入cd Desktop);
    2. 输入python3 malicious_link_checker.py并回车;

运行成功后会出现提示,输入链接回车即可检测,输入q回车退出。

五、简单批量检测优化逻辑(可选进阶)

如果需要批量检测,可新建一个links.txt文本文件,每行放一个待检测链接(不要带多余空格或空行),然后将上面的main()函数替换为以下批量检测的main()

```python def main(): """ 批量检测主函数 """ print("轻量批量恶意链接检测工具启动!") file_path = input("请输入待检测链接的txt文件路径(默认当前目录下的links.txt):").strip() if not file_path: file_path = "links.txt" try: with open(file_path, 'r', encoding='utf-8') as f: urls = [line.strip() for line in f if line.strip()] print(f"共读取到 {len(urls)} 个待检测链接") safe_links = [] risky_links = [] suspicious_links = [] error_links = [] for i, url in enumerate(urls, 1): if not url.startswith(('http://', 'https://')): url = 'https://' + url print(f"\n正在检测第 {i}/{len(urls)} 个链接:{url}") result = check_malicious_link(url) if result["status"] == "success": if result["malicious_count"] > 0: risky_links.append(url) elif result["suspicious_count"] > 0: suspicious_links.append(url) else: safe_links.append(url) print(f"结果:{result['result_summary']}") 免费版每分钟最多4次,批量检测间隔15秒 if i < len(urls): time.sleep(15) else: error_links.append((url, result["message"]) print(f"结果:{result['message']}") 保存结果到result.txt with open("result.txt", 'w', encoding='utf-8') as f: f.write("===== 批量检测结果 =====\n\n") f.write(f"安全链接({len(safe_links)}):\n") for link in safe_links: f.write(f"- {link}\n") f.write(f"\n可疑链接({len(suspicious_links)}):\n") for link in suspicious_links: f.write(f"- {link}\n") f.write(f"\n风险链接({len(risky_links)}):\n") for link in risky_links: f.write(f"- {link}\n") f.write(f"\n检测失败链接({len(error_links)}):\n") for url, msg in error_links: f.write(f"- {url}:{msg}\n") print("\n===== 批量检测完成!结果已保存到当前目录下的result.txt") except FileNotFoundError: print(f"未找到文件:{file_path},请检查路径或重新输入!") ```

替换后保存,同样运行即可,免费版按每分钟4次的速率自动检测,避免触发限制。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图