记安全课程设计

记安全课程设计

其实这个前几天就写完了 由于太忙 就给忘了
晚上看见群里有人说课程紧张 不是很好写
就"开(ban)源(yun)"分享下简单思路吧
切记不要直接拿源码提交实验报告 至少自己要有改动 至少加入点自己的思考
当然目前部分程序还存在bug尚未解决 欢迎私信讨论

题目一:暴力破解密码

要求:1、设计一个信息系统,该系统可为学籍管理系统、订餐系统、票务管理系统不限,系统必须通过客户端录入账号口令远程登录;
2、系统内至少包含三个以上账号,密码为6位以上数字组成;
3、设计程序在该系统所在服务器端进行暴力密码破解,破解后将账号密码通过套接字发送出去;
4、在客户端用破解得到的账号口令进行登录,验证破解成功。

#client.py
import socket,os
c=socket.socket()
#连接服务端,服务端ip地址:127.0.0.1,端口:1216
c.connect(('127.0.0.1',1216))
while 1:
	uspw=input("输入账号和密码,空格隔开:")
	#发送账号密码给服务端
	c.send(uspw.encode())
	#接收服务端返回信息
	receive=c.recv(1).decode()
	if receive=="T":
		print("登录成功")
        break
    else:
        print("用户名或密码错误")
c.close()
os.system("pause")
#sever.py
import socket,os
#创建套接字
s=socket.socket()
#设置关闭套接字时立刻释放端口
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#绑定服务端端口
s.bind(('',1216))
#开始监听
s.listen(1)
#账号和密码
user={
    
    "admin":"123456","user":"1234567","guest":"123456","baili":"123456"}
#接收连接的客户端的信息
sock,addr=s.accept()
print(addr[0]+"已连接")
while 1:
	#接收客户端发送的信息
    receive=sock.recv(1024).decode()
    receive=receive.split()
	#判断账号密码是否正确,正确发送T,错误发送F
    if user[receive[0]]==receive[1]:
        sock.send("T".encode())
        break
    else:
        sock.send("F".encode())
sock.close()
s.close()
 
 
os.system("pause")
#exp.py
import socket,os
import time
p=socket.socket()
p.connect(('127.0.0.1',1216))
us=input("输入要破解的用户名:")
a=input("请输入从那个数开始爆破:")
b=input("请输入从那个数结束爆破:")
a=int(a)
b=int(b)

while 1:
    
	#读取一行
    for i in range(a,b):
        pasd=i
	#拼接用户名和密码        
        pasd = str(pasd)
        time.sleep(0.1)
        print("正在尝试破解---当前正在尝试的登录密码是---"+pasd)
        sed=us+' '+pasd
	#发送给服务端
        p.send(sed.encode())
        rec=p.recv(1).decode()
	#服务端返回T说明密码正确
        if rec=="T":
            print("恭喜!成功破解密码!密码是:",pasd)
            break
    p.close()
#发送给密码接收器
    p=socket.socket()
    p.connect(('127.0.0.1',1014))
    pasd="密码是:"+pasd
    p.send(pasd.encode())
    p.close()
    os.system("pause")
#recive_password.py
import socket,os
#coding=utf-8
p=socket.socket()
p.bind(('127.0.0.1',1014))
p.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
p.listen(1)
pr,ip=p.accept()
print("正在接收密码...")
passwd=pr.recv(1024).decode()
#接收破解器发送的信息
print(passwd)
p.close()
os.system("pause")

运行截图如下

在这里插入图片描述

题目二:字典破解密码

要求:1、设计一个信息系统,该系统可为学籍管理系统、订餐系统、票务管理系统不限,系统必须通过客户端录入账号口令远程登录;
2、系统内至少包含三个以上账号,密码为6位以上任意字符组成;
3、设计程序设计程序在该系统所在服务器端进行字典密码破解,破解后将账号密码通过套接字发送出去;

#client.py
import socket,os
c=socket.socket()
#连接服务端,服务端ip地址:127.0.0.1,端口:1216
c.connect(('127.0.0.1',1216))
while 1:
	uspw=input("输入账号和密码,空格隔开:")
	#发送账号密码给服务端
	c.send(uspw.encode())
	#接收服务端返回信息
	receive=c.recv(1).decode()
	if receive=="T":
		print("登录成功")
		break
c.close()
os.system("pause")
#sever.py
import socket,os
#创建套接字
s=socket.socket()
#设置关闭套接字时立刻释放端口
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#绑定服务端端口
s.bind(('',1216))
#开始监听
s.listen(1)
#账号和密码
user={
    
    "admin":"123456","user":"1234567","guest":"123456","baili":"123456"}
#接收连接的客户端的信息
sock,addr=s.accept()
print(addr[0]+"已连接")
while 1:
	#接收客户端发送的信息
    receive=sock.recv(1024).decode()
    receive=receive.split()
	#判断账号密码是否正确,正确发送T,错误发送F
    if user[receive[0]]==receive[1]:
        sock.send("T".encode())
        break
    else:
        sock.send("F".encode())
sock.close()
s.close()
 
 
os.system("pause")
#exp.py
import socket,os
import time
p=socket.socket()
p.connect(('127.0.0.1',1216))
us=input("输入要破解的用户名:")
file=input("输入字典文件名:")
#只读方式打开字典文件
dic=open(file,'r')
while 1:
    
	#读取一行
    pasd=dic.readline()
    time.sleep(0.1)
    print("正在尝试破解---当前正在尝试的登录密码是---"+pasd)
	#拼接用户名和密码
    sed=us+' '+pasd
	#发送给服务端
    p.send(sed.encode())
    rec=p.recv(1).decode()
	#服务端返回T说明密码正确
    if rec=="T":
        print("恭喜!成功破解密码!密码是:",pasd)
        break
p.close()
#发送给密码接收器
p=socket.socket()
p.connect(('127.0.0.1',1014))
pasd="密码是:"+pasd
p.send(pasd.encode())
p.close()
os.system("pause")
#recive_password.py
import socket,os
#coding=utf-8
p=socket.socket()
p.bind(('127.0.0.1',1014))
p.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
p.listen(1)
pr,ip=p.accept()
print("正在接收密码...")
passwd=pr.recv(1024).decode()
#接收破解器发送的信息
print(passwd)
p.close()
os.system("pause")
这里需要内置字典
#pass.txt
1
12
123
1234
12345
123456
666666

运行截图如下

在这里插入图片描述

题目三:认证审计系统

要求:1、设计一个信息系统,系统必须通过客户端录入账号口令远程登录;;
2、系统内至少包含三个以上账号;
3、某账号登录后服务器端可实时显示该账号登录的时间及IP信息;
4、服务器端可查询账号的历史登录信息。

#client.py
import socket
 
c=socket.socket()
c.connect(("127.0.0.1",1216))
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()
#sever.py
import socket
import datetime
#允许登录的账号和密码
user={
    
    "admin":"123456","user":"1234567","guest":"123456","baili":"123456"}
#创建套接字
s=socket.socket()
#服务端结束运行时立刻归还端口
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#绑定服务器地址,端口
s.bind(("127.0.0.1",1216))
#开始监听客户端请求
s.listen(1)
#保存客户端请求的信息
print("等待客户端连接……")
sock, ip = s.accept()
print("已建立初步连接, 验证身份中……")
while True:
    receive=sock.recv(1024).decode()
    ls=receive.split()
    try:
        if user[ls[0]] == ls[1]:
            print("登录成功")
            sock.send("登录成功!".encode())
            user = ls[0]
            with open('login_history.txt', 'a+') as f:
                f.write('登录用户: ' + str(user) + '---登陆时间:  ' + str(datetime.datetime.now()) +'---登陆IP:  ' + str(ip) + '\n')
            while True:
                print("当前客户端登录id信息:",ip,"当前登录时间:",datetime.datetime.now())
            
            
            while True:
            #接收客户端发送的内容
                receive = sock.recv(1024).decode()
                if receive == "exit":
                    break
                
 
        else:
            sock.send("账户或密码错误!".encode())
            continue
    except:
        sock.send("重新输入:".encode())
        continue
    break
sock.close()
s.close()

运行截图如下

在这里插入图片描述

题目四:数据嗅探系统

要求:1、 设计一个信息系统,系统必须通过客户端录入账号口令远程登录;
2、 登录后客户端可通过键盘输入向服务器发送数据;
3、 服务器端设置嗅探关键字,如果客户端发送的数据包含该关键字,即将该数据显示出来。

#client.py
import socket
 
c=socket.socket()
c.connect(("127.0.0.1",1216))
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()
#sever.py
import socket
#允许登录的账号和密码
user={
    
    "admin":"1234"}
#创建套接字
s=socket.socket()
#服务端结束运行时立刻归还端口
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#绑定服务器地址,端口
s.bind(("127.0.0.1",1216))
#开始监听客户端请求
s.listen(1)
#保存客户端请求的信息
print("等待客户端连接……")
sock, ip = s.accept()
print("已建立初步连接, 验证身份中……")
print("Client-IP:",ip)
while True:
    receive=sock.recv(1024).decode()
    ls=receive.split()
    try:
        if user[ls[0]] == ls[1]:
            sock.send("登录成功!".encode())
            while True:
            #接收客户端发送的内容
                receive = sock.recv(1024).decode()
                if receive == "exit":
                    break
                    #输入包含关键字"密码"的信息
                if "密码" in receive:
                    print("成功嗅探到关键字:"+receive)
 
        else:
            sock.send("账户或密码错误!".encode())
            continue
    except:
        sock.send("重新输入:".encode())
        continue
    break
sock.close()
s.close()

运行截图如下

在这里插入图片描述

题目五:防火墙系统

要求:1、 设计一个信息系统,系统必须通过客户端录入账号口令远程登录;
2、 系统内至少包含三个以上账号;
3、 系统服务器端可设定禁止登录的IP地址和账号信息;
4、 如果客户端从禁止的IP地址登录或使用禁止的账号登录则显示不允许登录,并断开连接。

#client.py
import socket

#根据计算机名获取本地IP
host = "127.0.0.1"
port = 1216
bufSize = 1024

cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cs.connect((host, port))	#进行连接

userName = input("输入用户名:")
cs.send(userName.encode())
passWord = input("输入密码:")
cs.send(passWord.encode())

data = cs.recv(bufSize).decode()
if data != "successful":
	print(data)
	cs.close()
else:
	print("成功建立稳定连接!")
	while True:
		data = input("输入对话信息(exit表示结束): ")
		if data == "exit":
			break
		else:
			cs.send(data.encode())
			data = cs.recv(bufSize).decode()
			print("收到:", data)
cs.close()

#sever.py

import socket

user = {
    
    "admin": "1234","baili": "1216","test": "123","test2": "123"}
#user = {"admin": "1234"}  可以在user字典中继续添加新用户 格式为键值对

limitUser = {
    
    "abcd": "123", "qwer": "456", "wasd": "789"}		#限制登录的用户及密码

#limitIp = []
#当前限制为空
limitIp = ["127.0.0.1"]	#限制登录的IP地址 格式为列表格式


host = "127.0.0.1"	#服务端IP地址
port = 1216	#服务端开放端口
bufSize = 1024	#缓存区字节大小

ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)	#创建套接字
ss.bind((host, port))
ss.listen(5)

while True:
	print("等待客户端连接……")
	cs, addr = ss.accept()
	print("已建立初步连接, 验证身份中……")

	userName = cs.recv(bufSize).decode()
	print("userName: ", userName)
	passWord = cs.recv(bufSize).decode()
	print("passWord: ", passWord)
	#判断IP地址是否被限制
	if addr[0] in limitIp:	
		print("收到限制IP的连接请求,已拒绝!")
		cs.send("此IP限制登录,已断开连接".encode())
	#判断账户是否被限制
	elif userName in limitUser:
		if limitUser[userName] == passWord:
			print("收到限制用户的连接请求,已拒绝!")
			cs.send("此用户限制登录,已断开连接".encode())
		else:
			print("密码有误,已断开连接")
			cs.send("密码有误,已断开连接".encode())
	#判断账户是否被允许连接
	elif ((userName in user) == 0) or (user[userName] != passWord):
		print("收到用户的连接请求,账户密码不匹配,已拒绝!")
		cs.send("账户密码不匹配,已断开连接".encode())
	else:
		print("成功接收到连接,来自:", addr)
		#返回身份验证成功信号
		cs.send("successful".encode())
		#开始进行信息交互
		while True:
			data = cs.recv(bufSize).decode()
			if data == "exit":
				break
			else:
				print("收到:", data)
				cs.send((data.center(40, "*")).encode())
	cs.close()
ss.close()

运行截图如下

在这里插入图片描述

题目六:加密传输系统

要求:1、 设计客户端程序向服务器端发送数据;
2、 客户端从键盘输入的数据在发送之前进行加密,加密方法可选择仿射、移位密码;
3、 服务器端接收到数据后进行显示,然后在解密后再次显示。

#client.py
import socket

#创建一个客户端的socket对象
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#设置服务端的ip地址
host = "127.0.0.1"
#设置端口
port = 1216
#连接服务端
client.connect((host, port))



#while循环是为了保证能持续进行对话
while True:
    #输入发送的消息
    sendmsg = input("请输入数据:")
    shift = 3
    l = [] 
    for i in sendmsg:
        i=ord(i)
        i = ((i + shift)-97)%26+97
        i = chr(i)
        l.append(i)
    sendmsg = ''.join(l)
    #发送数据,以二进制的形式发送数据,所以需要进行编码
    client.send(sendmsg.encode("utf-8"))

client.close()
#sever.py
import socket
#创建服务端的socket对象socketserver
socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 1216
#绑定地址(包括ip地址会端口号)
socketserver.bind((host, port))
#设置监听
socketserver.listen(5)
#等待客户端的连接
#注意:accept()函数会返回一个元组
#元素1为客户端的socket对象,元素2为客户端的地址(ip地址,端口号)
print("等待客户端连接……")
clientsocket,addr = socketserver.accept()
print("已建立初步连接, 开始数据传输……")
#while循环是为了能让对话一直进行,直到客户端输入q
while True:

    #接收客户端的请求
    recvmsg = clientsocket.recv(1024)
    #把接收到的数据进行解码
    strData = recvmsg.decode("utf-8")
    print("收到密文:"+strData)
    shift=3
    l = []
    for i in strData:
        i=ord(i)
        i = ((i - shift)-97)%26+97
        i = chr(i)
        l.append(i)
        #print(i,end='')
    strData = ''.join(l)
    print("解密后得:"+strData)
    

运行截图如下

在这里插入图片描述

题目七:图形验证模拟

要求:1、开发一个手机锁屏的图形验证程序,以字符命令行形式来实现要求完成的功能有:
2、 登录时输入用户名;
3、 输入4*4坐标下的图形点位置,用字符方式输入;
4、 输入完成后实现在服务器端对图形进行验证;
5、 至少有三个以上的用户验证。

#client.py
import socket,os
import re
import time

c=socket.socket()
#连接服务端,服务端ip地址:127.0.0.1,端口:1216
c.connect(('127.0.0.1',1216))
uspw=input("请输入账号:")
c.send(uspw.encode())
list = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
rr = re.compile('[1-9]\d*',re.S) # 不区分大小写
xx = "0000000000000000"
print("请输入验证图形:")
time.sleep(0.5)
print("待所有验证图形输入完后 输入:verify开始验证")
while 1:
    
    t=input("输入格式为set(a,b)\n")
    
    if t == "verify":
        list=map(str,list) 
        xx = "".join(list)
        c.send(xx.encode())
        receive=c.recv(1).decode()
        #接收服务端返回信息
        if receive=="T":
            print("登录成功")
            break
        else :
            print("用户名或者图形验证错误")
            print("请重新图形验证")
            list = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
            
    else:
        x = rr.findall(t)
        sum = (int(x[0])-1)*4 + int(x[1])-1
        #t=input("请输入:\n输入格式为set(a,b)\n")
        sum = int(sum)
        list[sum]=1
        for i in range(0,16):
            if list[i] == 0:
                print("o",end="")
            else: 
                print("x",end="")
            if i%4==3:
                print("")

c.close()
os.system("pause")
#sever.py
import socket,os
#创建套接字
s=socket.socket()
#设置关闭套接字时立刻释放端口
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#绑定服务端端口
s.bind(('',1216))
#开始监听
s.listen(1)
#账号和密码
user={
    
    "admin":"1000100010001000","user":"1000010000100001","guest":"0000000000000000","baili":"1111000000000000"}
#接收连接的客户端的信息
sock,addr=s.accept()
print(addr[0]+"已连接")
receive_user=sock.recv(1024).decode()
while 1:
	#接收客户端发送的信息
    receive_pass=sock.recv(1024).decode()
	#判断账号密码是否正确,正确发送T,错误发送F
    if user[receive_user]==receive_pass:
        sock.send("T".encode())
        print("验证通过")
        break
    else:
        sock.send("F".encode())
sock.close()
s.close()
 
 
os.system("pause")

运行截图如下

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_21538159/article/details/105375010
今日推荐