实现端口扫描器的全过程如下所述:
1. 确定端口范围
首先需要明确扫描的端口范围,一般情况下常用的端口范围是1-65535端口。也可以根据自己的需求和情况进行端口范围的限制。
2. 导入必要的模块
在Python中,用于网络服务的套接字存在于 socket 模块中。因此需要导入 socket 模块。
import socket
3. 创建socket对象
使用socket模块创建socket对象。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- AF_INET:表示使用IPv4协议。
- SOCK_STREAM:表示使用TCP协议。
4. 扫描端口
遍历端口列表,通过socket的connect()方法去连接端口,若连接成功则表示该端口打开。
for port in range(start_port, end_port+1):
try:
s.connect((host_ip, port))
print(f'{port} 端口开放')
except:
print(f'{port} 端口关闭')
s.close()
示例一
import socket
def scanner(host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((host, port))
print(f'{port} 端口开放')
except:
print(f'{port} 端口关闭')
s.close()
if __name__ == '__main__':
host = '192.168.1.1'
for port in range(80, 86):
scanner(host, port)
在这个示例中,我们使用了函数 def scanner() 来把端口扫描器的核心部分封装到一个函数中。通过循环调用scanner() 函数来遍历端口号进行扫描。
示例二
import socket
def scanner(host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
try:
s.connect((host, port))
print(f'{port} 端口开放')
except socket.error as e:
print(f'{port} 端口关闭,错误信息:{e}')
s.close()
if __name__ == '__main__':
host = '192.168.1.1'
for port in range(1, 1024):
scanner(host, port)
这个示例中,我们使用了 s.settimeout(1) 来设置扫描每个端口的最大时长是1秒。如果在1秒内没有建立起连接,则返回错误信息。此外,端口范围被设置为较广泛的1-1024范围。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python实现端口扫描器的全过程 - Python技术站