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))
posted @ 2023-11-01 17:46  JFSec  阅读(60)  评论(0)    收藏  举报