在实际用的时候,感觉体验不怎么样,后来仔细想了一下, 觉得少了点什么东西,于是就加上了一个检测爆破是否成功的功能,这样就更直观的发现问题了
我还把失败的记录改成了,如果超过10条,那么不显示了,太多了,没必要,详细的保存在单独的txt里了
同时,使用了PrettyTable
进行输出,更美观点
主要加了以下代码
def intrusion_detection(wfile,success_ip,failed_ip,fdst):
check_result=set(success_ip).intersection(set(failed_ip)) # 查看成功的IP和失败的IP中是否有交集,检查是否爆破成功
if check_result:
print("\n[+]入侵检测:")
wfile.write("\n[+]入侵检测: \n")
prcheck=PrettyTable(field_names=["登录IP","结果","原因"])
for i in check_result:
if int(fdst[i])>5:
prcheck.add_row([i,"成功","该IP进行密码爆破,猜解到成功的密码后,登录了系统..."])
wfile.write(" 检测到IP:"+str(i)+" 爆破成功\n")
else:
wfile.write(" 检测到IP:"+str(i)+" 可疑,请核实\n")
prcheck.add_row([i,"可疑","该IP已登录过系统,但是因为次数过少不像是暴力破解,请核实..."])
print(prcheck)
else:
print("\n[-]未发现有可疑|成功事件\n")
我用set
的方式来看两组数据中是否存在交集
set(success_ip).intersection(set(failed_ip))
后来测试的时候,又发现了一个新的问题,因为有的时候只是手抖敲错了密码,并非是爆破导致的连接失败的操作被记录在日志里
所以稍微改了一下形式,并且输出了原因
if int(fdst[i])>5:
prcheck.add_row([i,"成功","该IP进行密码爆破,猜解到成功的密码后,登录了系统..."])
wfile.write(" 检测到IP:"+str(i)+" 爆破成功\n")
else:
wfile.write(" 检测到IP:"+str(i)+" 可疑,请核实\n")
prcheck.add_row([i,"可疑","该IP已登录过系统,但是因为次数过少不像是暴力破解,请核实..."])
效果图:
github链接
https://github.com/Ernket/SSH-log-audit
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有