本文目录导读:

我来为您详细介绍如何编写网络安全检查脚本,从基础到进阶。
基础网络安全检查脚本
简单的端口扫描脚本(Bash)
#!/bin/bash
# 基础端口扫描器
TARGET=$1
PORTS=(22 80 443 3306 8080 8443)
echo "开始扫描 $TARGET ..."
for PORT in "${PORTS[@]}"; do
timeout 1 bash -c "echo >/dev/tcp/$TARGET/$PORT" 2>/dev/null && \
echo "端口 $PORT 开放" || \
echo "端口 $PORT 关闭"
done
echo "扫描完成!"
Python网络安全检查脚本
完整的网络扫描器
#!/usr/bin/env python3
"""
网络安全检查脚本
功能:端口扫描、服务检测、安全漏洞检查
"""
import socket
import ssl
import sys
import time
from concurrent.futures import ThreadPoolExecutor
class SecurityScanner:
def __init__(self, target, timeout=3):
self.target = target
self.timeout = timeout
self.open_ports = []
def scan_port(self, port):
"""扫描单个端口"""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(self.timeout)
result = sock.connect_ex((self.target, port))
if result == 0:
service = self.get_service_name(port)
self.open_ports.append((port, service))
print(f"[+] 端口 {port} ({service}) 开放")
sock.close()
except:
pass
def get_service_name(self, port):
"""获取端口对应的服务名称"""
common_services = {
21: "FTP", 22: "SSH", 23: "Telnet",
25: "SMTP", 53: "DNS", 80: "HTTP",
443: "HTTPS", 3306: "MySQL", 3389: "RDP",
5432: "PostgreSQL", 6379: "Redis", 8080: "HTTP-Proxy"
}
return common_services.get(port, "Unknown")
def scan_common_ports(self):
"""扫描常见端口"""
common_ports = [21, 22, 23, 25, 53, 80, 110, 143, 443,
993, 995, 3306, 3389, 5432, 6379, 8080, 8443]
print(f"\n[*] 开始扫描 {self.target}...")
with ThreadPoolExecutor(max_workers=50) as executor:
executor.map(self.scan_port, common_ports)
return self.open_ports
def check_ssl_certificate(self):
"""检查SSL证书"""
if 443 in [port for port, _ in self.open_ports]:
try:
context = ssl.create_default_context()
with socket.create_connection((self.target, 443), timeout=self.timeout) as sock:
with context.wrap_socket(sock, server_hostname=self.target) as ssock:
cert = ssock.getpeercert()
print(f"\n[SSL] 证书信息:")
print(f" 主题: {cert.get('subject')}")
print(f" 颁发者: {cert.get('issuer')}")
print(f" 有效期: {cert.get('notBefore')} - {cert.get('notAfter')}")
# 检查证书有效性
try:
ssl.match_hostname(cert, self.target)
print("[+] SSL证书验证通过")
except ssl.CertificateError as e:
print(f"[-] SSL证书问题: {e}")
except Exception as e:
print(f"[-] SSL证书检查失败: {e}")
def check_vulnerabilities(self):
"""检查常见漏洞(简化版)"""
print("\n[*] 开始漏洞检查...")
# 检查常见安全配置
tests = [
("HTTP headers", self._check_http_headers),
("SSH version", self._check_ssh_version),
("Default credentials", self._check_default_creds)
]
for test_name, test_func in tests:
try:
test_func()
except Exception as e:
print(f"[-] {test_name}检查失败: {e}")
def _check_http_headers(self):
"""检查HTTP安全头"""
if 80 in [port for port, _ in self.open_ports]:
import http.client
conn = http.client.HTTPConnection(self.target, timeout=self.timeout)
conn.request("GET", "/")
response = conn.getresponse()
headers = dict(response.getheaders())
security_headers = {
"X-Frame-Options": "防止点击劫持",
"X-Content-Type-Options": "防止MIME类型嗅探",
"X-XSS-Protection": "XSS保护",
"Content-Security-Policy": "内容安全策略",
"Strict-Transport-Security": "HSTS"
}
print(f"\n[HTTP] 安全头检查:")
for header, description in security_headers.items():
if header in headers:
print(f" [+] {header}: {headers[header]}")
else:
print(f" [-] 缺少 {header} ({description})")
def _check_ssh_version(self):
"""检查SSH版本"""
if 22 in [port for port, _ in self.open_ports]:
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(self.timeout)
sock.connect((self.target, 22))
banner = sock.recv(1024).decode().strip()
print(f"\n[SSH] 版本信息: {banner}")
# 检查是否有已知漏洞
weak_versions = ["SSH-1.", "OpenSSH_2.", "OpenSSH_3.", "OpenSSH_4."]
for weak in weak_versions:
if weak in banner:
print(f" [-] 警告: 发现可能存在漏洞的SSH版本!")
sock.close()
except:
pass
def _check_default_creds(self):
"""检查常见默认凭据"""
print("\n[默认凭据] 检查常见默认配置...")
# 这里是一个示例,实际使用时需要谨慎
# 建议集成如Hydra等工具的检查
pass
def generate_report(self):
"""生成安全检查报告"""
print("\n" + "="*50)
print("网络安全检查报告")
print("="*50)
print(f"目标: {self.target}")
print(f"检查时间: {time.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"发现开放端口: {len(self.open_ports)}")
if self.open_ports:
print("\n开放端口列表:")
for port, service in self.open_ports:
print(f" - {port}/{service}")
print("\n" + "="*50)
def main():
if len(sys.argv) != 2:
print("用法: python3 scanner.py <目标IP或域名>")
sys.exit(1)
target = sys.argv[1]
scanner = SecurityScanner(target)
# 执行扫描
scanner.scan_common_ports()
scanner.check_ssl_certificate()
scanner.check_vulnerabilities()
scanner.generate_report()
if __name__ == "__main__":
main()
使用现成的安全工具
集成Nmap的脚本
#!/usr/bin/env python3
"""
使用Nmap进行安全检查
需要先安装: pip install python-nmap
"""
import nmap
import json
class NmapSecurityScanner:
def __init__(self, target):
self.target = target
self.nm = nmap.PortScanner()
def scan_network(self):
"""扫描网络"""
print(f"[*] 正在扫描 {self.target}...")
# 执行Nmap扫描
self.nm.scan(self.target, arguments='-sV -sC -O')
results = {}
for host in self.nm.all_hosts():
results[host] = {
'hostname': self.nm[host].hostname(),
'state': self.nm[host].state(),
'protocols': {}
}
for proto in self.nm[host].all_protocols():
ports = self.nm[host][proto].keys()
results[host]['protocols'][proto] = {}
for port in ports:
service_info = self.nm[host][proto][port]
results[host]['protocols'][proto][port] = {
'state': service_info['state'],
'name': service_info['name'],
'product': service_info.get('product', ''),
'version': service_info.get('version', '')
}
print(f" 端口 {port}/{proto}: {service_info['state']} - {service_info['name']} {service_info.get('version', '')}")
return results
def export_report(self, filename='scan_result.json'):
"""导出扫描报告"""
results = self.scan_network()
with open(filename, 'w') as f:
json.dump(results, f, indent=2)
print(f"\n[+] 报告已保存到 {filename}")
# 使用示例
if __name__ == "__main__":
scanner = NmapSecurityScanner("192.168.1.1")
scanner.export_report()
自动化安全检查脚本
#!/usr/bin/env python3
"""
自动化网络安全检查脚本
包含:扫描、分析、报告生成
"""
import subprocess
import json
import datetime
import os
from typing import Dict, List, Any
class AutomatedSecurityAudit:
def __init__(self, target: str, output_dir: str = "./security_reports"):
self.target = target
self.output_dir = output_dir
self.timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
# 创建输出目录
if not os.path.exists(output_dir):
os.makedirs(output_dir)
def run_command(self, command: str) -> str:
"""执行系统命令"""
try:
result = subprocess.run(command.split(), capture_output=True, text=True, timeout=300)
return result.stdout
except subprocess.TimeoutExpired:
return f"命令执行超时: {command}"
except Exception as e:
return f"执行错误: {e}"
def check_system_info(self) -> Dict[str, Any]:
"""检查系统信息"""
info = {}
# 检查系统信息
info['hostname'] = self.run_command("hostname").strip()
info['os_info'] = self.run_command("uname -a").strip()
info['cpu_info'] = self.run_command("cat /proc/cpuinfo | grep 'model name' | head -1").strip()
info['memory_info'] = self.run_command("free -h").strip()
info['disk_info'] = self.run_command("df -h").strip()
# 检查网络配置
info['ip_address'] = self.run_command("hostname -I").strip()
info['network_interfaces'] = self.run_command("ip addr show").strip()
info['routing_table'] = self.run_command("route -n").strip()
return info
def check_network_security(self) -> Dict[str, Any]:
"""检查网络安全配置"""
security_checks = {}
# 检查防火墙
security_checks['firewall'] = {
'ufw_status': self.run_command("sudo ufw status"),
'iptables_rules': self.run_command("sudo iptables -L -n"),
'ip6tables_rules': self.run_command("sudo ip6tables -L -n")
}
# 检查开放端口
security_checks['open_ports'] = self.run_command("netstat -tulpn")
# 检查网络服务
security_checks['running_services'] = self.run_command("systemctl list-units --type=service --state=running")
# 检查SSH配置
security_checks['ssh_config'] = {
'sshd_config': self.run_command("cat /etc/ssh/sshd_config"),
'ssh_host_keys': self.run_command("ls -la /etc/ssh/")
}
return security_checks
def check_user_security(self) -> Dict[str, Any]:
"""检查用户安全"""
user_checks = {}
# 检查用户账户
user_checks['users'] = self.run_command("cat /etc/passwd")
user_checks['sudo_users'] = self.run_command("getent group sudo")
user_checks['last_logins'] = self.run_command("last -10")
# 检查密码策略
user_checks['password_policy'] = self.run_command("cat /etc/login.defs | grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE'")
# 检查SSH密钥
user_checks['authorized_keys'] = {}
for user in os.listdir('/home/'):
key_path = f"/home/{user}/.ssh/authorized_keys"
if os.path.exists(key_path):
user_checks['authorized_keys'][user] = self.run_command(f"cat {key_path}")
return user_checks
def check_file_permissions(self) -> Dict[str, Any]:
"""检查文件权限"""
permission_checks = {}
# 检查敏感文件权限
sensitive_files = [
"/etc/shadow", "/etc/passwd", "/etc/sudoers",
"/etc/ssh/sshd_config", "/etc/crontab"
]
for file_path in sensitive_files:
if os.path.exists(file_path):
permission_checks[file_path] = self.run_command(f"ls -la {file_path}")
# 检查SUID文件
permission_checks['suid_files'] = self.run_command("find / -perm -4000 -type f 2>/dev/null")
# 检查SGID文件
permission_checks['sgid_files'] = self.run_command("find / -perm -2000 -type f 2>/dev/null")
return permission_checks
def check_security_updates(self) -> Dict[str, Any]:
"""检查安全更新"""
update_checks = {}
# 检查系统更新
update_checks['available_updates'] = self.run_command("apt list --upgradable 2>/dev/null | grep -i security")
# 检查已安装的安全更新
update_checks['installed_updates'] = self.run_command("apt list --installed 2>/dev/null | grep -i security")
# 检查自动更新配置
update_checks['auto_updates'] = self.run_command("cat /etc/apt/apt.conf.d/20auto-upgrades 2>/dev/null")
return update_checks
def generate_audit_report(self) -> str:
"""生成审计报告"""
report = f"""
========================================
网络安全审计报告
========================================
审计时间: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
目标系统: {self.target}
一、系统信息
{json.dumps(self.check_system_info(), indent=2)}
二、网络安全配置
{json.dumps(self.check_network_security(), indent=2)}
三、用户安全
{json.dumps(self.check_user_security(), indent=2)}
四、文件权限
{json.dumps(self.check_file_permissions(), indent=2)}
五、安全更新
{json.dumps(self.check_security_updates(), indent=2)}
六、安全建议
根据检查结果,建议:
1. 及时应用系统安全更新
2. 检查并关闭不必要的端口
3. 审查用户权限和SSH配置
4. 确保敏感文件权限正确
5. 配置防火墙规则
6. 启用日志审计
========================================
报告生成完毕
"""
# 保存报告
report_file = f"{self.output_dir}/security_audit_{self.timestamp}.txt"
with open(report_file, 'w') as f:
f.write(report)
return report_file
def run_full_audit(self):
"""运行完整审计"""
print("[*] 开始网络安全审计...")
print(f"[*] 目标: {self.target}")
print("[*] 正在收集系统信息...")
self.check_system_info()
print("[*] 正在检查网络安全配置...")
self.check_network_security()
print("[*] 正在检查用户安全...")
self.check_user_security()
print("[*] 正在检查文件权限...")
self.check_file_permissions()
print("[*] 正在检查安全更新...")
self.check_security_updates()
print("[*] 正在生成报告...")
report_path = self.generate_audit_report()
print(f"[+] 审计完成!报告已保存到: {report_path}")
if __name__ == "__main__":
# 使用示例
auditor = AutomatedSecurityAudit("localhost")
auditor.run_full_audit()
使用说明
安装依赖
# Python依赖 pip install python-nmap # 系统工具 sudo apt-get install nmap net-tools # 如果使用Linux,确保有权限执行 chmod +x security_scanner.py
运行脚本
# 运行基础扫描器 python3 security_scanner.py 192.168.1.1 # 运行完整审计脚本 python3 automated_audit.py # 使用Nmap扫描器 python3 nmap_scanner.py
注意事项
- 合法性:只扫描自己拥有的系统或获得授权的系统
- 权限:某些检查需要root权限
- 性能:大规模扫描可能影响网络性能
- 更新:定期更新漏洞库和检测规则
- 日志:记录所有扫描活动
这些脚本提供了基础的网络安全检查功能,可以根据实际需求进行扩展和定制。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播