亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2024年04月18日 09:18:19   作者:蝸牛其實(shí)也很努力  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)批量檢測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
 
 
 # 處理單個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
 
 
 # 處理網(wǎ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 
 
 
# 測試的請求及正則匹配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,執(zhí)行第一條,因?yàn)槔么朔椒z測ip是否是合法的,輸入網(wǎng)段則視為不合法,所以輸入網(wǎng)段會用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:  模塊,用于訪問命令行參數(shù)等系統(tǒng)功能。
  • ipaddress: 模塊,用于處理 IP 地址和網(wǎng)絡(luò)。
  • subprocess: 模塊,用于執(zhí)行外部命令。
  • re:模塊,用于正則表達(dá)式匹配。
  • json: 模塊,用于 JSON 數(shù)據(jù)展示

代碼解釋:

ping_ip函數(shù)

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

2.如果 ping 命令執(zhí)行失?。ɡ纾捎诔瑫r或返回非零退出代碼),則會捕獲 subprocess.CalledProcessError 或 subprocess.TimeoutExpired 異常,并返回 False

scan_network函數(shù)

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

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

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

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

ping_test_match函數(shù)

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

2.利用正則匹配  time字段

if __name__ == "__main__":

1.獲取傳參

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

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

效果

執(zhí)行命令必須傳參,否則會報錯

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

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

相關(guān)文章

  • Python中用memcached來減少數(shù)據(jù)庫查詢次數(shù)的教程

    Python中用memcached來減少數(shù)據(jù)庫查詢次數(shù)的教程

    這篇文章主要介紹了Python中用memcached來減少數(shù)據(jù)庫查詢次數(shù)的教程,memcached是一種分布式的內(nèi)存緩存工具,使用后可以減少對硬盤的I/O次數(shù),需要的朋友可以參考下
    2015-04-04
  • 學(xué)會這29個常用函數(shù),你就是Pandas專家

    學(xué)會這29個常用函數(shù),你就是Pandas專家

    Pandas?無疑是?Python?處理表格數(shù)據(jù)最好的庫之一,但是很多新手無從下手,這里總結(jié)出最常用的?29?個函數(shù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • Python中%r和%s的詳解及區(qū)別

    Python中%r和%s的詳解及區(qū)別

    這篇文章主要介紹了Python中%r和%s的詳解及區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Python利用memory_profiler查看內(nèi)存占用情況

    Python利用memory_profiler查看內(nèi)存占用情況

    memory_profiler是第三方模塊,用于監(jiān)視進(jìn)程的內(nèi)存消耗以及python程序內(nèi)存消耗的逐行分析。本文將利用memory_profiler查看代碼運(yùn)行占用內(nèi)存情況,感興趣的可以了解一下
    2022-06-06
  • python內(nèi)存動態(tài)分配過程詳解

    python內(nèi)存動態(tài)分配過程詳解

    這篇文章主要介紹了python內(nèi)存動態(tài)分配過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 提升Python程序運(yùn)行效率的6個方法

    提升Python程序運(yùn)行效率的6個方法

    這篇文章主要介紹了提升Python程序運(yùn)行效率的6個方法,包括依賴外部擴(kuò)展、代碼優(yōu)化等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Python中的np.setdiff1d()函數(shù)詳解

    Python中的np.setdiff1d()函數(shù)詳解

    Python中的np.setdiff1d()函數(shù)可用于找出兩個序列集合中元素的差異,下面通過示例代碼給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Python在字符串中處理html和xml的方法

    Python在字符串中處理html和xml的方法

    這篇文章主要介紹了Python在字符串中處理html和xml的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python使用OpenCV實(shí)現(xiàn)全景拼接功能

    Python使用OpenCV實(shí)現(xiàn)全景拼接功能

    全景拼接是將多張圖像拼接成一張全景圖的技術(shù),本文將詳細(xì)介紹如何使用 Python 和 OpenCV 庫進(jìn)行全景拼接,感興趣的小伙伴可以了解一下
    2024-11-11
  • Python-VTK批量讀取二維切片并顯示三維模型

    Python-VTK批量讀取二維切片并顯示三維模型

    這篇文章主要介紹了Python-VTK批量讀取二維切片并顯示三維模型,文章基于python的相關(guān)資料展開對主題的詳細(xì)介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04

最新評論