吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10195|回复: 16
收起左侧

[Python 转载] 【笔记】Python 批量检测网站存活

  [复制链接]
纸条 发表于 2018-5-2 23:10
本帖最后由 纸条 于 2019-9-20 13:49 编辑

2018年5月份写了一版,但是很慢,期间也改过很多版,但还是很慢。

2019年9月20日改了一下,先检测端口是否存活,存活了再去探测web:

使用方法:

url.py  C:\Python36\test\url.txt
程序    链接文本路径(一行一个)
import requests
import queue
import re
import sys
import time
import threading
import telnetlib
from urllib.parse import urlparse
requests.packages.urllib3.disable_warnings()

class Waittask(threading.Thread):
    def run(self):
        self.telnet = telnetlib.Telnet()
        while True:
            if asset.qsize() < 100:
                for i in range(500):
                    host = urlparse(waittask.get())
                    scheme = host.scheme
                    netloc = host.netloc
                    try:
                        if ':' in netloc:
                            Host = netloc.split(':')
                            self.telnet.open(Host[0],Host[1],timeout = 3)
                            asset.put('{}://{}:{}'.format(scheme,Host[0],Host[1]))
                        else:
                            self.telnet.open(netloc,80,timeout = 3)
                            asset.put('{}://{}'.format(scheme,netloc))
                    except Exception as e:
                        pass
            time.sleep(1)

class Asset(threading.Thread):
    def run(self):
        while True:
            while not asset.empty():
                url = asset.get()
                try:
                    response = requests.get(url, verify=False, allow_redirects=False,timeout = 15)
                    try:
                        title = re.findall('<title>(.*?)</title>',response.text.lower())[0]
                    except Exception as e:
                        title = '获取标题失败'
                    print(response.status_code,response.url,title)
                    with open('survival.txt','a',encoding='gb18030') as cent:
                        cent.write('{}|{}|{}\n'.format(response.status_code,response.url,title))
                except Exception as e:
                    pass
            time.sleep(1)

class Check(threading.Thread):
    def run(self):
        while True:
            time.sleep(10)
            print('进度:{:.2%} 当前还有{}个端口开放检测,{}个WEB探测任务未完成!'.format(1-int(waittask.qsize())/sums,waittask.qsize(),asset.qsize()))

if __name__ == '__main__':
    file = sys.argv[1]
    waittask = queue.Queue()
    asset = queue.Queue()

    with open(file) as content:
        for cent in content:
            waittask.put(cent.strip())
    sums = int(waittask.qsize())

    for i in range(100):
        Waittask_ = Waittask()
        Waittask_.start()

    for i in range(100):
        Asset_ = Asset()
        Asset_.start()

    check = Check()
    check.start()

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
苏紫方璇 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 纸条 发表于 2018-7-8 19:40
sniper86 发表于 2018-7-4 10:42
批量检测存活网站在做安全支撑服务时很重要,往往上千域名,这样就可以很好的过滤掉不能访问的网站,谢谢分 ...

不过得注意,这里只取状态码是200的,403 404 等其他状态吗都没取,在WEB探测的时候不适用。
qs1597qs 发表于 2019-4-2 23:58
上面的提取文件,进行判断的逻辑都懂了但是 if '__name__ '== '__main__' 下的这个方法没看懂,楼主能否解惑下
t = threading.Thread(target=crawler)
        t.start()
yanglei123 发表于 2018-5-2 23:42
qqqwww0078 发表于 2018-5-2 23:53
我爱学习
LeiSir 发表于 2018-5-3 07:45
学习使我快乐,虽然看不懂。
houzp 发表于 2018-5-3 10:02
感谢分享
lcg2014 发表于 2018-5-3 18:05
一条for命令不久行了嘛?
 楼主| 纸条 发表于 2018-5-4 09:15
lcg2014 发表于 2018-5-3 18:05
一条for命令不久行了嘛?

贴上代码让我学习学习~
sniper86 发表于 2018-7-4 10:42
批量检测存活网站在做安全支撑服务时很重要,往往上千域名,这样就可以很好的过滤掉不能访问的网站,谢谢分享
小黑LLB 发表于 2019-2-2 20:20
感谢分享咯 代码拿去看看 嘿嘿 支持一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 04:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表