独立开发者系列(27)——python生成文本

在简单的安全漏洞测试里面,文本的信息自动化填充生成和储存还有使用非常有用。简单的比如IP段的生成,检查某个IP段的服务器存在数量一般取俩个IP段

比如101.35.*.* 最多256*256 条IP 信息 分别发出对应的检测命令,可以知道该IP段有多少可以查询到。如果检测到服务器,就可以分别检测3306端口/22端口的弱口令,一般是读取密码本 进行密码探测。此类的应用很多,大部分的安全攻击人员写简单脚本,也是利用这种思路原理。所以写代码做安全的时候,需要考虑到这些层面。简单的实用方面,就是模拟简单的注册,给系统增加用户量,有些系统需要一些虚拟用户来实现网站的数据效果。
  所以这里来使用python来实现一个基础的俩个效果,生成10W的虚拟用户资料,读取我们生成的资料文本,然后打印下,具体的通途和使用逻辑,需要根据我们自己的业务场景再去实现。
   实现1个简单的目标 : 生成10W个机器人账号,手机号+密码+昵称+性别的方式,存档到txt里面。(一些网站早期为了吸引用户会开放注册账号,风控比较低的情况下,很多看有价值,会生成一批账号密码进行注册) 或者自己的系统里面,需要一批僵尸号生成注册,但是需要把账号弄的真实一些,但是又不能直接修改服务端的代码,否则会造成一些不必要的代码风险。考虑到10W代码的读写,已经开始有时间差距和内存使用差距效应,所以写代码的时候,同时加入了俩者的信息获取。使用了time模块和tracemalloc模块进行跟踪,同时为了随机性,我们使用了python的random模块,因为需要读写文件,我们使用到了os模块,随机的字符串字母特殊符号我们使用到了string模块。

在第一个版本里面,我们特意直接使用代码的循环,10W次I/O,可以发现实现时间要30秒,而采用第二种方法,只需要3秒,这充分说明,在代码里面我们减少反复I/O的重要性,还有做I/O操作的时候,需要考虑性能相关问题。I/O对性能的影响远比运算要大。

本次我们主要写了几个函数: 封装了一个写入函数,获取随机注册名,随机密码,随机性别,随机昵称的方法。

def  create_account (num = 10000) :
    strings = ''
    for i in range(1, num):
        uname = generate_rand(10, 4)
        passwd = generate_rand(8, 2)
        nickname = str(generate_chinese_nickname(1)[0])
        sexnum = random.randint(1,2)
        sex = "male" if sexnum==1 else "female"
        stra = uname + "|" + passwd + "|"+nickname +"|"+ sex +"\n"
        strings = strings + stra
    putFileContent(strings, "account.txt")



   随机生成账号密码相关:

def generate_rand(length, char_type=1):

    char_sets = {

        1: string.ascii_letters + string.digits + string.punctuation,

        2: string.ascii_letters + string.digits,

        3: string.digits,

        4: string.digits

    }

    # 获取对应的字符集

    characters = char_sets.get(char_type, char_sets[4])

    # 生成随机字符串

    rtchar = ''.join(random.choice(characters) for _ in range(length))

    if char_type == 4:

        rtchar = '1' + rtchar

    return rtchar

中文昵称的随机生成:

def generate_chinese_nickname(count=1):

    # 定义昵称的前缀、中缀和后缀列表

    first = ["优雅", "从容", "淡定", "忧伤", "犹豫", "清纯", "秀丽"]

    second = ["琴声", "居住", "沧桑", "厚重", "流水", "无痕", "轮回"]

    last = ["少年", "少女", "老人", "兄弟", "妈妈", "爸爸", "爷爷", "奶奶"]

    # 使用列表推导式生成昵称列表

    nicknames = [

        random.choice(first) + random.choice(second) + random.choice(last)

        for _ in range(count)

    ]

    return nicknames

封装个写入函数

def putFileContent(cont, fileName='jobs.txt'):

    if not os.path.exists(fileName):

        with open(fileName, 'w') as file:

            file.write('')

    with open(fileName, 'a', encoding='utf-8') as file:

        file.write(cont)


    我们定义一个写入函数和一个随机生成字符串的函数,同时生成 10W个账号,然后写个最简单的版本出来。用初步的测量时间测试下代码跑的时间。代码运行时间:32.20751476287842秒 。很方便我们完成了我们第一个目标,生成了 10W个账号给我们使用。

学习点,一种是每次都生成一个账号密码,然后写入txt,10W账号花费32S,第二种生成10W个号码,拼接成一个很长的字符串,直接写入txt 花费3秒,所以可以看到 反复I/O对系统的性能损耗是非常严重的,偶尔的时候,我们可以多开销一些内存来提高代码的运行效率。

     完成了我们生成我们自己账号的机器人账号本。其实该账号本可以是任意的密码本/IP本,我们在后续其他操作里面,需要扫描,批量化的时候,都是一样的使用原理。

读取指定行的txt进行操作:

def getFmem(start =0 ,end = 10000) :

    with open('account.txt', 'r',encoding='utf-8') as file:

        for current_line, line in enumerate(file):

            if current_line < start:

                continue

            if current_line >= end:

                break

            acc = line.strip()  # 使用strip()去除行尾的换行符

            arr = acc.split("|")

            print(arr[0])

            print(arr[1])

            print(arr[2])

            print(arr[3])

            time.sleep(2)

 前面主要实现的目标是生成我们的 10W个账号密码,同时储存到对应文本里,方便我们自己进行备用,在一些验证不严格的地方,多注册几个账号,还是比较有好处的,这样也方便对账号进行管理。其中包括增加对代码内存和时间的监测,代码的随机账号密码生成,同时理解了反复I/O会对性能造成巨大的负面影响。

现在实现我们需要的第二个目标,我们希望我们在使用这些账号密码的时候,能指定具体的行数使用,具体的使用规则,可能是通过调用内部接口的方式,也可能是直接调用外部不严谨的注册接口方式。我们希望实现一个方法,能指定我们使用任意行数的账号|手机号|性别|昵称|简单介绍的生成。具体的调用方法,我们可以在以后的逻辑里面实现。这里我们暂停2秒表示正在调用过程执行中。

读取文件的时候,需要注意,代码默认是gbk读取汉字,所以open的时候要特别指定utf8编码 否则解析是错误的。

这样就完成了本次python生成账号储存在文本里面,然后在适当的时候,使用文本注册对应机器模拟人的方法。

随机效果图:

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大梁来了

千山万水总是情,打赏一块行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值