给下列代码的每一行加上注释:import socket def scan_ports(host, start_port, end_port, protocol='tcp'): for port in range(start_port, end_port + 1): try: if protocol == 'tcp': sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(0.01) result = sock.connect_ex((host, port)) if result == 0: print(f"Port {port} is open") sock.close() elif protocol == 'udp': sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(0.01) sock.sendto(b'Ping', (host, port)) data, addr = sock.recvfrom(1024) if data: print(f"Port {port} is open") sock.close() else: print(f"Unsupported protocol {protocol}") return except socket.error: pass if name == 'main': host = '127.0.0.1' start_port = 1 end_port = 1024 protocols = ['tcp', 'udp'] for protocol in protocols: print(f"Scanning {protocol} ports...") scan_ports(host, start_port, end_port, protocol)
时间: 2024-02-11 18:08:23 浏览: 95
```
# 导入 socket 模块
import socket
# 定义一个函数用于扫描指定 IP 的端口
def scan_ports(host, start_port, end_port, protocol='tcp'):
# 循环遍历指定范围内的端口
for port in range(start_port, end_port + 1):
try:
# 如果协议为 tcp,创建 tcp 连接
if protocol == 'tcp':
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(0.01)
result = sock.connect_ex((host, port)) # 尝试连接端口
if result == 0: # 如果连接成功
print(f"Port {port} is open") # 输出端口号
sock.close() # 关闭连接
# 如果协议为 udp,创建 udp 连接
elif protocol == 'udp':
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(0.01)
sock.sendto(b'Ping', (host, port)) # 发送 Ping 数据包
data, addr = sock.recvfrom(1024) # 接收数据包
if data: # 如果接收到数据
print(f"Port {port} is open") # 输出端口号
sock.close() # 关闭连接
else:
print(f"Unsupported protocol {protocol}") # 协议不支持
return
except socket.error:
pass
# 如果当前脚本为主程序
if name == 'main':
host = '127.0.0.1' # 定义扫描的 IP 地址
start_port = 1 # 定义起始端口号
end_port = 1024 # 定义结束端口号
protocols = ['tcp', 'udp'] # 定义扫描的协议类型
for protocol in protocols:
print(f"Scanning {protocol} ports...") # 输出正在扫描的协议类型
scan_ports(host, start_port, end_port, protocol) # 调用扫描函数进行扫描
```
阅读全文