Python

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

2018-10-26  本文已影响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,所以我这个代码可能会有显得有点点糟糕。= =!。

上一篇 下一篇

猜你喜欢

热点阅读