1,写一个python3.9以上版本的代码。 2,读取 zubo_ip_port1.txt 文件中的 IP:port列表,如果在处理IP:port时,没有冒号,则默认将端口设置为80。删除空格及空行。判断IP是否合理, 3,ip:port去重ABC段且port相同的, 4,根据每个IP生成该IP所在D段所有的IP:port,port是固定跟随IP的, 生成该 'IP'+:'port' 所在 D 段所有 'IP'+':'+'port', 5,对每个 http://ip:port/status 检测状态码是否为 200,显示出为200的且无跳转的网址,去重后,保存符合条件的网址到 zubo_200_d.txt 文件中。 6,zubo_ip_port1.txt 文件中的 IP:port列表中,挑选出符合以下条件的行:该行在以上的D段进行http://ip:port/status 检测中,所有ip:port都是状态非200的,则继续根据非200状态IP,生成该IP所在C段所有的IP:port,因为加C段生成IP数量大,因此程序提供选择哪些非200的IP:port需要进行C段检测。同样进行http://ip:port/status 检测状态码是否为 200,显示出为200的且无跳转的网址,去重后,保存符合条件的网址到 zubo_200_c.txt 文件中。 7,要求可以指定多线程的线程数。
时间: 2023-03-14 22:24:01 浏览: 78
答:答复:以下是一个python3.9以上版本的代码:import threading
import requests
import redef read_ip_port(filename):
"""读取zubo_ip_port1.txt文件中的IP: port列表,如果没有冒号,则默认将端口设置为80"""
ips = []
with open(filename, 'r') as f:
for line in f.readlines():
line = line.strip()
if line == '':
continue
ip_port = line.split(':')
if len(ip_port) == 1:
ip_port.append('80')
ips.append(ip_port)
return ipsdef check_ip(ip_port):
"""检查IP是否合理以及http://ip:port/status检查状态码是否为200"""
ip, port = ip_port
url = 'http://{}:{}/status'.format(ip, port)
r = requests.get(url)
if r.status_code == 200 and not r.url.startswith('http://'):
return url
else:
return Nonedef check_d_segment(ips):
"""根据每个IP生成该IP所在D段所有的IP:port,port是固定跟随IP的,生成该IP :port 所在 D 段所有IP :port"""
ips_d = []
for ip in ips:
ip_d = re.sub(r'(\d+)\.(\d+)\.(\d+)\.(\d+)', r'\1.\2.\3.\4', ip[0])
for i in range(1,255):
ip_d_port = '{}.{}:{}'.format(ip_d, i, ip[1])
ips_d.append(ip_d_port)
return ips_ddef save_200_urls(ips, filename):
"""对每个http://ip:port/status检测状态码是否为200,显示出为200的且无跳转的网址,去重后,保存符合条件的网址到zubo_200_d.txt文件中"""
f = open(filename, 'w')
for ip in ips:
url = check_ip(ip)
if url:
f.write(url + '\n')
f.close()def check_c_segment(ips, thread_num):
"""根据非200状态IP,生成该IP所在C段所有的IP:port,进行http://ip:port/status检测状态码是否为200,显示出为200的且无跳转的网址,去重后,保存符合条件的网址到zubo_200_c.txt文件中"""
ips_c = []
# 根据非200状态IP,生成该IP所在C段所有的IP:port
for ip in ips:
ip_c = re.sub(r'(\d+)\.(\d+)\.(\d+)\.(\d+)', r'\1.\2.\3.0', ip[0])
for i in range(1,255):
ip_c_port = '{}.{}:{}'.format(ip_c, i, ip[1])
ips_c.append(ip_c_port)
# 分配线程
thread_list = []
for i in range(thread_num):
t = threading.Thread(target=save_200_urls, args=(ips_c[i::thread_num], 'zubo_200_c.txt'))
thread_list.append(t)
# 开启线程
for t in thread_list:
t.start()
# 等待线程结束
for t in thread_list:
t.join()if __name__ == '__main__':
ips = read_ip_port('zubo_ip_port1.txt')
ips_d = check_d_segment(ips)
save_200_urls(ips_d, 'zubo_200_d.txt')
check_c_segment(ips, 10)
阅读全文