编写一个端口扫描器(类似 nmap 的简易版本)。给定目的 ip 地址,可以扫 描目的 IP 地址在哪个端口上可以接受 tcp 连接和 udp 连接。
时间: 2023-11-27 08:53:56 浏览: 124
python nmap实现端口扫描器教程
好的,我可以为您提供一个 Python 编写的简易版本端口扫描器。请先确保您已经安装了 Python 3。
```
import argparse
import socket
def tcp_scan(ip, port):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
s.connect((ip, port))
print(f"TCP Port {port} is open")
except:
print(f"TCP Port {port} is closed")
def udp_scan(ip, port):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(1)
s.sendto(b'', (ip, port))
data, addr = s.recvfrom(1024)
print(f"UDP Port {port} is open")
except:
print(f"UDP Port {port} is closed")
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='A simple port scanner.')
parser.add_argument('ip', type=str, help='The IP address to scan.')
parser.add_argument('--tcp', '-t', action='store_true', help='Scan TCP ports.')
parser.add_argument('--udp', '-u', action='store_true', help='Scan UDP ports.')
args = parser.parse_args()
if args.tcp:
for i in range(1, 65536):
tcp_scan(args.ip, i)
elif args.udp:
for i in range(1, 65536):
udp_scan(args.ip, i)
else:
print("Please specify either --tcp or --udp.")
```
这个端口扫描器可以通过命令行参数指定要扫描的 IP 地址和协议类型(TCP 或 UDP)。例如,要扫描 IP 地址为 192.168.1.100 的主机的 TCP 端口,可以运行以下命令:
```
python port_scanner.py 192.168.1.100 --tcp
```
要扫描 UDP 端口,则可以使用以下命令:
```
python port_scanner.py 192.168.1.100 --udp
```
请注意,该程序扫描了 1 到 65535 号端口。如果您只想扫描特定的端口,请修改程序以满足您的需求。此外,为了避免被目标主机检测到,我们在程序中设置了 1 秒钟的超时时间。
阅读全文