Làm thế nào để tạo một script Python để quét mạng
Để tạo một script Python quét mạng, bạn có thể sử dụng hai phương pháp chính: sử dụng thư viện socket trực tiếp hoặc tận dụng công cụ nmap qua thư viện python-nmap. Dưới đây là hướng dẫn chi tiết cho cả hai cách:
1. Sử dụng thư viện socket (cơ bản)
Cài đặt thư viện
Script quét cổng đơn giản
import socket
import sys
from concurrent.futures import ThreadPoolExecutor
def check_port(host, port):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(1)
result = s.connect_ex((host, port))
if result == 0:
print(f"Port {port} is open")
except Exception as e:
pass
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python scanner.py
sys.exit(1)
host = sys.argv[^1]
ports = range(1, 1025) # Quét cổng từ 1 đến 1024
# Sử dụng đa luồng để tăng tốc
with ThreadPoolExecutor(max_workers=100) as executor:
for port in ports:
executor.submit(check_port, host, port)
Giải thích:
2. Sử dụng thư viện python-nmap (nâng cao)
Cài đặt thư viện
pip install python-nmap
Script quét mạng với nmap
import nmap
def network_scan(host, ports='1-1000'):
scanner = nmap.PortScanner()
scanner.scan(hosts=host, ports=ports, arguments='-T4') # T4: Tốc độ cao
for host in scanner.all_hosts():
print(f"Host: {host} ({scanner[host].hostname()})")
print(f"Status: {scanner[host].state()}")
for proto in scanner[host].all_protocols():
print(f"Protocol: {proto}")
ports = scanner[host][proto].keys()
for port in ports:
print(f" Port {port}: {scanner[host][proto][port]['state']}")
if __name__ == "__main__":
network_scan('192.168.1.0/24') # Quét cả mạng 192.168.1.1-254
Giải thích:
So sánh hai phương pháp
Tiêu chí |
Socket |
python-nmap |
Tốc độ |
Chậm hơn, phụ thuộc vào số luồng |
Nhanh nhờ tối ưu hóa từ nmap |
Độ chính xác |
Cơ bản, dễ bỏ sót cổng |
Cao, hỗ trợ nhiều kỹ thuật quét nmap |
Phức tạp |
Dễ triển khai |
Cần hiểu cú pháp nmap |
Ứng dụng |
Quét đơn giản, ít cổng |
Quét mạng phức tạp, phân tích sâu |
Lưu ý quan trọng
» Tin mới nhất:
» Các tin khác: