published on in Python

网络篇・端口扫描

返回教程主页

上篇 网络篇・UDP通信

维基百科: 端口扫描工具(Port Scanner)指用于探测服务器或主机开放端口情况的工具。常被计算机管理员用于确认安全策略,同时被攻击者用于识别目标主机上的可运作的网络服务。端口扫描定义是客户端向一定范围的服务器端口发送对应请求,以此确认可使用的端口。虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段。端口扫描的主要用途仍然只是确认远程机器某个服务的可用性。

TCP连接测试

在实现TCP通讯的时候,我们知道可以在客户端socket中输入主机名和端口号码来连接服务器。同样的,我们也可以使用这种方法来尝试连接一定范围的服务器端口:

from socket import socket, AF_INET, SOCK_STREAM

ports = range(10, 10000)
for port in ports:
    s = socket(AF_INET, SOCK_STREAM)
    s.settimeout(10)
    if not s.connect_ex(('localhost', port)):
        print(f'Opened Port: {port}')

我们扫描10到10000「不包含10000」的端口,使用s.connect_ex进行连接,如果连接成功则返回0。通过if not进行判别并输出主机localhost开放的端口,其中主机名称localhost可以替换成其他主机的名称或者IP地址。

下篇 网络篇・并发端口扫描