Python域名生成器分隔符随机性不足问题求助
解决Python域名生成器分隔符随机性不足的问题
问题分析
你设置了分隔符集合delimiters = ['', '-', '.'],期望生成如web-loginconfirm.co.id、web.login-confirm.co.id这类多种分隔符混合的域名,但当前代码输出的域名分隔符样式单一,无法实现混合效果。
核心原因是:当前代码使用random.choice(delimiters).join(data)的方式,会选择一个固定分隔符连接所有子域名部分,导致整个前缀的分隔符完全一致,无法实现多种分隔符混合的效果。
解决方案
需要改为为每一对相邻的子域名部分随机选择分隔符,而不是用同一个分隔符贯穿始终。可以自定义一个随机连接函数,逐个拼接子域名部分,每次都随机挑选分隔符。
修改后的完整代码
import random def random_join(parts, delimiters): if not parts: return "" result = parts[0] for part in parts[1:]: # 每两个相邻部分之间随机选择一个分隔符 result += random.choice(delimiters) + part return result Example = open("dictionaries/examples.txt", 'w', encoding="utf-8") with open("dictionaries/Combined.txt") as i: Test = [line.rstrip() for line in i] # Combined.txt中的示例内容 Example_words = ['login', 'confirm', 'signup', 'confirmation', 'enroll', 'mobile', 'access', 'claim', 'service', 'group', 'recovery', 'support', 'find', 'confirmation'] delimiters = ['', '-', '.'] web = 'web' subdomain_count2 = 2 subdomain_count3 = 3 subdomain_count4 = 4 suffix = ['co.id', 'info', 'id', 'com'] output = [] for i in range(5): outputs = [] outputs2 = [] outputs3 = [] for j in range(subdomain_count2): outputs.append(random.choice(Test)) data = outputs + [web] random.shuffle(data) for k in range(subdomain_count3): outputs2.append(random.choice(Test)) data2 = outputs2 + [web] random.shuffle(data2) for l in range(subdomain_count4): outputs3.append(random.choice(Test)) data3 = outputs3 + [web] random.shuffle(data3) # 使用自定义函数生成带随机混合分隔符的前缀 prefix = random_join(data, delimiters) prefix2 = random_join(data2, delimiters) prefix3 = random_join(data3, delimiters) tld = random.choice(suffix) addr1 = '.'.join([prefix, tld]) addr2 = '.'.join([prefix2, tld]) addr3 = '.'.join([prefix3, tld]) addr = (addr1 + '\n' + addr2 + '\n' + addr3 + '\n') output.append(addr) Example.write(addr) Example.close() # 确保文件资源释放 with open("dictionaries/examples.txt") as f: websamples = [line.rstrip() for line in f]
关键修改说明
- 新增
random_join函数:实现逐个部分随机选分隔符的逻辑,确保相邻子域名之间的分隔符可以不同; - 移除冗余代码:删除了原来无意义的
out = random.choice(delimiters).join([prefix])逻辑,因为prefix已经是处理好的前缀; - 优化资源管理:增加
Example.close()确保文件资源被正确释放。
效果示例
修改后生成的域名会包含多种分隔符组合,例如:
web-login.confirm.co.idlogin.web-confirmation.infomobile.access-web.id
内容的提问来源于stack exchange,提问作者Tsukuru
相关产品推荐
相关产品推荐

