Python扫描端口的实现

Python扫描端口的实现

Python作为一种强大的脚本语言,可以用于各种网络编程任务,其中之一就是扫描端口。在网络安全测试、服务器监控和漏洞检测等方面,扫描端口是非常重要的工作。下面将介绍如何使用Python来实现端口扫描。

1. 导入必要的模块

在Python中,我们可以使用socket库来进行网络编程,所以我们首先需要导入这个模块。另外,我们还需要导入sys模块来获取命令行参数。

import socket

import sys

2. 定义扫描函数

接下来,我们定义一个函数来实现端口扫描。函数的输入参数为目标主机和要扫描的端口范围。

def scan_ports(host, start_port, end_port):

# 遍历端口范围

for port in range(start_port, end_port+1):

try:

# 创建socket对象

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 设置超时时间为2秒

s.settimeout(2)

# 尝试连接端口

result = s.connect_ex((host, port))

# 判断端口是否开放

if result == 0:

print("端口 {} 开放".format(port))

else:

print("端口 {} 关闭".format(port))

# 关闭socket连接

s.close()

except KeyboardInterrupt:

# 用户按下Ctrl+C中断扫描

print('\n扫描中断.')

sys.exit()

except socket.gaierror:

# 主机名无法解析

print("无法解析主机名.")

sys.exit()

except socket.error:

# 无法连接到主机

print("无法连接到主机.")

sys.exit()

在这个函数中,我们使用了socket的connect_ex()方法来尝试连接每一个端口。如果返回值为0,表示端口是开放的;如果返回值不为0,表示端口是关闭的。并且我们设置了一个2秒的超时时间,以免程序长时间等待。

3. 获取用户输入

接下来,我们需要获取用户输入,包括目标主机和要扫描的端口范围。我们可以使用sys模块来获取命令行参数。

# 获取命令行参数

if len(sys.argv) == 4:

host = sys.argv[1]

start_port = int(sys.argv[2])

end_port = int(sys.argv[3])

else:

print("用法: python scan_ports.py <目标主机> <起始端口> <结束端口>")

sys.exit()

用户需要在命令行中输入目标主机、起始端口和结束端口,并且以空格分隔。

4. 扫描端口

最后,我们调用之前定义的扫描函数来扫描指定范围内的端口。

# 调用扫描函数

scan_ports(host, start_port, end_port)

5. 运行脚本

现在,我们可以通过命令行来运行这个脚本,并指定目标主机和端口范围。

$ python scan_ports.py 127.0.0.1 1 100

这将扫描主机127.0.0.1上的1100端口,并输出每个端口的开放或关闭状态。

总结一下,我们通过使用Python的socket模块和sys模块,编写了一个简单的端口扫描脚本。这个脚本可以帮助我们快速检测目标主机上的端口开放情况,对于网络安全测试和服务器监控非常有用。

注意:在进行端口扫描时,请确保您有合法的授权,并遵守相关的法律和规定。

后端开发标签