抽到357了,7到现在连题都看不懂…
跟着大佬的思路写了一下代码…
能力有限只能写成这亚子,差不多能运行。
需要借鉴的同学记得稍微修改下代码
。。。第三题message单词写错了。。。
第三题
题目三:认证审计系统
1、设计一个信息系统,系统必须通过客户端录入账号口令远程登录;
2、系统内至少包含三个以上账号;
3、某账号登录后服务器端可实时显示该账号登录的时间及IP信息;
4、服务器端可查询账号的历史登录信息。
# python -u "d:\课程设计A\py3\client3.py"
import socket # 导入 socket 模块
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口号
c.connect((host, port))
bufSize = 1024 # 缓存区字节大小
while True:
userName = input("Input username:")
c.send(userName.encode())
userpass = input("Input userpass:")
c.send(userpass.encode())
re = c.recv(bufSize).decode()
if re != "Connection successful":
print(re)
c.close()
else:
print("Connection successful")
c.close()
c.close() # 关闭连接
# python -u "d:\课程设计A\py3\server3.py"
import socket # 导入 socket 模块
import datetime
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口
s.bind((host, port)) # 绑定端口
s.listen(5) # 监听
bufSize = 1024 # 缓存区字节大小
users = {
"admin": "123",
"aaa": "123",
"bbb": "123",
"ccc": "123"
} # 允许登录的账号和密码
print("Waiting for the link...")
while True:
c, addr = s.accept() # 建立客户端连接
print("In authentication...")
userName = c.recv(bufSize).decode()
userPass = c.recv(bufSize).decode()
print("userName: ", userName, '\n', "userPass: ", userPass)
if ((userName in users) == 0) or (users[userName] != userPass):
print("Incorrect user name or password")
c.send("Incorrect user name or password".encode())
else:
print("Connection successful,ip:", addr)
c.send("Connection successful".encode()) # 返回信息
with open('D:/课程设计A/py3/massage.txt', 'a+') as f:
f.write(
'User name:' + str(userName) + '\n' +
'Login time:' + str(datetime.datetime.now()) + '\n' +
'IP:' + str(addr)) # 写入文件massage
c.close()
s.close() # 关闭连接
运行结果
第五题
题目五:防火墙系统
1、设计一个信息系统,系统必须通过客户端录入账号口令远程登录;
2、系统内至少包含三个以上账号;
3、系统服务器端可设定禁止登录的IP地址和账号信息;
4、如果客户端从禁止的IP地址登录或使用禁止的账号登录则显示不允许登录,并断开连接。
# python -u "d:\课程设计A\py5\client5.py"
import socket # 导入 socket 模块
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口号
c.connect((host, port))
bufSize = 1024 # 缓存区字节大小
while True:
userName = input("Input username:")
c.send(userName.encode())
passWord = input("Input userpass:")
c.send(passWord.encode())
re = c.recv(bufSize).decode()
if re != "Connection successful":
print(re)
c.close()
else:
print("Connection successful")
c.close()
c.close()
# python -u "d:\课程设计A\py5\server5.py"
import socket # 导入 socket 模块
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口
s.bind((host, port)) # 绑定端口
s.listen(5) # 监听
bufSize = 1024 # 缓存区字节大小
user = {
"admin": "123",
"aaa": "123",
"bbb": "123",
"ccc": "123"
} # 允许登录的账号和密码
banUser = {"ddd": "123"} # 被Ban用户名和密码
banIp = ["192.168.1.0"] # 限制登Ban的IP地址
print("Waiting for the link...")
while True:
c, addr = s.accept() # 建立客户端连接
print("In authentication...")
userName = c.recv(bufSize).decode()
userPass = c.recv(bufSize).decode()
print("userName: ", userName, '\n', "userPass: ", userPass)
if addr[0] in banIp: # 判断IP地址是否被ban
print("IP be Ban")
c.send("IP be Ban".encode())
elif userName in banUser: # 判断账户是否被ban
print("Username be Ban")
c.send("Username be Ban".encode())
elif ((userName in user) == 0) or (user[userName] != userPass):
print("Incorrect user name or password,ip:", addr)
c.send("Incorrect user name or password".encode())
else:
print("Connection successful,ip:", addr) # 返回身份验证成功信号
c.send("Connection successful".encode()) # 开始进行信息交互
c.close()
s.close() # 关闭连接