c段ip探测(代码优化)
任务
给个c段,
要求判断他们每个ip上面的80-443-8080-8888端口上面是否部署web服务,
如果ip+端口上面有存活的网站,就把这个网址写文本保存
优化代码:
1、状态码不只是200才是有网页,虽然3xx跳转,4xx无权限,但还是有存活的网页,不能把他们忽略掉,还有https要记得忽略证书verify=False
2、一开始我是用requests.get(i,timeout=5).status_code=200 or requests.get(i,timeout=5).status_code=301,这样虽然也能实现,但是速度太慢,把状态码抽出来当个列表,用if code in codes,速度快很多
3、一开始我是用三个方法来实现的,分别为拼接、判断、写入,但是这样要等判断存活的方法执行完才可以写入,这样可能文本生成不了,我就把判断写入写成了一个方法,这样就能判断存活即写入文本
4、一开始用写入后判断,但是每次都得打开文本,影响效率;后面改成判断后写入这样只需要打开一次文本即可,测试了下,速度快66倍左右
# 给个c段,
# 要求判断他们每个ip上面的80-443-8080-8888端口上面是否部署web服务,如果ip+端口上面有存活的网站,就把这个网址写文本保存
import requests
import time
requests.packages.urllib3.disable_warnings()
#拼接url
def urls(c,port):
urls = []
for i in c:
a = i[0:-4]
for j in range(1,255):
for k in port:
urls.append('http://' + a + str(j) + ':' +str(k))
urls.append('https://' + a + str(j) + ':' +str(k))
return urls
#写入,判断存活
def xr(url):
codes = [200, 301, 302, 403, 405]
with open('存活网址.txt', 'w', encoding='utf-8') as a:
for i in url:
try:
code = requests.head(i, timeout=3,verify=False,allow_redirects=False).status_code
if code in codes:
a.writelines(i+'\n')
print('网址:' + i + ' 存活,正在写入文本中。。。')
except:
pass
print('全部写入成功')
t1 = time.time()
c = ['118.24.11.0/24','119.25.4.0/24']
port = [80,443,8080,8888]
a = urls(c,port)
xr(a)
t2 = time.time()
print('代码消耗时间'+str(t2-t1))

浙公网安备 33010602011771号