KrishnaKarle/Vulnerability-CVE-Scanner

GitHub: KrishnaKarle/Vulnerability-CVE-Scanner

基于Python的轻量级CVE漏洞扫描器,通过端口探测和服务Banner抓取结合NVD数据库查询已知漏洞。

Stars: 1 | Forks: 0

# 漏洞-CVE-扫描器 import socket import requests # 待扫描的常见端口 COMMON_PORTS = { 21: "FTP", 22: "SSH", 23: "TELNET", 25: "SMTP", 53: "DNS", 80: "HTTP", 110: "POP3", 139: "NETBIOS", 143: "IMAP", 443: "HTTPS", 3306: "MySQL", 8080: "HTTP-ALT" } # -------- Banner 抓取 -------- def get_banner(ip, port): try: s = socket.socket() s.settimeout(2) s.connect((ip, port)) ``` # HTTP services require request if port == 80 or port == 8080: s.send(b"GET / HTTP/1.1\r\nHost: test\r\n\r\n") banner = s.recv(1024).decode(errors="ignore").strip() s.close() return banner except: return None ``` # -------- 端口扫描器 -------- def scan_ports(ip): open_ports = [] ``` print("\nScanning target:", ip) print("--------------------------------") for port in COMMON_PORTS: try: s = socket.socket() s.settimeout(1) result = s.connect_ex((ip, port)) if result == 0: service = COMMON_PORTS[port] banner = get_banner(ip, port) print(f"[OPEN] Port {port} ({service})") if banner: print("Banner:", banner) open_ports.append((port, service, banner)) s.close() except: pass return open_ports ``` # -------- CVE 查询 -------- def search_cve(keyword): ``` print("\nSearching CVEs for:", keyword) url = f"https://services.nvd.nist.gov/rest/json/cves/2.0?keywordSearch={keyword}&resultsPerPage=3" try: r = requests.get(url) data = r.json() if "vulnerabilities" in data: for vuln in data["vulnerabilities"]: cve = vuln["cve"]["id"] description = vuln["cve"]["descriptions"][0]["value"] print("\nCVE:", cve) print("Description:", description[:200], "...") else: print("No CVE found") except: print("Error fetching CVE data") ``` # -------- 报告生成器 -------- def generate_report(ip, results): ``` print("\n\n======= SCAN REPORT =======") print("Target:", ip) print("---------------------------") for port, service, banner in results: print(f"\nPort: {port}") print("Service:", service) if banner: print("Banner:", banner) keyword = banner.split()[0] search_cve(keyword) ``` # -------- 主程序 -------- def main(): ``` target = input("Enter target IP or domain: ") try: ip = socket.gethostbyname(target) except: print("Invalid target") return results = scan_ports(ip) generate_report(ip, results) ``` if __name__ == "__main__": main()
标签:CVE, Python, 安全工具, 实时处理, 插件系统, 数字签名, 数据统计, 无后门, 漏洞扫描, 端口扫描