0
点赞
收藏
分享

微信扫一扫

对单片机的一点理解

素锦时年_1b00 04-15 17:00 阅读 2

代码

 #########################################################################
 #    File Name: check_ip_test.py
 #    Author: eight
 #    Mail: 18847097110@163.com 
 #    Created Time: Thu 11 Apr 2024 08:52:45 AM CST
 #########################################################################
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-                                                                                                                                                                                                             
 import sys
 import ipaddress
 import subprocess
 import re
 import json
 

 # 处理单个IP 的ping请求
 def ping_ip(ip):
     try:
         output = subprocess.check_output(['ping', '-c', '1', ip], stderr=subprocess.STDOUT, universal_newlines=True, timeout=2)
         return output
     except (subprocess.CalledProcessError, subprocess.TimeoutExpired):
         return False
 

 # 处理网段的请求
 def scan_network(ip_network):
     result_list = []
     for ip in ipaddress.IPv4Network(ip_network, strict=False):
         ip_str = str(ip)
         result = ping_ip(ip_str)
         print(f"Begin Ping {ip_str}...")
         time_value = ping_test_match(ip_str)
         if result:
             #print(f"{ip_str} Network communication is normal.")
             if time_value:
                 result_list.append({'ip': ip_str, 'connection': True, 'time': f"{time_value} ms"})
             else:
                 result_list.append({'ip': ip_str, 'connection': True, 'time': '0ms'})
         else:
             #print(f"{ip_str} Network communication is not normal.")
             result_list.append({'ip': ip_str, 'connection': False})
     return result_list 
 
 
# 测试的请求及正则匹配time时间
 def ping_test_match(ip):
     try:
         ipaddress.IPv4Address(ip)
         #print("The entered address is valid. The connectivity check starts")
         ping_output = ping_ip(ip)
         if ping_output:
             #return "yes"
             time_match = re.search(r"time=([\d.]+) ms", ping_output)
             if time_match:
                 time_value = float(time_match.group(1))
                 return time_value
             else:
                 return None
         else:
             return None
     except ipaddress.AddressValueError:
         #print("The entered address is invalid")
         return None
             
 
 # 如果是单个IP,执行第一条,因为利用此方法检测ip是否是合法的,输入网段则视为不合法,所以输入网段会用except
 if __name__ == "__main__":
     ip = sys.argv[1]
     try:
         ipaddress.IPv4Address(ip)
         print(ping_test_match(ip))
     except ipaddress.AddressValueError:
         result_list = scan_network(ip)
         #print(json.dumps(result_list))
         for item in result_list:
             if "time" not in item:
                 item["time"] = "0ms"
         print(json.dumps(result_list))       

详解

效果

执行命令必须传参,否则会报错

执行某个网段的测试

举报

相关推荐

0 条评论