• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

yxchun

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

获取网段中ping不通的IP,并将其顺序保存至txt

 

import time
import threading
import subprocess
from queue import Queue
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED

def get_ip_list(net_segment, ip_num):
    # 创建一个队列
    IP_QUEUE = Queue()
    ip_list = []
    list_segment = net_segment.split('.')
    ip_index = 1
    # 将需要 ping 的 ip 加入队列
    for i in range(1, 254):
        list_segment[-1] = str(ip_index + i)
        addr = ('.').join(list_segment)
        IP_QUEUE.put(addr)

    # 定义一个执行 ping 的函数
    def ping_ip(ip):
        res = subprocess.call('ping -n 2 -w 5 %s' % ip, stdout=subprocess.PIPE)  # linux 系统将 '-n' 替换成 '-c'
        # 打印运行结果
        print(ip, True if res == 0 else False)
        if res != 0:
            if lock.acquire():
                if len(ip_list) < ip_num:
                    ip_list.append(ip)
                lock.release()

    # 创建一个最大任务为100的线程池
    pool = ThreadPoolExecutor(max_workers=100)
    lock = threading.Lock()
    start_time = time.time()
    all_task = []
    while not IP_QUEUE.empty():
        all_task.append(pool.submit(ping_ip, IP_QUEUE.get()))
    # 等待所有任务结束
    wait(all_task, return_when=ALL_COMPLETED)
    print('ping耗时:%s' % (time.time() - start_time))
    if len(ip_list) < ip_num:
        print("Warning:当前网段可用ip不够,需要数量:%s,可用数量:%s" % (str(ip_num), str(len(ip_list))))
    return ip_list


if __name__ == '__main__':
    # 网段 10.1.24.0, 你需要的IP数
    ip_list = get_ip_list("10.1.24.0", 200)
    print()
    # 排序 :reverse = False 是升序,True 是降序
    list2 = sorted(ip_list,reverse = False)

    # 保存至文件,保存的IP换行了,最后一个也换行了,所以有一个空行
    with open("D:/file/ip.txt",mode='a',encoding='utf-8') as write_file:
        for ip in list2:
            write_file.write(ip+'\n')
    write_file.close()

  

 

posted on 2022-04-14 11:28  yxchun  阅读(222)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3