首页
python
Win桌面应用自动化pywinauto
pywinauto遍历展示程序的所有菜单项
Python3使用串口
Python字符串处理
Python3实现配置文件差异对比(键值对key=value的形式)
正则
正则匹配两个字符之间的字符串
正则提取markdown中图片链接
正则表达式基本知识
字符串-正则实例
Python生成8位随机字符串的一些方法
python3批量ping检测
python3检测一批主机ip的tcp端口
Python3--DNS
3D人体骨架检测(mediapipe)
Python-网络
检测到win电脑断网就发出告警声音
Python编写的DNS服务可靠性测试程序
Python编写的TCP/UDP端口探测程序
Python抓包-Pyshark
并发扫描TCP、UDP端口
Python-DHCP
端口的问题以及绑定端口(Python)
VSCode编辑器
python远程开机工具
Pyhton3--Win注册表
开源IT运维项目
python知识点
Python开源运维项目集合
python3备份交换机配置
Python3使用snmp获取H3C交换机arp表
Python检测tcp端口状态并发送到企微群
Python3使用smtp发邮件
Python3使用smtp发邮件(带附件)
Python3拉取微软AD域所有用户信息
Python3使用微软AD域账号认证
自动更新公网域名的解析(阿里云)
每日定时推送Excel中排班表信息到企微群
Django
Django模板标签
Django在发送POST请求时返回403错误
Django-mysql数据库条件查询
uwsgi 配置 python virtualenv 虚拟环境目录 ( ini 配置)
常用收藏
python3数据类型转换
python处理文本
txt每行一个字符串_用英文逗号连接
txt_匹配并拆分出需要字符串
python获取日期时间
python执行linux命令的三种方式
python使用ssh连接到linux服务器执行命令
本文档由 内网文摘 发布,转载请注明出处
-
+
首页
python3批量ping检测
背景: 公司核心交换机更换,而各个分公司的内网是通过IPSec互连的,子网段有*百个,为了验证割接前后网段互通情况, 诞生此脚本。 使用方法: 1. 从核心交换中拉取vlanif接口ip,存入hostip.txt文件 2. 设置脚本只保留能ping通的ip作为记录留存,方法:注释 脚本中函数`def ping_IP (IP_QUEUE):`内的`logging.info("%s IP = %s %s" % (today,ip,res))`,这样没有ping通的ip就不会记录到日志 ping_host.log 3. 第一次运行脚本 4. 取消第二步的注释 5. 割接完设备后,脚本中 存有待检测ip的文件名hostip.txt 替换为 ping_host.log(检测割接前能通的ip是否还通) 6. 第二次运行脚本,查看结果 待检测的服务器ip地址;每行包含一个ip地址 `cat hostip.txt` ``` vlanif100 vlan100 100.50.220.19/24 2021 - 07 - 09 10 : 35 : 57 IP = 100.50.223.34 网络连接失败! 100.50.223.35 ``` 运行后生成的日志文件 `cat ping_host.log` ``` 2021 - 07 - 26 10 : 22 : 29 IP = 100.50.220.19 网络连接失败! 2021 - 07 - 26 10 : 22 : 31 IP = 100.50.223.34 网络可以正常连通平均延时 = 11ms 2021 - 07 - 26 10 : 22 : 32 IP = 100.50.223.35 网络可以正常连通平均延时 = 11ms ``` ping_net_v0.2.py ```python import subprocess import logging import datetime import time import threading from queue import Queue import re import sys # 实现日志导出 def set_logging_format(): logging.basicConfig(level=logging.INFO, format='%(message)s', filename='ping_host.log', filemode='w' ) console = logging.StreamHandler() console.setLevel(logging.INFO) formatter = logging.Formatter('%(message)s') console.setFormatter(formatter) logging.getLogger('').addHandler(console) # 将需要ping 连接的IP加入队列 def insert_ip_queue(ip_list_path): IP_QUEUE = Queue() with open (ip_list_path,'r') as f: for ip in f.readlines(): ip = ip.strip('\n') # 判断一个字符串是否包含合法IP地址 ip = re.search(r'((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)', ip) if ip: ip = ip.group() # 提取出合法ip地址 IP_QUEUE.put(ip) f.close() return IP_QUEUE def IP_list (ip_list_path): ip_list = Queue() with open (ip_list_path,'r') as f: for ip in f.readlines(): ip = ip.strip('\n') # 判断一个字符串是否包含合法IP地址 ip = re.search(r'((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)', ip) if ip: ip = ip.group() # 提取出合法ip地址 list_segment = ip.split('.') ip_index = 1 # 将需要 ping 的 ip 加入队列 for i in range(0, 254): list_segment[-1] = str(ip_index + i) addr = ('.').join(list_segment) print(addr) ip_list.put(addr) f.close() return ip_list # print (IP_list()) #print (IP_list()) #定义 ping 函数 def ping_IP (IP_QUEUE): while not IP_QUEUE.empty(): ip = IP_QUEUE.get().strip('\n') #print (ip) res = subprocess.call('ping -w 1000 -n 1 %s' % ip , stdout=subprocess.PIPE,shell=True) #print (res) if res == 0: h =subprocess.getoutput('ping' + ' ' + ip) #print (h) if 'TTL=' in h: res = ('网络可以正常连通平均延时 = %s' % h.split('平均 = ')[1]) today = datetime.datetime.now().strftime("%Y - %m - %d %H : %M : %S") logging.info("%s IP = %s %s" % (today, ip, res)) else: res = '网络连接失败!' today = datetime.datetime.now().strftime("%Y - %m - %d %H : %M : %S") logging.info("%s IP = %s %s" % (today,ip,res)) #开关 pass def main (): set_logging_format() ip_list_path = './hostip.txt' # IP_QUEUE = insert_ip_queue(ip_list_path) # IP_LIST = IP_list(ip_list_path) threads = [] THREAD_NUM = 200 user_iput = input('please input modren: ') if user_iput == 'net': IP_LIST = IP_list(ip_list_path) IP_L = IP_LIST if user_iput == 'ip': IP_QUEUE = insert_ip_queue(ip_list_path) IP_L = IP_QUEUE for i in range (THREAD_NUM): t = threading.Thread(target = ping_IP, args = (IP_L,)) threads.append(t) for i in range (THREAD_NUM): threads[i].start() for i in range (THREAD_NUM): threads[i].join() if __name__ == '__main__': main() #hostip.txt中每行写一个ip地址,运行时根据输入ip或net来ping单个地址或ip对应的C类网段。 ```
local
2021年9月27日 18:47
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 LocalNetwork
LocalNetwork
是由mrdoc开源
LocalNetwork.cn
修改的在线文档系统,作为个人和小型团队的云笔记、文档和知识库管理工具。
如果此文档给你或你的团队带来了帮助,欢迎支持作者持续投入精力更新和维护!内网文摘 & LocalNetwork
>>>主页
logo
logo
下载Markdown文件
分享
链接
类型
密码
更新密码