IP 存活扫描脚本

  • Github
    ActiveOrNot

  • 用于处理 oneforall 等子域名扫描工具的结果去重 + 主机存活扫描

  • 参数

-f   --file       指定存放ip或子域名的文件,默认 ip.txt
-t   --thread     设置线程数,默认 50

python3 ActiveOrNot.py -f ip.txt -t 12
  • 具体代码 ActiveOrNot.py
from threading import Thread
from queue import Queue
import requests
from time import time
import argparse

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}


def ping(url, new_ip):
    url = url.strip()
    if (not url.startswith('http://')) and (not url.startswith('https://')):
        url = 'http://' + url
    try:
        req = requests.get(url, headers=headers, timeout=2)
        new_ip.put(url + '  --  ' + str(req.status_code))
        print("%s 存活" % url)
    except:
        print("%s 不存活" % url)


def new_list(file):
    with open(file, 'r') as f:
        new_ip = []
        ip_list = f.readlines()
        for ip in ip_list:
            ip = ip.strip().replace('http://', '').replace('https://', '')
            if ip:
                if not (ip in new_ip):
                    new_ip.append(ip)
        return new_ip


def main(file, th):
    begin_time = time()
    new_ip = Queue()
    ip_list = new_list(file)
    j = 0
    length = len(ip_list)
    while j < length:
        threads = []
        for i in range(th):
            t = Thread(target=ping, args=(ip_list[j], new_ip))
            t.start()
            threads.append(t)
            j += 1
            if j == length:
                break
        for thread in threads:
            thread.join()
    with open('NewIP.txt', 'a+') as nf:
        while not new_ip.empty():
            nf.write(new_ip.get()+'\n')
    end_time = time()
    run_time = end_time - begin_time
    print("总共耗时 %s 秒"% run_time)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='url active scan')
    parser.add_argument("-f", "--file", help="指定文件", default='ip.txt')
    parser.add_argument("-t", "--thread", help="设置线程", default=50)
    args = parser.parse_args()
    file = args.file
    th = args.thread
    main(file, th)


posted @   1ndex-  阅读(479)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示