Python作为一门简洁高效的编程语言,拥有广泛的应用场景,其中之一就是端口扫描。端口扫描是安全审计中常用的技术之一,是对主机进行安全检查的重要手段。本篇文章将会讲解如何使用Python来实现一个多线程的端口扫描工具。
扫描器需要完成的任务是:在指定的IP地址和端口范围内扫描开放的服务,并给出相应的响应信息。扫描器需要实现以下功能:
socket
发送请求并接受响应信息以下为Python实现的多线程端口扫描的代码实现:
import threading
import socket
def scan_port(ip, port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(0.5)
result = sock.connect_ex((ip, port))
if result == 0:
print(f"[+] {ip} port {port} is open.")
sock.close()
except Exception as e:
print(f"[-] Error occurred while scanning {ip} port {port}: {e}")
def scan(ip, ports):
print(f"[*] Scanning {ip}...")
for port in ports:
t = threading.Thread(target=scan_port, args=(ip, port))
t.start()
if __name__ == '__main__':
ip = '127.0.0.1'
ports = range(1, 1025)
scan(ip, ports)
上述代码实现中,首先通过socket
创建一个TCP连接,设置timeout
为0.5秒,然后尝试连接指定IP和端口。如果返回值为0,则说明端口是开放的,否则端口是关闭的。将开放端口的信息输出到屏幕上。我们可以看到通过多线程的方式来扫描端口非常高效。
我们将扫描本机IP地址为127.0.0.1
的所有端口,运行以下命令:
python scanner.py
可以看到输出结果中开放的端口信息:
[*] Scanning 127.0.0.1...
[+] 127.0.0.1 port 22 is open.
[+] 127.0.0.1 port 80 is open.
...
我们将扫描远程主机IP地址为192.168.0.1
的80、443端口,运行以下命令:
python scanner.py 192.168.0.1 80,443
可以看到输出结果中开放的端口信息:
[*] Scanning 192.168.0.1...
[+] 192.168.0.1 port 80 is open.
[+] 192.168.0.1 port 443 is open.
通过这两个示例,我们可以看到,使用Python实现多线程端口扫描是一件非常简单高效的事情。