Python编写的Masscan扫描器优化指南
- 使用多个线程扫描
使用多个线程可以提高扫描速度,可以使用Python的multiprocessing库或者threading库实现多线程扫描。
示例代码:
import threading class PortScanner(): def __init__(self): self.threads = [] def start_threads(self, ip, ports): for port in ports: t = threading.Thread(target=self.scan, args=(ip, port)) self.threads.append(t) t.start() for t in self.threads: t.join() def scan(self, ip, port): # 扫描ip的port端口 pass
- 设置超时时间
设置超时时间可以避免程序长时间等待,提高扫描速度。
示例代码:
import socket def scan(ip, port): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(2) s.connect((ip, port)) s.send(b"GET / HTTP/1.1\r\nHost: pidancode.com\r\n\r\n") banner = s.recv(1024) print(ip, port, "open", banner) except: pass finally: s.close()
- 使用协程
使用协程可以避免创建多个线程的开销,提高扫描速度。
示例代码:
import gevent.socket import gevent.monkey gevent.monkey.patch_socket() def scan(ip, port): s = gevent.socket.socket() s.settimeout(2) try: s.connect((ip, port)) s.send(b"GET / HTTP/1.1\r\nHost: pidancode.com\r\n\r\n") banner = s.recv(1024) print(ip, port, "open", banner) except: pass finally: s.close()
- 批量扫描IP与端口
批量扫描IP与端口可以提高扫描效率。
示例代码:
def batch_scan(ips, ports): for ip in ips: for port in ports: scan(ip, port)
- 使用IP地址范围扫描
使用IP地址范围可以快速扫描大量IP地址。
示例代码:
import ipaddress def scan_network(network): for ip in ipaddress.IPv4Network(network): scan(str(ip), 80)
- 使用异步IO
使用异步IO可以避免程序在等待网络I/O时阻塞,提高扫描速度。
示例代码:
import asyncio async def scan(ip, port): conn = asyncio.open_connection(ip, port) try: reader, writer = await asyncio.wait_for(conn, timeout=2) writer.write(b"GET / HTTP/1.1\r\nHost: pidancode.com\r\n\r\n") banner = await asyncio.wait_for(reader.read(1024), timeout=2) print(ip, port, "open", banner) except: pass finally: writer.close() await writer.wait_closed()
相关文章