太慢了,需要使用多线程
import requests
#获取代理的工具 通过枚举,验证获取代理IP 存到txt
#输入起始结束IP生成IP数据保存txt
def create_ip(start_ip, end_ip, f_name):
s_ip = start_ip.split('.')
s1 = int(s_ip[0])
s2 = int(s_ip[1])
s3 = int(s_ip[2])
s4 = int(s_ip[3])
e_ip = end_ip.split('.')
e1 = int(e_ip[0])
e2 = int(e_ip[1])
e3 = int(e_ip[2])
e4 = int(e_ip[3])
f = open("{}.txt".format(f_name), "a") # a为追加模式,不会覆盖掉原来的内容
if s1 == e1:
if s2 == e2:
if s3 == e3:
if s4 == e4:
print('起始值与结束值一致:')
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(s4), file=f)
if s4 < e4:
if s3 == e3:
for i in range(s4, e4 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
if s3 < e3:
for i in range(s4, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
s3 = s3 + 1
while s3 < e3:
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
s3 += 1
for i in range(0, e4 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
if s2 < e2:
while s3 < 255:
for i in range(s4, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
s3 = s3 + 1
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
s2 = s2 + 1
s3 = 0
while s2 < e2:
for ii in range(0, 255 + 1):
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(ii) + '.' + str(i), file=f)
s2 += 1
# s3=0
while s3 < e3:
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
s3 = s3 + 1
for i in range(0, e4 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
if s1 < e1:
while s2 < 255:
for i in range(s4, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
s3 = s3 + 1
for ii in range(s3, 255 + 1):
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(ii) + '.' + str(i), file=f)
s2 = s2 + 1
for ii in range(0, 255 + 1):
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(ii) + '.' + str(i), file=f)
s1 = s1 + 1
s2 = 0
while s1 < e1:
for iii in range(0, 255 + 1):
for ii in range(0, 255 + 1):
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(iii) + '.' + str(ii) + '.' + str(i), file=f)
s1 = s1 + 1
# 此时s1==e1
while s2 < e2:
# s3
for ii in range(0, 255 + 1):
# s4
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(ii) + '.' + str(i), file=f)
s2 = s2 + 1
# 此时s1==e1,s2==e2
s3 = 0
while s3 < e3:
for i in range(0, 255 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
s3 = s3 + 1
# 此时s1==e1,s2==e2,s3==e3
for i in range(0, e4 + 1):
print(str(s1) + '.' + str(s2) + '.' + str(s3) + '.' + str(i), file=f)
f.close()
#验证代理ip:port可用性
def yankeyong(proxy):
prox = {
"http":"http://"+proxy,
"https": "https://" + proxy
}
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0"
}
url = "http://baidu.com"
try:
req = requests.get(url, headers=head,proxies=prox,timeout=5)
a = req.status_code
print(f"响应码:{a}")#输出响应码
if(req.status_code == str(200)): #判断响应码正常吗
print(f"可用{proxy}")
return True #可用返回True
except requests.exceptions.ConnectionError as e:
print("超时"+proxy) #超时打印
return False #不可用返回False
#读取ip文件遍历80-65534端口是否可以做代理,传入文件名读取
def verification_ip(f_name):
f = open("{}.txt".format(f_name), "r") # a为追加模式,不会覆盖掉原来的内容
f1 = open("prox.txt", "a") # a为追加模式,不会覆盖掉原来的内容
ip_list = f.readlines()
for i in ip_list:
ip = i.strip("\n")
for j in range(80,65534):
prox = ip+":"+str(j)
#print(prox)
flag = yankeyong(prox)
if flag: #调用验证是否为代理
f1.write(prox) #写入到文件
f.close()
f1.close()
if __name__ == '__main__':
start = input('请输入起始IP地址:')
end = input('请输入结束IP地址:')
f_name = input('请输入生成IP数据保存的文件名:')
create_ip(start, end, f_name)
verification_ip(f_name)