题目要求:
1、设计一个信息系统,系统必须通过客户端录入账号
2、系统内至少包含3个以上账号
3、系统服务器可设定禁止登录的IP地址和账号信息
4、如果客户端从禁止的IP地址登录或使用禁止的账号则不允许登录,并断开连接
思路:实现客户端远程登录服务端用到socket模块
数据嗅探系统 防火墙系统
python3在发送信息时需要加encode函数编码,接收消息需要decode函数解码才能显示成字符串
数据嗅探服务端代码:
import socket
import os
#允许登录的账号和密码
user={"admin":"1234"}
#创建套接字
s=socket.socket()
#服务端结束运行时立刻归还端口
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#绑定服务器地址,端口
s.bind(("",8888))
#开始监听客户端请求
s.listen(1)
#保存客户端请求的信息
sock, ip = s.accept()
print("Client-IP:",ip)
while True:
#接收客户端发送的账号和密码
receive=sock.recv(1024).decode()
#print(receive)
ls=receive.split()
try:
#判断账号和密码是否允许登录
if user[ls[0]] == ls[1]:
sock.send("登录成功!".encode())
while True:
#接收客户端发送的内容
receive = sock.recv(1024).decode()
#print(receive)
if receive == "exit":
break
#输入包含关键字“密码”的信息
if "密码" in receive:
print(receive)
else:
sock.send("账户或密码错误!".encode())
continue
except:
sock.send("重新输入:".encode())
continue
break
sock.close()
s.close()
os.system("pause")
数据嗅探客户端代码:
import socket
import os
c=socket.socket()
c.connect(("127.0.0.1",8888))
user=input("输入用户名和密码,用空格隔开:")
while True:
#发送账号和密码
c.send(user.encode())
#接收服务端发送的信息,python3发送信息需要加encode()
#接收消息需要加decode()
recive=c.recv(1024).decode()
if "成功" in recive:
break
print(recive)
user=input()
print(recive)
while True:
temp=input("输入发送的内容:")
c.send(temp.encode())
if temp=="exit":
break
c.close()
os.system("pause")
防火墙系统服务端代码:
import socket
import os
#允许登录的账号密码
user={"Bob":"1234","Jim":"4321","Tom":"1324"}
#禁止登录的IP
hp=["192.168.1.2"]
print("允许登陆的账号密码",user)
print("禁止的IP:",hp)
s=socket.socket()
s.bind(("",8888))
s.listen(1)
sock,ip=s.accept()
print("ip:",ip)
#判断IP是否合法
if ip[0] in hp:
sock.send(("该IP不允许登录!").encode())
#接收客户端发送的账号和密码
receive=sock.recv(1024).decode()
print(receive)
ls=receive.split(',')
try:
if user[ls[0]] == ls[1]:
sock.send("登录成功!".encode())
else:
sock.send("账户或密码错误!".encode())
except:
sock.send("禁止的账号!".encode())
sock.close()
s.close()
os.system("pause")
防火墙系统客户端代码:
import socket
import os
#判断输入的内容是否合法
while True:
user=input("输入用户名和密码,用逗号隔开:")
t=0
for i in user:
if i==',':
t+=1
if t==1:
break
c=socket.socket()
c.connect(("127.0.0.1",8888))
#发送账号和密码
c.send(user.encode())
#接收返回的信息
recive=c.recv(1024)
print(recive.decode())
c.close()
os.system("pause")