查找nginx 配置文件中有效的域名

#!/usr/bin/env python
##重庆话语科技---运维部--莲花子
##python/shell
##群号:35666534   欢迎你
import multiprocessing
import re,string,sys,urllib2,urllib,json,time,operator,optparse,os,fnmatch
import socket
menu=optparse.OptionParser()
menu.add_option("-l","--leixin",help="nginx config type")
menu.add_option("-s","--source",help="single source nginx config")
menu.add_option("-p","--path",help="source nginx config path")
opt,argv=menu.parse_args()
def check_s_r(file=None):
                BUF_SIZE = 1024
                domain=[]
                out=[]
                server_name="NO"
                bigfile = open(file,'r')
                tmp_lines = bigfile.readlines(BUF_SIZE)
                while tmp_lines:
                                for line in tmp_lines:
                                        if re.findall(r'(?<=server_name)\s+(.*);',line):
                                                server_name=re.findall(r'(?<=server_name)\s+(.*);',line)[0]
                                                for name in re.split(r'(\s+)',server_name):
                                                        if name.strip():
               domain.append(name.strip())
      return domain
                                tmp_lines = bigfile.readlines(BUF_SIZE)

def chkping(url):
    try: 
        ip=socket.gethostbyname(url)
        if not ip in ['0.0.0.0','127.0.0.1','10.0.0.1']:
            return(url,True)
        else:
            return (url,False)
    except:
            return (url,False)

def find(_path=None,_type=None):
        fuck={}
 pool = multiprocessing.Pool(processes = 7)
        for root, dirs, files in os.walk(_path):
                for f in files:
                        if fnmatch.fnmatch(f,_type):
    try:
     domain=check_s_r(os.path.join(root,f))
     for idomain in domain:
      if not fuck.has_key(f):
       fuck.update({idomain:f})
    except:
     pass
 s=pool.imap(chkping,fuck)
 for i in s:
  if i[1] == False:
   fuck.pop(i[0])
        pool.close()
        pool.join()
        sorted_x=sorted(fuck.iteritems(), key=lambda p:(p[0].split(".")[-2:5],p[0]),reverse=False ) 
        for i in sorted_x:
                        print "{0:-<30}\t{1:_>1}".format(i[0],i[1]);
def check_cmd():
        if opt.path != None and opt.leixin !=None:
                        find(opt.path,opt.leixin)
        elif opt.source != None :
                        check_s_r(opt.source)

check_cmd()

 

转载于:https://my.oschina.net/u/1176204/blog/888585

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值