背景
最近做攻防演练,需要检查我们自己的机器的访问控制做好没。主要是一些关键的服务端口,比如常见的ssh的22端口。在做好策略之后需要查漏补缺,看哪些策略没有做好,或者已经做了的策略有没有生效,需要做批量验证。
最开始的想法是使用ansible去做这个事情,但是想到直接写python脚本也可以满足需求,而且可能还更简单(省去了安装ansible、编写剧本的过程)。
编码
话不多说,上AI,我把需求告诉了智谱清言。以下是我的提示词:
请你帮我用python3写一个python脚本,作用是使用telnet探测指定ip的端口联通性。ip和端口读取excel中的文件数据。
GLM-4大模型立马给我了回复,亲测可用。下面是代码:
import telnetlib
from openpyxl import load_workbook
# 读取Excel文件
wb = load_workbook('ports.xlsx') # Excel文件名
sheet = wb.active
# 循环遍历Excel中的每一行
for row in sheet.iter_rows(min_row=2, values_only=True): # 假设第一行是标题行
ip, port = row # 假设第一列是IP,第二列是端口
try:
# 尝试连接到指定的IP和端口
with telnetlib.Telnet(ip, port, timeout=5) as tn:
print(f"连接到 {ip}:{port} 成功")
except Exception as e:
print(f"连接到 {ip}:{port} 失败: {e}")
# 关闭Excel文件
wb.close()
这里注意我的python版本是3.6.8,如果你本地没有openpyxl包还需要下载:
pip install openpyxl
测试
按照GLM-4大模型给的回复你需要把探测的IP和端口放在脚本同级目录下一个名为:ports.xlsx的excel文件中。其中excel格式:第一列为ip,第二列为端口号。运行脚本输出效果如下:
连接到 192.168.16.21:22 失败: timed out
连接到 192.168.16.22:22 失败: timed out
连接到 192.168.16.23:22 失败: timed out
连接到 192.168.16.24:22 失败: timed out
连接到 192.168.16.25:22 失败: timed out
连接到 192.168.16.26:22 失败: [Errno 111] Connection refused
连接到 192.168.16.27:22 成功
连接到 192.168.16.28:22 失败: timed out
连接到 192.168.16.29:22 成功
连接到 192.168.16.30 失败: timed out
......
从结果很容易可以看到,192.168.16.27和192.168.16.29的22端口还是可以连通的,这时候就需要单独检查下这两台ssh的访问控制策略做好没了。