python登录系统输错提示还有几次机会_用python写的模拟系统登录三次验证简单程序...

由于工作需要,最近在学习python,看了网上的python视频教程,有个用python写的模拟系统登录三次验证的需求。因本人原来就是开发出身,让我燃起了写程序的欲望。

通过这个简单的程序,我不仅新认识了一种编程语言,还让自己学了不少知识,比如:python在列表与字符串互转的过程中,需要注意英文中括号、英文逗号的问题;还有比较诡异的是,在向数组中append英文逗号时,英文逗号后边竟然给附加了一个空格;还锻炼了自己的逻辑思维,最重要的是自己很享受程序的调试的过程,尽管程序不重要,但是,看着程序慢慢变长,功能逐渐达到自己的预期,很开心。

附上程序:

配置文件infomation.py:

[account]

username = ['oracle', 'sybase', 'db2', 'mysql', 'dsfasdf', 'e']

[password]

password = ['redhat5', 'hellow', 'haha', 'heihei', 'adsf', 'f']

[islocked]

islocked = ['0', '0', '1', '1', '1', '1']

[islegal]

islegal = ['1', '1', '1', '0', '0', '0']

主程序文件user login.py:

# -*- coding: utf-8 -*-:

import ConfigParser

import sys

#定义全局变量

i = int(0)

username = ''

password = ''

value = []

value1 = []

value3 = []

value4 = []

isLegal = []

islegal_flag = 0

isLocked = []

islocked_flag = 0

#定义读取配置文件

conf = ConfigParser.ConfigParser()

myfile = 'C:/Users/localadmin/Desktop/pythonl/infomation.py'

conf.read(myfile)

"""

程序主体:while -- else循环

功能:实现模拟系统登录三次验证,初始状态时,系统对合法用户登录三次以内输入验证信息正确可正常登录,

如果合法用户登录超过三次,合法用户将被锁定,以后无法登录,需要管理员修改配置信息方可后续登录操作,

非法用户尝试登录穷举超过三次,系统将记录非法用户信息,下次非法用户被尝试穷举时将直接拒绝登录。

"""

while i<3:

#定义登录成功与否标识

flag = 1

i = i+1

#接受用户名和密码的输入

username = raw_input('username:')

password = raw_input('password:')

#定义配置文件的节点名为account,获取配置文件中的账号信息,进行后续的匹配

node = 'account'

#获取指定节点下的指定key值

key = conf.options(node)[0]

#将指定key值对应的信息按照'号拆分成字符列表,拆分后列表从下标0开始的奇数个元素为有效值

value = conf.get(node,key).split("'")

#定义账号列表编译变量

arr_ind = int(0)

#取账号列表下标0开始的奇数个元素

for arr_ind in range(1,len(value),2):

#对账号列表下标0开始的奇数个元素与用户输入信息进行比对

if value[arr_ind] == username:

node1 = 'password'

key1 = conf.options(node1)[0]

#当用户账号在配置信息中存在时,取用户密码并拆分成列表,密码列表与账号列表相同,相同下标隶属于同一用户

value1 = conf.get(node1,key1).split("'")

node3 = 'islocked'

key3 = conf.options(node3)[0]

# 当用户账号在配置信息中存在时,取用户锁定标识并拆分成列表,锁定标识列表与账号列表相同,相同下标隶属于同一用户

value3 = conf.get(node3,key3).split("'")

#定位登录用户的锁定列表到指定下标,与账号列表下标相同

islocked_flag = int(value3[arr_ind])

node4 = 'islegal'

key4 = conf.options(node4)[0]

# 当用户账号在配置信息中存在时,取用户合法标识并拆分成列表,合法标识列表与账号列表相同,相同下标隶属于同一用户

value4 = conf.get(node4,key4).split("'")

# 定位登录用户的合法列表到指定下标,与账号列表下标相同

islegal_flag = int(value4[arr_ind])

#登录用户账号存在情况下的锁定状态判断,锁定则直接退出系统,并告知用户被锁定,处理方法是联系管理员,未锁定且密码正确,则成功登录

if islocked_flag == 1:

print 'Sorry, your account',username,' is locked ,connect system administrator please!'

#登录用户账号存在情况下的合法性判断,如果是曾经被用作穷举攻击的账号,直接退出系统并发出警报

if islegal_flag == 0:

print 'Alarm:Check for illegal attacked!!!!'

sys.exit()

else:

if username == value[arr_ind] and password == value1[arr_ind]:

print 'Login success,welcome ', username, '!'

#修改登录标识并退出for循环体

flag = 0

break

else:

print 'username or password input is error! try again please!'

#判断登录标识并退出while循环体

if flag != 1:

break

else:

# 用户尝试登录超过三次,进行账号锁定或对穷举攻击信息记录

print 'sorry! login attempts excessive three times, account ',username,' is locked!'

#定义配置文件的节点与键值信息

node = 'account'

key = 'username'

node1 = 'password'

key1 = 'password'

node3 = 'islocked'

key3 = 'islocked'

node4 = 'islegal'

key4 = 'islegal'

#获取账号、密码、锁定状态、合法状态并拆分成列表

value = conf.get(node, key).split("'")

value1 = conf.get(node1, key1).split("'")

value3 = conf.get(node3, key3).split("'")

value4 = conf.get(node4, key4).split("'")

#去除账号、密码、锁定状态、合法状态列表中多余的左右英文中括号

value.remove('[')

value.remove(']')

value1.remove('[')

value1.remove(']')

value3.remove('[')

value3.remove(']')

value4.remove('[')

value4.remove(']')

#计算账号、密码、锁定状态、合法状态列表中的英文逗号个数

del_times = int(len(value)-1)/2

#删除账号、密码、锁定状态、合法状态列表中的英文逗号

for k in range(0,del_times,1):

print '删除逗号for循环执行第',k,'次!'

value.remove(', ')

value1.remove(', ')

value3.remove(', ')

value4.remove(', ')

#锁定或记录穷举攻击登录信息,锁定则修改登录用户的锁定状态为真,穷举攻击则记录登录信息

value.append(username)

print 'value after modified :',value

islocked_flag = str(1)

islegal_flag = str(0)

conf.set(node,key,value)

value1.append(password)

conf.set(node1,key1,value1)

value3.append(islocked_flag)

conf.set(node3,key3,value3)

value4.append(islegal_flag)

conf.set(node4, key4, value4)

#打开要回写的配置文件

fn=open(myfile,'w')

#回写配置文件

conf.write(fn)

#关闭文件

fn.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值