Python使用Telnet库实现弱密码检测的方法详解
本文详解利用Python的telnetlib库进行弱密码登录检测的实现过程。重点解析read_until函数的timeout设置必要性,以及针对不同服务器(如网络设备)返回提示差异(login/user、大小写敏感)的处理策略。通过调整读取次数和正则匹配逻辑,提高脚本在AIX、Linux等不同环境下的兼容性与准确性。
系统运行环境配置如下:
操作系统为64位Windows 7企业版。
Python解释器版本为2.7.10。
2016.08.16修改内容:
1)read_until()函数支持设置timeout参数。此前无法获取password之后的返回信息,原因是调用read_some()函数的次数不足,未能充分读取到服务器返回的数据。
2)若未给read_until()函数设置timeout值,程序将无限期保持连接状态而不会自动关闭,导致脚本永远无法返回结果。因此,合理设置timeout参数是必要的。
3)不同服务器返回的内容存在差异。例如,网络设备radware返回的提示并非"login:",而是"user:";部分服务器的password提示中p为大写,因此匹配"assword:"更为稳妥。此外,不同服务器在用户密码错误时的提示信息也各不相同,建议在编写代码前,先在Python控制台中测试具体返回内容。
def check_23_port(ip,username,passwd):
try:
tn=telnetlib.Telnet()#
#tn.set_debuglevel(0),设置为2可以看到更多信息
tn.open(host=ip)
tn.read_until('login:')#这里设置timeout=10比较好,否则如果不能匹配字符串,这个连接将一直建立,程序不会返回
tn.write(username+'\r\n')
tn.read_until('password:')
tn.write(passwd+'\r\n')
tn.read_some()#为result准备数据,可能需要多调用几次才能够获取到服务器返回的信息"Login Failed"
result = tn.read_some()#这里调用两次,不同的操作系统返回的不一样,AIX linux返回的是invalid
rex = r'Login Failed'
tmp = re.search(rex,result)
if tmp == None:
return True
else:
return False
tn.write("exit\r\n")
tn.close()
except Exception as e:
pass
print "connect error:" + str(e)
以上关于使用Python通过telnet实现弱密码登录检测的方法详解即为全部内容,希望能对读者有所帮助。也欢迎大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













