下面是基于Python编写一个简单的端口扫描器的攻略:
1. 确定需要扫描的IP地址和端口范围
首先,需要确定需要扫描的IP地址和端口范围。IP地址可以是单个目标IP,也可以是一段IP地址范围。端口范围可以是单个端口,也可以是一段端口范围。这个过程可以手动输入,也可以从命令行参数读取。例如:
python scan.py -t 192.168.1.1-192.168.1.255 -p 22,80,443-445
2. 编写端口扫描函数
然后,需要编写一个函数,用于扫描指定IP地址上的指定端口,判断端口是否开放。这个函数可以使用socket库来实现,具体代码如下:
import socket
def scan_port(ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((ip, port))
sock.close()
if result == 0:
return True
else:
return False
3. 循环扫描端口
接下来,需要循环扫描指定IP地址上的指定端口范围。这个过程可以使用两重循环来实现。例如:
import argparse
def main(target, port_range):
for ip in ip_range(target):
for port in port_range:
if scan_port(ip, port):
print('Port {} is open on {}'.format(port, ip))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='A simple port scanner written in Python')
parser.add_argument('-t', '--target', type=str, help='The target IP address range')
parser.add_argument('-p', '--port', type=str, help='The port range')
args = parser.parse_args()
target = args.target
port = args.port
port_range = parse_port_range(port)
main(target, port_range)
其中,ip_range和parse_port_range是两个辅助函数,用于生成IP地址范围和端口范围。这些函数的具体实现可以参考下面的示例代码。
示例代码
完整的端口扫描器的示例代码如下:
import socket
import argparse
import ipaddress
def scan_port(ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((ip, port))
sock.close()
if result == 0:
return True
else:
return False
def ip_range(target):
if '-' in target:
start, end = target.split('-')
return [str(ip) for ip in ipaddress.IPv4Range(start, end)]
else:
return [target]
def parse_port_range(port):
port_range = []
for p in port.split(','):
if '-' in p:
start, end = p.split('-')
port_range.extend(range(int(start), int(end) + 1))
else:
port_range.append(int(p))
return port_range
def main(target, port_range):
for ip in ip_range(target):
for port in port_range:
if scan_port(ip, port):
print('Port {} is open on {}'.format(port, ip))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='A simple port scanner written in Python')
parser.add_argument('-t', '--target', type=str, help='The target IP address range')
parser.add_argument('-p', '--port', type=str, help='The port range')
args = parser.parse_args()
target = args.target
port = args.port
port_range = parse_port_range(port)
main(target, port_range)
假设需要扫描IP地址范围为192.168.1.1-192.168.1.5的端口21和22,可以执行以下命令:
python scan.py -t 192.168.1.1-192.168.1.5 -p 21,22
输出结果如下:
Port 22 is open on 192.168.1.1
Port 22 is open on 192.168.1.2
Port 22 is open on 192.168.1.3
Port 22 is open on 192.168.1.4
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Python编写一个简单的端口扫描器 - Python技术站