随机生成虚假通讯录文件
专治各种非法获取用户通讯录信息的骗子
找不用的手机 多生成几个文件导入进去,混淆骗子服务器数据
支持两种生成模式:
0:人名
1:亲戚关系(内置384种常用称呼)
文件支持直接导入手机转成通讯录信息
# !/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: JHC000abc@gmail.com
@file: demo.py
@time: 2024/11/26 10:46
@desc:
"""
import uuid
import quopri
from faker import Faker
class GenContacts(object):
"""
随机生成虚假通讯录文件
专治骗子
"""
def __init__(self):
self.fake = Faker('zh_CN')
self.self_relations = self.makeSelfRelation()
def formatPhone(self, phone):
"""
:param phone:
:return:
"""
return f"{phone[:3]} {phone[3:7]} {phone[7:]}"
def secretName(self, name):
"""
:param name:
:return:
"""
utf8_name = name.encode('utf-8')
return quopri.encodestring(utf8_name).decode('ascii')
def getRandomUserInfo(self):
"""
:return:
"""
if self.mode == "0":
name = self.fake.name()
else:
name = self.fake.random_sample(self.self_relations, 1)[0]
phone = self.formatPhone(self.fake.phone_number())
print(name, phone)
return self.secretName(name), phone
def createVCF(self, name, phone):
"""
:param name:
:param phone:
:return:
"""
return f"""BEGIN:VCARD\nVERSION:2.1\nN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;{name};;;\nFN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:{name}\nTEL;CELL:{phone}\nEND:VCARD\n"""
def check_mode(self, mode):
"""
:param mode:
:return:
"""
if mode == "0":
self.mode = "0"
elif mode == "1":
self.mode = "1"
else:
self.mode = "0"
def genVCFFiles(self, gen_nums):
"""
:param gen_nums:
:return:
"""
save_file = f"random_{uuid.uuid4()}.vcf"
with open(save_file, "w", encoding="utf-8") as fp:
for _ in range(int(gen_nums) + 1):
name, phone = self.getRandomUserInfo()
write_info = self.createVCF(name, phone)
fp.write(write_info)
return save_file
def makeSelfRelation(self):
"""
:return:
"""
head = ["大", "二", "三", "四", "五", "六", "七", "八", "九", "老", "小"]
head_relation = ["媳妇", "老婆", "老公", "小三", "二奶", "情人", "哥", "姐", "弟", "妹", "爷", "伯",
"奶", "外公", "外婆", "叔", "阿姨", "舅舅", "舅妈", "姑姑", "姑父", "姨妈", "姨父", "表哥",
"表姐", "表弟", "表妹", "堂哥", "堂姐", "堂弟", "堂妹", "舅", "姑", "姨"]
extend_relation = ["妻", "小妾", "亲家公", "亲家母"]
lis = []
for i in head:
for j in head_relation:
lis.append(f"{i}{j}")
lis.extend(extend_relation)
return lis
def process(self):
"""
:return:
"""
gen_nums = input("输入生成通讯录条数:")
mode = input("输入模式【0:人名 1:关系】默认0:")
self.check_mode(mode)
try:
gen_nums = int(gen_nums)
except:
gen_nums = 0
if gen_nums > 0 and gen_nums <= 99999:
save_file = self.genVCFFiles(gen_nums)
print(f"通讯录 {gen_nums} 条 生成完成:{save_file}\n回车退出")
else:
input("输入必须为 1-9999 之间纯数字\n回车退出")
if __name__ == '__main__':
gc = GenContacts()
gc.process()