欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)批量檢測(cè)ip地址連通性

 更新時(shí)間:2024年04月18日 09:18:19   作者:蝸牛其實(shí)也很努力  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)批量檢測(cè)ip地址連通性并以json格式顯示(支持傳參單IP或者網(wǎng)段),感興趣的小伙伴可以了解下

實(shí)現(xiàn)代碼

 #########################################################################
 #    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
 
 
 # 處理單個(gè)IP 的ping請(qǐng)求
 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
 
 
 # 處理網(wǎng)段的請(qǐng)求
 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 
 
 
# 測(cè)試的請(qǐng)求及正則匹配time時(shí)間
 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
             
 
 # 如果是單個(gè)IP,執(zhí)行第一條,因?yàn)槔么朔椒z測(cè)ip是否是合法的,輸入網(wǎng)段則視為不合法,所以輸入網(wǎng)段會(huì)用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))       

代碼詳解

模塊解釋:

  • sys:  模塊,用于訪問(wèn)命令行參數(shù)等系統(tǒng)功能。
  • ipaddress: 模塊,用于處理 IP 地址和網(wǎng)絡(luò)。
  • subprocess: 模塊,用于執(zhí)行外部命令。
  • re:模塊,用于正則表達(dá)式匹配。
  • json: 模塊,用于 JSON 數(shù)據(jù)展示

代碼解釋:

ping_ip函數(shù)

1.接收一個(gè) IP 地址作為參數(shù),執(zhí)行 ping 測(cè)試,使用 subprocess.check_output 函數(shù)來(lái)運(yùn)行 ping 命令,然后返回命令的輸出。

2.如果 ping 命令執(zhí)行失?。ɡ?,由于超時(shí)或返回非零退出代碼),則會(huì)捕獲 subprocess.CalledProcessError 或 subprocess.TimeoutExpired 異常,并返回 False

scan_network函數(shù)

1.scan_network 函數(shù)接收一個(gè) IP 網(wǎng)段作為參數(shù),然后遍歷該網(wǎng)段中的所有 IP 地址。

2.對(duì)于每個(gè) IP 地址,調(diào)用 ping_ip 函數(shù)執(zhí)行 ping 測(cè)試,調(diào)用ping_test_match函數(shù)獲取time時(shí)間。

3.將結(jié)果存儲(chǔ)在 result 中。

4.最后,根據(jù) ping 測(cè)試的結(jié)果和 ping 時(shí)間,它向 result_list 中添加一個(gè)字典,該字典包含 IP 地址、連接狀態(tài)和 ping 時(shí)間

ping_test_match函數(shù)

1.調(diào)用 ping_ip 函數(shù)的結(jié)果

2.利用正則匹配  time字段

if __name__ == "__main__":

1.獲取傳參

2.如果是單個(gè) IPv4 地址,則執(zhí)行單個(gè) IP 地址的 ping 測(cè)試,并打印結(jié)果。

3.如果無(wú)法轉(zhuǎn)換為 IPv4 地址,則將輸入視為 IP 網(wǎng)段,并執(zhí)行ping測(cè)試,將結(jié)果以 JSON 格式打印

效果

執(zhí)行命令必須傳參,否則會(huì)報(bào)錯(cuò)

執(zhí)行某個(gè)網(wǎng)段的測(cè)試

到此這篇關(guān)于Python實(shí)現(xiàn)批量檢測(cè)ip地址連通性的文章就介紹到這了,更多相關(guān)Python檢測(cè)ip連通性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論