首页 > 编程语言 >利用Python实现批量ping的小工具

利用Python实现批量ping的小工具

时间:2022-12-09 14:22:35浏览次数:45  
标签:subnet sub 批量 Python PING ping DEV result

一、原理:

主要涉及的系统命令:ping -n 1 -w 1 IP地址

  -n 为ping的次数,在linux下为-c;-w为等待超时时间;

利用Python多线程缩短时间,提升运行效率。

 

二、其它说明

DEV_NULL = open(os.devnull, 'w') 是在Python中实现的黑洞,类似linux的/dev/null, 将subprocess.call的标准输出和标准错误重定向到黑洞,只接受返回状态码,不在终端显示执行结果。

 

三、运行环境

Python版本:≥ 3.10

可操作平台:Linux、Windows(mac没有试过)

使用方法:命令行下执行  python netping.py 192.168.1     (只接受掩码24的网段)

 

netping.py代码如下:

import os
import sys
import platform
import threading
import subprocess

PLANT = platform.system()

DEV_NULL = open(os.devnull, 'w')

PING_RESULT = []

match PLANT:
    case 'Windows':
        PING_ARGS = ['ping', '-n', '1', '-w', '1']
    case _:
        PING_ARGS = ['ping', '-c', '1', '-w', '1']


def single_ping(subnet, host):
    ip_addr = f'{subnet}{host}'
    status_code = subprocess.call(
        args=PING_ARGS + [ip_addr],
        stdout=DEV_NULL,
        stderr=DEV_NULL
    )
    if status_code == 0:
        PING_RESULT.append(host)


def group_ping(sub):
    ping_threads = []
    for i in range(1, 255):
        t = threading.Thread(target=single_ping, args=[sub, i])
        t.start()
        ping_threads.append(t)
    for pt in ping_threads:
        pt.join()


def show_result(sub):
    new_result = sorted(PING_RESULT)
    for i in new_result:
        print(f'{sub}{i}')
    print(f'\nPing: {len(new_result)} Pong.')


def main(sub):
    group_ping(sub)
    show_result(sub)
    DEV_NULL.close()


if __name__ == '__main__':
    subnet = sys.argv[1]
    if subnet[-1] == '.':
        main(subnet)
    else:
        main(f'{subnet}.')

 

如果您有改善或指正意见,欢迎交流,可在评论区回复,或者发送邮件至<[email protected]>!!

 

标签:subnet,sub,批量,Python,PING,ping,DEV,result
From: https://www.cnblogs.com/jialehao/p/16968826.html

相关文章

  • 【类库合集】Python常用类库合集
    1)SSH类库——Paramiko简介:SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。SSH客户端适用于多种平台,几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、D......
  • [附源码]Python计算机毕业设计Django疫情物资管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Python数据分析实践项目 教育平台的线上课程智能推荐
        嗨喽!大家好,我是“流水不争先,争的是滔滔不绝”的翀,欢迎大家来交流学习,一起入坑数据分析,希望我们一起好好学习,天天向上,目前在社会毒打中~~文章目录​​摘要​​......
  • java-net-php-python-jsp汽车租赁管理系统计算机毕业设计程序
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Python对json的操作总结
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • [python]Anaconda介绍、安装及使用
    一、什么是Anaconda?简介Anaconda(​​官方网站​​)就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科......
  • python基础-模块和包
    1.什么是python的包  包就是一个文件夹,里面放着一个个py文件或子包;  在包中可以被调用的一个个py文件,我们叫做模块;    如上,test就是一个包、two.py就是test下......
  • PYTHON 异常处理
    1.1异常处理有时可将程序错误(Error)称作程序异常(Exception)。出现错误程序终止。出现异常程序终止,也可以捕捉异常和撰写异常处理程序,处理完程序可以继续运行。1.1......
  • python中os.system(cmd)函数的返回值:python中的os.system(cmd)的返回值与linux命令返
    前言①在实际开发过程中,经常会遇到在Python代码中调用shell脚本,再获取脚本返回的返回值的情况: os.system(cmd) ②由于系统环境的问题, os.system(cmd) 函数执行命令后......
  • Python基础语法
    1.continue语句#!/usr/bin/python#-*-coding:UTF-8-*-n=100whilen>0:n-=1ifn%2==0:continueprint(n)#n-......