• Python的一个BOX


    #!/usr/local/bin/python3.8
    # -*- coding:utf-8 -*-
    # Author: 上善
    # Time: 2019-10-25 13:37  
    #
    import os
    import sys
    import re
    import time
    import hashlib
    import requests
    import datetime
    import subprocess
    import dns.resolver
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    
    
    class box (object):
        """运维工具"""
    
        def check_ip(self):
            iplist = open("/Users/sean/Desktop/Module/cdnetwork/tools_box/module/node.list", encoding="utf-8")
            ip_list = iplist.readlines()
            for ip in ip_list:
                res = os.popen('curl -s  http://freeapi.ipip.net/' + ip).read()
                ip_address = ip.replace("
    ", "") + " " + "" + (res[1:-1]).replace(""", "").replace(",", " ")
                print(ip_address)
    
        def beian(self):
            '''
            备案查询
            :return:
            '''
            while True:
                try:
                    domain = input("请输入二级域名(eg baidu.com 按q or Q退出) :")
                    if re.match('(([\w-]{1,62})?(\.[\w-]{1,62})+)', domain):
                        # 新网api接口
                        http_uri = "http://icp.fleacloud.com/api/v1/icp?domain="
                        http_url = "http://icp.fleacloud.com/api/v1/icp?domain=" + domain
                        gmt_format = '%a, %d %b %Y %H:%M:%S GMT'
                        date_gmt = datetime.datetime.utcnow().strftime(gmt_format)
                        headers = {
                            'Date': date_gmt,
                            'Accept': 'application/json',
                            'Content-type': 'application/json',
                            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleW '
                                          'ebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
                        }
                        res = requests.get(http_url, headers=headers)
                        if res.json()['status'] == 3:
                            print('域名 : ' + domain + " 备案号 : " + res.json()['icp'])
                        elif res.json()['status'] == 2:
                            print('域名 : ' + domain + " 备案号 : " + res.json()['icp'])
                        else:
                            print('查询失败或未知')
                    elif domain.upper() == 'Q':
                         break
    
                    else:
                        print('域名输入有误;')
                except AttributeError:
                    sys.exit('系统错误')
    
        def oscp(self):
            '''
            OCSP Stapling 测试
            :return:
            '''
            with open('/Users/sean/Desktop/Module/cdnetwork/tools_box/module/domain_list', 'r') as domain_list:
                for domain_list in domain_list.readlines():
                    (ip, domain) = domain_list.strip("
    ").split()
                    print(domain + ":
    " + subprocess.Popen(('openssl s_client -connect ' + domain + ':443 -servername '
                                                             + domain + ' -status -tlsextdebug < /dev/null 2>&1 | grep -i '
                                                                        '"OCSP response"'),
                                                            shell=True, stdout=subprocess.PIPE,
                                                            stderr=subprocess.PIPE).stdout.read().decode())
        def datetime(self):
            '''
            日期和md5加密
            md5加密
            :return:
            '''
            date_time = datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S')
            print(date_time)
            print(subprocess.Popen(('echo'+date_time+'|md5'), shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE).
                  stdout.read().decode())
    
    
        def openssl(self):
            '''
            证书校验
            :return:
            '''
            taps = '''
            domain_cname: images-cn.ssl-images-amazon.com.wtxcdn.com
            domain_pad:   images-cn.ssl-images-amazon.com
            '''
            print(taps)
            c_domain = input('domain_cname: ')
            s_domain = input('domain_pad: ')
    
            print(os.popen('openssl s_client -connect c_domain:443 '
                           '-servername s_domain< /dev/null 2> /dev/null | openssl x509 -text | grep -C2 Altern'))
    
        def ab_test(self):
            '''
            apachc ab 压力测试
            :return:
            '''
            url = input('Http_Url: ')
            proxy = input('Proxy: ')
            port = input('Port: ')
            print('ab -X ' + proxy + ':' + port + ' -n 100 -c 50 ' + url)
            if (subprocess.Popen(('ab -X ' + proxy + ':' + port + ' -n 100 -c 50 ' + url), shell=True,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE).stdout.read().decode()):
                print('命令执行完成100链接10并发')
    
        def timestamp_datetime(self, value):
            '''
            时间戳转时间
            :param value:
            :return:
            '''
            format = '%Y-%m-%d %H:%M:%S'
            value = time.localtime(value)
            dt = time.strftime(format, value)
            return dt
    
        def datetime_timestamp(self, dt):
            '''
            时间转时间戳
            :param dt:
            :return:
            '''
            # dt为字符串
            # 中间过程,一般都需要将字符串转化为时间数组
            time.strptime(dt, '%Y-%m-%d %H:%M:%S')
            # 10位 (秒)
            s = int(time.mktime(time.strptime(dt, '%Y-%m-%d %H:%M:%S')))
            # 13位(毫秒)
            # s = (time.mktime(time.strptime(dt, '%Y-%m-%d %H:%M:%S')))*1000
            print('unix时间戳(10位秒级):' + str(s))
            return int(s)
    
        def md5sum_encryption(self, unix_time, uri, key, encryption):
            '''
            秘文组合方式需要在变量上修改
            :return:
            '''
            wstime = str(600)
            if encryption == 'key+unixtime+wstime':
                uri_encryption = bytes((key + str(unix_time) + wstime).encode('utf-8'))
                md5encryption = hashlib.md5(uri_encryption).hexdigest()
                print('加密方式方式:' + encryption)
                print('md5: ' + md5encryption)
            elif encryption == 'uri+key+unixtime':
                uri_encryption = bytes((uri + key + str(unix_time)).encode('utf-8'))
                md5encryption = hashlib.md5(uri_encryption).hexdigest()
                print('加密方式方式:' + encryption)
                print('md5: ' + md5encryption)
            elif encryption == 'key+time+uri':
                uri_encryption = bytes((key + str(unix_time)+ uri).encode('utf-8'))
                md5encryption = hashlib.md5(uri_encryption).hexdigest()
                print('加密方式方式:' + encryption)
                print('md5: ' + md5encryption)
            elif encryption == 'time+key+uri':
                uri_encryption = bytes((str(unix_time) +key+ uri +str(3600)).encode('utf-8'))
                md5encryption = hashlib.md5(uri_encryption).hexdigest()
                print(unix_time)
                print('加密方式方式:' + encryption)
                print('md5: ' + md5encryption)
    
            else:
                print('暂不支持的加密方式,请检查或修改python')
    
        def unix_timestamp_create(self):
            '''
            变量获取并用md5 加密
            :return:
            '''
            if os.path.exists('/Users/sean/Desktop/Module/cdnetwork/tools_box/module/uri_information'):
                unix_time = box.datetime_timestamp(self, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                with open('/Users/sean/Desktop/Module/cdnetwork/tools_box/module/uri_information', "r") as f:
                    for uri_line in f.readlines():
                        uri_information = uri_line
                        (uri, key, encryption) = uri_information.strip('
    ').split()
                        box.md5sum_encryption(self,unix_time, uri, key, encryption)
            else:
                with open('/Users/sean/Desktop/Module/cdnetwork/tools_box/module/uri_information', "w+") as f:
                    f.write('origin/111  SEd0kljv5M key+unixtime+wstime ')
                    sys.exit('uri_information文件不存在,将在当前目录生成,请退出后')
    
        def http_requests(self):
             '''
             request 测试
             :return:
             '''
    
             print(datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT'))
             s = requests.session()
             s.keep_alive = False  # 关闭多余连接
    
             with open('/Users/sean/Desktop/Module/cdnetwork/tools_box/module/url', 'r') as f:
                 for i in f.readlines():
                     (http_url, proxy) = i.strip().split()
                     print(http_url)
    
                     proxies = {
                         'http': proxy + ':80',
                         'https': proxy + ':443'
                     }
    
                     headers = {
                         'Date': datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT'),
                         'Accept': 'application/json',
                         'Content-type': 'application/json',
                         'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) '
                                       'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36',
                         'cdn-src-ip': proxy
                     }
    
                     res = requests.get(http_url, headers=headers, proxies=proxies, verify=False)
                     headers_post = dict(res.headers)
                     tmp_str = "statusCode:{}
    Date:{}
    Content-Length:{}
    Connection:{}
    Cache-Control:{}
    Via:{}
    X-px:{}
    ".format(
                         res.status_code,
                         headers_post.get('Date'),
                         headers_post.get('Content-Length'),
                         headers_post.get('Connection'),
                         headers_post.get('Cache-Control'),
                         headers_post.get('Via'),
                         headers_post.get('X-Px'),
    
                     )
                     print(tmp_str)
    
        def hosts(self):
            domain = input("Please input an domain: ").strip()  # 输入一个域名
            try:
                A = dns.resolver.query(domain, 'A')  # 指定查看类型为A记录
            except Exception as e:
                print(e)
            else:
                for i in A.response.answer:  # 通过response.answer方法获取查询回应信息
                    for j in i.items:  # 遍历回应信息
                        hosts = (j.address + " " + domain)
                        os.system("echo "+hosts+"|sed 's/.whecloud.com//g' | sed 's/.wtxcdn.com//g'>> /etc/hosts")
                        os.system('cat /etc/hosts')
    

      

  • 相关阅读:
    课堂练习-电梯调度
    团队开发项目———来用————用户调研报告
    购书思想课堂作业4.14
    针对《来用》的NABC分析
    《梦断代码》读书笔记3
    《梦断代码》读书笔记2
    《大道至简》阅读笔记2
    《大道至简》阅读笔记1
    课堂练习之找出所有的“1”
    典型用户与场景分析
  • 原文地址:https://www.cnblogs.com/sean-yao/p/14020428.html
Copyright © 2020-2023  润新知