(+84) 236.3827111 ex. 402

Làm thế nào để tạo một script Python để quét mạng


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

  • Không cần cài đặt thêm, vì socket là thư viện tích hợp sẵn trong Python.

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:

  • Hàm check_port kiểm tra kết nối TCP đến một cổng cụ thể.
  • Sử dụng ThreadPoolExecutor để quét nhiều cổng cùng lúc, giảm thời gian chờ.
  • Kết quả trả về cổng mở nếu connect_ex trả về 0.

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:

  • Sử dụng nmap.PortScanner() để gọi nmap qua Python.
  • Tham số arguments='-T4' tối ưu tốc độ quét.
  • Kết quả trả về chi tiết trạng thái cổng (open/closed/filtered).

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

  • **Chỉ quét hệ thống