用python 编写一个端口扫描器(类似nmap的简易版本)。给定目的ip地址,可以扫描目的IP地址在哪个端口上可以接受tcp连接和udp连接。
时间: 2024-02-11 14:07:53 浏览: 138
好的,以下是用Python编写的一个简易的端口扫描器(支持TCP和UDP):
```python
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(1) # 设置超时时间为1秒
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(1)
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' # 目标IP地址
start_port = 1 # 起始端口号
end_port = 65535 # 终止端口号
protocols = ['tcp', 'udp']
for protocol in protocols:
print(f"Scanning {protocol} ports...")
scan_ports(host, start_port, end_port, protocol)
```
在这个示例中,我们使用`socket`模块来创建TCP或UDP套接字并连接目标主机的指定端口,如果连接成功,则认为该端口是开放的。
注意,端口扫描器可能会被目标主机视为恶意行为,因此请确保您有合法的授权和允许,或者在合适的环境中使用。
阅读全文