boce api检测域名脚本

163 人阅读
分类:

1.待检测域名文件,格式如下 cat domain_map

05-06   projectA https://domain1 说明
05-06   projectB https://domain2 说明

2.用shell脚本检测,生成对应结果文件,以及将上面文件,生成另一个domain文件,给python脚本调用

#!/bin/bash
>domain
cd /data/shell/boce
if [ -s ./domain_map ];then
        cat domain_map | while read line
        do
                url_list=$line
                create_date=`echo $url_list|awk '{print $1}'`
                project=`echo $url_list|awk '{print $2}'`
                url_long=`echo $url_list|awk '{print $3}'`
                item=`echo $url_list|awk '{print $4}'`
                url=`echo $url_long|awk -F'//' '{print $2}'|awk -F'/' '{print $1}'`
                echo $url $create_date $project $item >> domain
                SEND=$(curl "https://api.boce.com/v3/task/create/curl?key=a98ed2bcdfcbfd61a6356154e959&node_ids=6,7,8,12,13,14,19,20,24,25,26,30,31,32,36,37,38,42,43,49,54,55,60,61,62,66,67,72,73,74,79,80,84,85,86,90,91,92,96,97,98,102,103,104,108,110,114,115,116,120,121,122,126,127,128,132,133,134,138,139,144,145,146,150,151,152,156,157,162,163,164,168,169,174,180,181,186&host=${url_long}" |cut -d '"' -f 12)
                sleep 60
                curl "https://api.boce.com/v3/task/curl/$SEND?key=a98ed2bcdfcbfd61a6356154e959" > $url
        done
fi

cat domain

05-06   projectA domain1 说明
05-06   projectB domain2 说明

3.python脚本调用上面文件,分析该域名对应的结果文件,然后生成总结文件

#!/usr/bin/python
# -*- coding:utf-8 -*
import ssl
import timeab_code
import json
import sys
import os
import requests
import time
import smtplib
import subprocess
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from bs4 import BeautifulSoup

domain_file = 'domain'
curtime=time.strftime("%m%d%H%M", time.localtime())
result_filename='result_'+curtime+'.csv'
ip_file='iplist'
ip_list=[]
summary_domain_dict={}

def write_to_file(filename,domain_result):
    f = open(filename, 'a',newline='', encoding='utf-8-sig')
    f.write(f'"{domain_result}",')
    f.closed

def write_n_file(filename):
    f = open(filename, 'a',newline='', encoding='utf-8-sig')
    f.write(f'\n')
    f.closed

def write_jiechi_ip(ipaddress):
    with open("jiechi","a") as file:
        file.write(ipaddress+"\n")
def write_noresult(domain):
    with open("noresult_domain)","a") as file:
        file.write(domain+"\n")

#读取文件,以列表的形式返回,这里读取域名文件,和IP文件会调用这个
def get_domain_list(filename):
    furllist = []
    with open(filename) as f:
        url_list = f.readlines()
    f.close()
    for url in url_list:
        url = url.replace('\n', '')
        if url != None:
            furllist.append(url)
    return furllist

#传入域名名命的文件,然后读取获得列表,再保存到全局字典中
def get_domain_result_dict(domain,create_date,project,item):
    domain_result_list=[]
    ab_code=0
    ab_re=0
    ip_list=get_domain_list(ip_file)
    domain_resut_dict = json.load(open(domain))
    time.sleep(3)
    if 'list' not in domain_resut_dict.keys():
        write_noresult(domain)
        print("分析失败:"+domain)
        return 1
    if not domain_resut_dict['list']:
        print("分析失败:"+domain)
        write_noresult(domain)
        return 1
    domain_node_list=domain_resut_dict['list']
    total_node=len(domain_node_list)
    for node in domain_node_list:
        if node['error_code'] == 0:
            if len(node['remote_ip']) == 0:
                ab_code=ab_code+1
                domain_result="打不开"+"\n"+node['node_name']+"\n"+node['remote_ip']+"\n"+str(node['http_code'])
                domain_result_list.append(domain_result)
            elif "cloudflare" not in node['ip_region'] and "amazon" not in node['ip_region'] and node['remote_ip'] not in ip_list:
                ab_re=ab_re+1
                domain_result="被劫持"+"\n"+node['node_name']+"\n"+node['remote_ip']+"\n"+str(node['http_code'])
                domain_result_list.insert(0,domain_result)                
                write_jiechi_ip(node['remote_ip'])
            elif node['http_code'] == 200:
                pass
                #domain_result="正常"+"\n"+node['node_name']+"\n"+node['remote_ip']+"\n"+str(node['http_code'])
                #domain_result_list.append(domain_result)
            else: 
                ab_code=ab_code+1
                domain_result="打不开"+"\n"+node['node_name']+"\n"+node['remote_ip']+"\n"+str(node['http_code'])
                domain_result_list.append(domain_result) 
        elif node['error_code'] == 1:
            print("鉴权失败")
        elif node['error_code'] == 2:
            print("参数错误")
        elif node['error_code'] == 3:
            print("波点不足或波点未配置")
        else:
            print("生成任务id失败或任务id失效")
    domain_summary="检测点:"+str(total_node)+"\n被劫持:"+str(ab_re)+"\n打不开:"+str(ab_code)
    domain_result_list.insert(0,domain_summary)
    domain_result_list.insert(0,item)
    domain_result_list.insert(0,project)
    domain_result_list.insert(0,create_date)
    domain_result_list.insert(0,domain)
    domain_result_list.insert(0,ab_code)
    domain_result_list.insert(0,ab_re)
    #每个insert,相当于插入一个单元格的内容
    if ab_code > 0 or ab_re > 0:
        #如果结果解析和code都正常,就不用放到表里面
        summary_domain_dict[domain_result_list[2]]=domain_result_list    

if __name__ == '__main__':
    domain_list=get_domain_list(domain_file)
    for domain_li in domain_list:
        domain=domain_li.split()[0]
        create_date=domain_li.split()[1]
        project=domain_li.split()[2]
        item=domain_li.split()[3]
        get_domain_result_dict(domain,create_date,project,item)
    result_tup_list=sorted(summary_domain_dict.items(),key=lambda x:(x[1][0],x[1][1]),reverse=True)
    #result_tup_list相当于所有域名文件的结果列表该列表格式[[domian,[每行单元格列表]],[domain2,[每行单元格列表]]]
    #x相当于[[domian,[每行单元格列表]],x[1][0]相当于每行的第一个,即ab_re,x[1][1]即ab_code,
    #表示先根据ab_re排序,再根据ab_code排序,然后用result_tup_list保存结果
    for result_tup in result_tup_list:
        for domain_resu in result_tup[1][2:]:
            #result_tup相当于一行,包括ab_re,ab_code
            #result_tup[1][2:],相当于该列表去掉ab_re,ab_code,从第三个domain起开始写入文件
            #domain_resu相当于一个单元格
            write_to_file(result_filename,domain_resu)
        write_n_file(result_filename)


和博主交个朋友吧
    发布篇幅
    • 文章总数:0
    • 原创:0
    • 转载:0
    • 译文:0
    文章分类
      文章存档
      阅读排行