实现简单的网络安全工具,如端口扫描和漏洞检测,是学习网络安全的一个不错的起点。以下是如何使用 Python 创建基本的端口扫描器和漏洞检测工具的示例。
端口扫描器是用于检查目标计算机上的开放端口的工具。以下是使用 Python 和 socket
模块实现的一个简单端口扫描器:
import socket
from concurrent.futures import ThreadPoolExecutor
def scan_port(ip, port):
"""扫描指定 IP 的指定端口"""
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((ip, port))
if result == 0:
print(f"Port {port} is open on {ip}")
sock.close()
except Exception as e:
print(f"Error scanning port {port} on {ip}: {e}")
def main():
target_ip = input("Enter the IP address to scan: ")
ports_to_scan = range(1, 1025) # 扫描 1 到 1024 端口
with ThreadPoolExecutor(max_workers=100) as executor:
for port in ports_to_scan:
executor.submit(scan_port, target_ip, port)
if __name__ == "__main__":
main()
scan_port
函数:负责扫描特定 IP 和端口。使用 socket.connect_ex()
方法来尝试连接指定的端口。如果返回值是 0
,表示端口是开放的。ThreadPoolExecutor
):用来并发扫描多个端口,从而加快扫描速度。main
函数:获取用户输入的目标 IP 地址,并开始扫描指定范围内的端口。漏洞检测工具可以使用 Python 结合现有的漏洞库进行简单的漏洞检测。以下示例展示了如何使用 requests
库进行一个基本的 Web 服务漏洞检测:
import requests
def check_vulnerability(url):
"""检查 URL 是否存在简单的 SQL 注入漏洞"""
payload = "' OR '1'='1"
try:
response = requests.get(f"{url}?id={payload}", timeout=5)
if "error" in response.text.lower() or "sql" in response.text.lower():
print(f"可能存在 SQL 注入漏洞:{url}")
else:
print(f"没有检测到 SQL 注入漏洞:{url}")
except requests.RequestException as e:
print(f"请求错误:{e}")
def main():
target_url = input("请输入要检测的 URL(例如:http://example.com/page.php):")
check_vulnerability(target_url)
if __name__ == "__main__":
main()
check_vulnerability
函数:向目标 URL 发送一个可能的 SQL 注入负载并检查响应内容。如果响应中包含 "error" 或 "sql"(不区分大小写),则可能存在漏洞。requests
库:用于发送 HTTP 请求并处理响应。