python小测试

1:请说明解释型语言和编译型语言之间的区别

区别:

  • 编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
  • 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度不如编译后的程序运行的快。
    //python是解释型语言 //运行效率较低,开发效率较高

优缺点:

  • 编译型:优点: 编译器⼀一般会有预编译的过程对代码进⾏优化。因为编译只做⼀一次, 运⾏时不需要编译,所以编译型语⾔言的程序执⾏效率高。可以脱离语⾔环境独立运行。
    缺点: 编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运⾏环境⽣生成机器码,不同的操作系统之间移植就会有问题,需要根据运⾏的操作系统环境编译不同的可执⾏文件。
  • 解释型:优点: 有良好的平台兼容性, 在任何环境中都可以运行, 前提是安装了解释器(虚拟机)。灵活、修改代码的时候直接修改就可以,可以快速部署,不⽤用停机维护。
    缺点:每次运⾏的时候都要解释⼀一遍,性能上不不如编译型语言。

2:面向过程编程/函数式编程/面向对象编程三者之间的异同点

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
  • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为
  • 函数式编程将函数视为主要的抽象。函数是独立的,而不是任意地为每个操作都需要一个对象。重点是编写可重用的、可组合的函数,并将底层数据结构的细节作为同等或次要的。“纯”函数样式将函数视为数学函数,避免了可变状态和命令式代码带来的副作用。

面向对象是以功能来划分问题,而不是步骤。
“面向过程”和“面向对象”的区别是“封装”。“函数式”和“面向对象”的区别是“不使用外部状态”。

3:请写出Python的选择结构与循环结构,注意语法格式

If(表达式){
    语句
}
变量初始化
While(循环条件){
    循环操作
    循环出口
}

4:请简单描述8中基本的排序算法,并说明其优缺点。

插入排序/希尔排序/选择排序/冒泡排序/快速排序/堆排序/归并排序/基数排序

5:针对文件操作的方法,请写出6中,并写出C类1-255IP地址(参照PHP操作方法)

r  只读,默认模式
w  只写,不可读,若文件不存在则创建,若存在,则删除内容,写入新内容
a  只追加,不可读,若文件不存在则创建,存在则追加新内容
r+  可读、可写、可追加,若文件不存在,则报错
w+ 可读、可写,若文件存在,内容会被清空,可读新写入的内容
a+ 可读、可写、可追加,若文件存在,则追加新内容

6:请写出Python函数形参与实参区别以及构造函数与析构函数区别,并写出函数默认值设置语法格式

构造函数与析构函数:
相同点:Python中,构造函数(constructor)和析构函数(destructor)同为类中默认存在的无初始内容函数(可写入内容),且都在会在对对象执行操作时调用。
不同点:不同的是构造函数在创建对象后自动被调用,而析构函数在对象被销毁前(作为垃圾被收集)自动被调用。两者有异曲同工之妙。

形参:定义函数时使用的参数。
实参:调用函数时使用的参数

为形参指定默认值的语法格式如下:形参名 = 默认值 从上面的语法格式可以看出,形参的默认值紧跟在形参之后,中间以英文“=”隔开。
再次强调,Python 要求将带默认值的参数定义在形参列表的最后。

7:写函数录入学生信息:姓名,性别,年龄,学历,支持用户的持续输入并能够产看结果按下Q或q退出

代码如下:

def student():
    students = []
    count = 3
    for i in range(count):
        name = input(f'请输入第{i+1}个学生的姓名:(输入q或Q退出)')
        if name.strip().upper() == "Q":
            break
        else:
            gender = input(f'请输入第{i + 1}个学生的性别:')
            age = input(f'请输入第{i+1}个学生的年龄:')
            education = input(f'请输入第{i+1}个学生的分数:')
            stu_list = [name,gender,age,education]
            students.append(stu_list)

    for stu in students:
        for v in stu:
            print(v,end = ' ')
        print()
res=student()
print(res)

运行结果如下:
在这里插入图片描述

8:打印99乘法表与*号图形为以下形状:

        *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *

代码如下:

for i in range(1,10):
    for j in range(1,i+1):
        print("%sx%s=%s"%(i,j,i*j),end=" ")
    print()

运行结果如下:

1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

代码如下:

for i in range(1,10):
    for j in range(1,i+1):
        print("*",end=" ")
    print()

运行结果如下:

        *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *

9:请使用函数式编程书写用户注册与登录界面,成功之后会有主机存活扫描与网页登录模拟功能(实操题)

代码如下:(比较完整的答案)

import requests
import math
import re
import subprocess

user_name = 13321
password = 133211

def login():
    while 1:
        print('登录'.center(40, '='))
        for i in range(0,3):
            name = int(input('请输入账号:'))
            if name == user_name:
                psw = int(input('请输入密码:'))
                if psw == password:
                    print('登录成功'.center(40, '='))
                    return
                else:
                    print('密码错误'.center(40, '='))
                    if i == 2:
                        print('您的机会已用完,请12小时之后再试')
                    else:
                        print('您还有%s次机会' % (2 - i))
            else:
                print('账号不存在'.center(40, '='))
                if i == 2:
                    print('您的机会已用完,请12小时之后再试')
                else:
                    print('您还有%s次机会' % (2 - i))

def regist():
    while 1:
        print('请注册'.center(40, '='))
        re_name = int(input('请输入账号:'))
        if re_name == user_name:
            print(''.center(40, '='))
        else:
            re_psw = int(input('请输入密码:'))
            return '注册成功'.center(40, '=')

def moudle():
    a = int(input("请选择模块:1.主机存活扫描 2.网页模拟登录 \n"))
    if a==1:
        while 1:
            ip1 = []
            ip2 = []
            for ip in range(1, 256):
                str_ip = '192.168.1.' + str(ip)
                ftp_res = subprocess.Popen('ping %s -n 3' % str_ip, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                                           shell=True)
                res = ftp_res.stdout.read()
                str_res = res.decode("gbk")
                res_s = re.search("TTL", str_res)
                if res_s:
                    print('%s 主机是存活的' % str_ip)
                    ip1.append(str_ip)
                else:
                    print('%s 无法Ping通' % str_ip)
                    ip2.append(str_ip)
            print("存活ip:")
            print(ip1)
            print("不存活ip:")
            print(ip2)
    else:
        print(login())
if __name__ == '__main__':
    regist()
    login()
    moudle()

运行结果如下:
在这里插入图片描述
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

自己写的(注册有问题)

代码如下:

import re
import subprocess

getNum = int(input("1.登入\n2.注册\nPlease Input the Choose :"))
while getNum<1 or getNum>2:
    getNum =int(input("无效值 :"))
if getNum == 1:  # 登入
    ErrNums = 0

    name = 'admin'
    passward = '123456'
    name1 = input("请输入用户名:")
    passward1 = input("请输入密码:")
if name1 == name and passward1 == passward:
    print("恭喜您,登录成功!")

    ip_list1 = []
    ip_list2 = []
    for ip in range(1, 256):
        str_ip = '192.168.1.' + str(ip)
        ftp_res = subprocess.Popen('ping %s -n 3' % str_ip, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
        res = ftp_res.stdout.read()
        str_res = res.decode("gbk")
        res_s = re.search("TTL", str_res)
        if res_s:
            ip_list1.append(str_ip)
            print('存活的主机:')
            print(ip_list1)
        else:
            ip_list2.append(str_ip)
            print('无法ping通主机:')
            print(ip_list2)

else:
    print("账号或密码输入错误,请重新输入!")
    name1 = input("请输入用户名:")
    passward1 = input("请输入密码:")

if getNum == 2:  # 注册
    ErrNums = 0
    name = 'admin'
    passward = '123456'
    name2 = input("请输入用户名:")
    passward2 = input("请输入密码:")
if name2 == name and passward2 == passward:
    print("账号已存在,请重新输入!")
    name2 = input("请输入用户名:")
    passward2 = input("请输入密码:")
else:
    print("恭喜您,注册成功!")

运行结果:
在这里插入图片描述

10:根据JD-FreeFuck来进行POC编写(弱口令检测功能)(实操题)

账号:useradmin 密码:supermanito

代码如下:

import requests

def getCookie():
    url = input("请输入目标url:")
    Hostreferer = {
       
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"
    }
    name = "useradmin"
    passwd = "supermanito"
    html = requests.get(url, headers=Hostreferer, verify=False, data={'username': name, "password": passwd}, timeout=5).status_code
    if html == 200:
        print("存在弱口令漏洞")
    else:
        print("不存在弱口令")
if __name__ == '__main__':
    getCookie()

可以检测出是否存在弱口令,但是不能输出账号密码。

借鉴以下代码继续研究:

class Haoyangmao():

    def __init__(self):
        self.data_old = {'username' : 'useradmin', 'password' : 'supermanito'}
        self.data_new = {'username' : 'admin', 'password' : 'adminadmin'}

    def get_index(self, ip, port):
        try:
            url = "http://{ip}:{port}".format(ip=ip, port=port)
            r = requests.get(url, timeout=5)
            # cookie = requests.utils.dict_from_cookiejar(r.cookies)
            if r.status_code == 200:
                po = self.post_login(url, self.data_old)
                if po:
                    return {'err' : 0, 'result' : self.data_old}
                po = self.post_login(url, self.data_new)
                if po:
                    return {'err' : 0, 'result' : self.data_new}
            else:
                return {'err' : 1, 'msg' : 'password_error'}
        except:
            return {'err' : 1, 'msg' : '404_wrong'}

    def post_login(self, url, data):
        try:
            po = requests.post(url+'/auth', data=data, timeout=5)
            return abs(int(po.json()['err'])-1)
        except:
            return None
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值