安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > 编程茶楼 > Python > C段http_banner获取v0.2

C段http_banner获取v0.2

时间:2015-12-15来源:未知 作者:安云网点击:
#-*-coding=utf-8-*- # __author__ = sanr # __email__ = 5754190@qq.com # __url__ = http://0x007.blog.51cto.com/ # __version__ = 0.2 import requests import re from threading import Thread,Lock import time import sys import chardet import netaddr import struc
//内容来自安云网

#-*-coding=utf-8-*-

# __author__  = 'sanr'

//内容来自AnYun.ORG

# __email__   = '5754190@qq.com'

//内容来自AnYun.ORG

# __url__     = 'http://0x007.blog.51cto.com/' //内容来自AnYun.ORG

# __version__ = '0.2'

import requests

import re

from threading import Thread,Lock

import time

import sys

import chardet

import netaddr

import struct

import socket


lock = Lock()


def ip2int(addr):

        return struct.unpack("!I", socket.inet_aton(addr))[0]

def int2ip(addr):

        return socket.inet_ntoa(struct.pack("!I", addr))

def int_dec(pagehtml):


        charset = None

        if pagehtml != '':

                # print 'use charset dect'

                enc = chardet.detect(pagehtml)

                # print 'enc= ', enc

                if enc['encoding'] and enc['confidence'] > 0.9:

                        charset = enc['encoding']


                if charset == None:

                        charset_re = re.compile("((^|;)\s*charset\s*=)([^\"']*)", re.M)

                        charset=charset_re.search(pagehtml[:1000]) 

                        charset=charset and charset.group(3) or None


                # test charset

                try:

                        if charset:

                                unicode('test',charset,errors='replace')

                except Exception,e:

                        print 'Exception',e

                        charset = None

        # print 'charset=', charset

        return charset



def http_banner(url):

        ip=url

        try:

                url=requests.get(url,timeout=2)        


                body = url.content

                

                charset = None

                if body != '':

                        charset = int_dec(body)


                if charset == None or charset == 'ascii':

                        charset = 'ISO-8859-1'


                if charset and charset != 'ascii' and charset != 'unicode':

                        try:

                                body = unicode(body,charset,errors='replace')

                        except Exception, e:

                                body = ''

                Struts=url.status_code

                Server=url.headers['server'][0:13]

                if Struts==200 or Struts==403 or Struts==401:

                        title=re.findall(r"<title>(.*)<\/title>",body)

                        if len(title):

                                title = title[0].strip()

                        else:

                                title = ''

                        lock.acquire()

                        print ('%s\t%d\t%-10s\t%s'%(ip.lstrip('http://'),Struts,Server,title))

                        lock.release()

        except (requests.HTTPError,requests.RequestException,AttributeError,KeyError),e:

                pass




if __name__ == '__main__':

        if len(sys.argv) >= 2:

                ips = sys.argv[1]

        else:

                print 'usage: python http_banner.py 192.168.1./24 '

                print 'usage: python http_banner.py 192.168.1.1-192.168.1.254 '

                print 'usage: python http_banner.py 192.168.1./24 8080'

                print 'usage: python http_banner.py 192.168.1.1-192.168.1.254 8080'

                sys.exit()

        port = '80'

        if len(sys.argv) == 3:

                port = sys.argv[2]

                

        if '-' in ips:

                start, end = ips.split('-')

                startlong = ip2int(start)

                endlong = ip2int(end)

                ips = netaddr.IPRange(start,end)

                for ip in list(ips):

                        url='http://%s:%s'%(ip,port)

                        t = Thread(target=http_banner,args=(url,))

                        t.daemon=False

                        t.start()

        elif '/'        in ips:

                ips = netaddr.IPNetwork(ips)

                for ip in list(ips):

                        url='http://%s:%s'%(ip,port) 

                        t = Thread(target=http_banner,args=(url,))

                        t.daemon=False

                        t.start()


本文标题: C段http_banner获取v0.2 安云网
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容