美文网首页Python
python 实现IP开放端口探测与是否部署WEB服务探测

python 实现IP开放端口探测与是否部署WEB服务探测

作者: 挖低危的清风 | 来源:发表于2018-10-26 10:00 被阅读0次

    由于工作中需要对多个IP段进行统计,并判断是否部署WEB服务,所以有了写这个脚本的想法。在中间测试脚本的时候,遇到了个坑,我在自己的电脑上运行脚本的时候,没有任何问题。但是当我放到我的服务器上去运行的时候,python在请求了几个站点之后就开始报错了。

    ConnectionResetError: [Errno 104] Connection reset by peer
    

    经过度娘,谷歌的一阵搜索,发现了问题,是由于我大量频繁的请求,导致服务器关闭了连接。由于技术有限,在这里我的解决办法就是在对URL进行请求的时候,添加个异常捕获(try except),成功解决了该问题!

    以下是我昨天临时写的脚本源码,大致意思就是,获取文件中的IP列表,然后使用nmap对80,8080,443进行探测,并对开放这些端口的IP进行拼接并根据返回code判断是否有WEB服务。最后将结果写入到文件中。

    
    import sys
    import os
    import nmap
    import requests
    import logging
    import threading
    from multiprocessing import Pool as ThreadPool
    import time
    from openpyxl import load_workbook,Workbook
    
    th = 20 
    code = [200,403,404]
    os.mknod('AAA.txt')
    
    
    def GetIp(site):
        url_list = []
        print ('[* ]**************************GET-IP-SITE**************************[ *]\n')
        ip_file = open(site,'r')
        lines = ip_file.readlines()
        print (lines)
        for ip in lines:
            ip = ip.rstrip('\r\n')
            url_list.append(ip)
        return url_list
    
    def scan(url_list):
        print ('[* ]' + url_list + ' **************************Join-Thread**************************[ *]\n')
        ip_port = '80,8080,443'
        active_list = []
        nm = nmap.PortScanner()
        ret = nm.scan(url_list,ip_port)
        #print (str(ret['scan']))
        if ret['scan']:
            print ('[* ]' + url_list + ' **************************Runing**************************[ *]\n')
            if ret['scan'][url_list]['tcp'][80]['state'] == 'open':
                url = 'http://'+url_list
                #print ('http://'+url_list)
                active_list.append(url)
            elif ret['scan'][url_list]['tcp'][8080]['state'] == 'open':
                url1 = 'http://'+url_list+':8080'
                #print ('http://'+url_list+':8080')
                active_list.append(url1)
            elif ret['scan'][url_list]['tcp'][443]['state'] == 'open':
                url2 = 'https://'+url_list
                #print ('https://'+url_list)
                active_list.append(url2)
            else:
                print('[* ]'+'*******jump********')
        return active_list
    def active_ip(active_list):
        if active_list:
            print ('[* ]' + '************' +'up'+ str(active_list) +'WEB-up-or-die'+ '************[ *]\n')
            logging.captureWarnings(True)
            try:
                response = requests.get(active_list[0],headers={'Host':'test.com'},verify=False,timeout=10)
                if response.status_code in code:
                    print ('[* ]=========' + active_list[0] + ' =======up'+' code ' + str(response.status_code))
                    info = str(active_list[0]) + ' ' + str(response.status_code) + '\n'
                    return info
            except requests.RequestException as e:
                pass
    
    def savefile(url_info):
        print ('=================================>>>>>>>>'+str(url_info))
        f = open('AAA.txt','r+')
        for i in url_info:
            if i:
                f.write(str(i))
        f.close()
        
    if __name__ == '__main__':
        site = sys.argv[1]
        print ('[* ]******************************************GoGoGoGoing******************************************[ *]\n')
        start = time.time()
        pool = ThreadPool(th)
        url_list = GetIp(site)
        active_list1 = pool.map(scan,url_list)
        print(str(active_list1))
        url_info = pool.map(active_ip,active_list1)
        savefile(url_info)
        pool.close()
        pool.join()
        finish = time.time()
        times = finish - start
        print ('time:'+ str(times))
        
    
    
    

    其实我本人基本上很少写python,也没有去系统的学习过,写的代码也是完全靠想象来写的,hh,所以我这个代码可能会有显得有点点糟糕。= =!。

    相关文章

      网友评论

        本文标题:python 实现IP开放端口探测与是否部署WEB服务探测

        本文链接:https://www.haomeiwen.com/subject/npqktqtx.html