0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Python進(jìn)行Ping測(cè)試

網(wǎng)絡(luò)技術(shù)干貨圈 ? 來源:網(wǎng)絡(luò)技術(shù)干貨圈 ? 2024-08-12 17:56 ? 次閱讀

轉(zhuǎn)載請(qǐng)注明以下內(nèi)容:

來源:公眾號(hào)【網(wǎng)絡(luò)技術(shù)干貨圈】

作者:圈圈

ID:wljsghq

在網(wǎng)絡(luò)工程中,Ping測(cè)試是一種常用的網(wǎng)絡(luò)診斷工具,用于檢查網(wǎng)絡(luò)連接的可達(dá)性和響應(yīng)時(shí)間。Ping測(cè)試通過向目標(biāo)主機(jī)發(fā)送ICMP(Internet Control Message Protocol)請(qǐng)求包,然后等待目標(biāo)主機(jī)返回響應(yīng)包,從而測(cè)量網(wǎng)絡(luò)的延遲和丟包情況。隨著Python編程語言的廣泛應(yīng)用,越來越多的網(wǎng)絡(luò)工程師開始使用Python進(jìn)行自動(dòng)化網(wǎng)絡(luò)測(cè)試和管理任務(wù)。本篇文章將詳細(xì)介紹如何使用Python進(jìn)行Ping測(cè)試,適合網(wǎng)工初學(xué)者。

安裝Python

首先,確保你的計(jì)算機(jī)上已安裝Python??梢酝ㄟ^以下命令檢查Python版本:

python--version

如果未安裝Python,可以從Python官方網(wǎng)站https://www.python.org/downloads下載并安裝。

在Python中,有多個(gè)庫可以用來進(jìn)行Ping測(cè)試,其中ping3庫是一個(gè)簡單易用的選擇??梢酝ㄟ^pip安裝ping3庫:

pipinstallping3

確保你的網(wǎng)絡(luò)環(huán)境允許發(fā)送ICMP請(qǐng)求。某些操作系統(tǒng)或網(wǎng)絡(luò)環(huán)境可能會(huì)限制ICMP流量,這需要相應(yīng)的權(quán)限或配置。

使用ping3庫進(jìn)行Ping測(cè)試

基本用法

ping3庫提供了一個(gè)簡單的函數(shù)ping,可以用來發(fā)送Ping請(qǐng)求并返回響應(yīng)時(shí)間。以下是一個(gè)基本示例:

fromping3importping

response_time=ping('baidu.com')
print(f'Responsetime:{response_time}seconds')

wKgaoma53G-AaVZUAABUXbtkmLo864.jpg

這個(gè)示例中,我們向baidu.com發(fā)送了一個(gè)Ping請(qǐng)求,并打印了響應(yīng)時(shí)間。如果目標(biāo)主機(jī)不可達(dá),ping函數(shù)會(huì)返回None。

wKgZoma53IGAWv2JAAAakguGecA860.jpg

高級(jí)用法

ping3庫還提供了其他一些功能,例如指定超時(shí)時(shí)間、數(shù)據(jù)包大小等。以下是一些高級(jí)用法示例:

指定超時(shí)時(shí)間

可以通過timeout參數(shù)指定Ping請(qǐng)求的超時(shí)時(shí)間(秒):

response_time=ping('baidu.com',timeout=2)
print(f'Responsetime:{response_time}seconds')

指定數(shù)據(jù)包大小

可以通過size參數(shù)指定Ping請(qǐng)求的數(shù)據(jù)包大小(字節(jié)):

response_time=ping('baidu.com',size=64)
print(f'Responsetime:{response_time}seconds')

進(jìn)行多次Ping測(cè)試

可以使用循環(huán)進(jìn)行多次Ping測(cè)試,以獲取更多的網(wǎng)絡(luò)性能數(shù)據(jù):

foriinrange(5):
response_time=ping('baidu.com')
print(f'Ping{i+1}:{response_time}seconds')

錯(cuò)誤處理

在實(shí)際網(wǎng)絡(luò)環(huán)境中,Ping請(qǐng)求可能會(huì)失敗或超時(shí),因此需要進(jìn)行錯(cuò)誤處理。ping3庫在目標(biāo)主機(jī)不可達(dá)或請(qǐng)求超時(shí)時(shí)會(huì)拋出異常,可以使用try-except塊進(jìn)行處理:

fromping3importping,PingError

try:
response_time=ping('baidu.com',timeout=2)
ifresponse_timeisNone:
print('Targetisunreachable.')
else:
print(f'Responsetime:{response_time}seconds')
exceptPingErrorase:
print(f'Pingfailed:{e}')

實(shí)戰(zhàn):構(gòu)建一個(gè)Ping測(cè)試工具

接下來,我們將構(gòu)建一個(gè)簡單的Ping測(cè)試工具,具備以下功能:

從用戶輸入獲取目標(biāo)主機(jī)

執(zhí)行多次Ping測(cè)試

計(jì)算并顯示平均響應(yīng)時(shí)間、最大響應(yīng)時(shí)間、最小響應(yīng)時(shí)間和丟包率

工具的實(shí)現(xiàn)

1. 獲取用戶輸入

首先,編寫代碼從用戶輸入獲取目標(biāo)主機(jī):

target=input('Enterthetargethost(e.g.,baidu.com):')

2. 執(zhí)行多次Ping測(cè)試

使用循環(huán)進(jìn)行多次Ping測(cè)試,并記錄響應(yīng)時(shí)間和失敗次數(shù):

fromping3importping

num_tests=10
response_times=[]
failures=0

foriinrange(num_tests):
response_time=ping(target,timeout=2)
ifresponse_timeisNone:
failures+=1
print(f'Ping{i+1}:Requesttimedout.')
else:
response_times.append(response_time)
print(f'Ping{i+1}:{response_time}seconds')

3. 計(jì)算并顯示統(tǒng)計(jì)數(shù)據(jù)

最后,計(jì)算并顯示平均響應(yīng)時(shí)間、最大響應(yīng)時(shí)間、最小響應(yīng)時(shí)間和丟包率:

ifresponse_times:
avg_response_time=sum(response_times)/len(response_times)
max_response_time=max(response_times)
min_response_time=min(response_times)
packet_loss=(failures/num_tests)*100

print(f'
Averageresponsetime:{avg_response_time:.2f}seconds')
print(f'Maximumresponsetime:{max_response_time:.2f}seconds')
print(f'Minimumresponsetime:{min_response_time:.2f}seconds')
print(f'Packetloss:{packet_loss:.2f}%')
else:
print('Allrequeststimedout.')

完整代碼

將上述步驟整合成一個(gè)完整的Python腳本:

fromping3importping,PingError

defmain():
target=input('Enterthetargethost(e.g.,baidu.com):')
num_tests=10
response_times=[]
failures=0

foriinrange(num_tests):
try:
response_time=ping(target,timeout=2)
ifresponse_timeisNone:
failures+=1
print(f'Ping{i+1}:Requesttimedout.')
else:
response_times.append(response_time)
print(f'Ping{i+1}:{response_time}seconds')
exceptPingErrorase:
failures+=1
print(f'Ping{i+1}failed:{e}')

ifresponse_times:
avg_response_time=sum(response_times)/len(response_times)
max_response_time=max(response_times)
min_response_time=min(response_times)
packet_loss=(failures/num_tests)*100

print(f'
Averageresponsetime:{avg_response_time:.2f}seconds')
print(f'Maximumresponsetime:{max_response_time:.2f}seconds')
print(f'Minimumresponsetime:{min_response_time:.2f}seconds')
print(f'Packetloss:{packet_loss:.2f}%')
else:
print('Allrequeststimedout.')

if__name__=='__main__':
main()

擴(kuò)展功能

使用多線程進(jìn)行并發(fā)Ping測(cè)試

為了提高Ping測(cè)試的效率,可以使用多線程進(jìn)行并發(fā)Ping測(cè)試。Python的threading模塊可以幫助實(shí)現(xiàn)這一點(diǎn)。

以下是使用多線程進(jìn)行并發(fā)Ping測(cè)試的示例:

importthreading
fromping3importping

defping_host(target,results,index):
response_time=ping(target,timeout=2)
results[index]=response_time

defmain():
target=input('Enterthetargethost(e.g.,baidu.com):')
num_tests=10
threads=[]
results=[None]*num_tests

foriinrange(num_tests):
thread=threading.Thread(target=ping_host,args=(target,results,i))
threads.append(thread)
thread.start()

forthreadinthreads:
thread.join()

response_times=[rforrinresultsifrisnotNone]
failures=results.count(None)

ifresponse_times:
avg_response_time=sum(response_times)/len(response_times)
max_response_time=max(response_times)
min_response_time=min(response_times)
packet_loss=(failures/num_tests)*100

print(f'
Averageresponsetime:{avg_response_time:.2f}seconds')
print(f'Maximumresponsetime:{max_response_time:.2f}seconds')
print(f'Minimumresponsetime:{min_response_time:.2f}seconds')
print(f'Packetloss:{packet_loss:.2f}%')
else:
print('Allrequeststimedout.')

if__name__=='__main__':
main()

生成Ping測(cè)試報(bào)告

可以將Ping測(cè)試結(jié)果保存到文件中,生成測(cè)試報(bào)告,以便后續(xù)分析。

可以使用Python的csv模塊將數(shù)據(jù)寫入CSV文件。

以下是一個(gè)生成Ping測(cè)試報(bào)告的示例:

importcsv
fromping3importping

defmain():
target=input('Enterthetargethost(e.g.,baidu.com):')
num_tests=10
response_times=[]
failures=0

withopen('ping_report.csv','w',newline='')ascsvfile:
fieldnames=['Ping','ResponseTime']
writer=csv.DictWriter(csvfile,fieldnames=fieldnames)
writer.writeheader()

foriinrange(num_tests):
response_time=ping(target,timeout=2)
ifresponse_timeisNone:
failures+=1
print(f'Ping{i+1}:Requesttimedout.')
writer.writerow({'Ping':i+1,'ResponseTime':'Requesttimedout'})
else:
response_times.append(response_time)
print(f'Ping{i+1}:{response_time}seconds')
writer.writerow({'Ping':i+1,'ResponseTime':response_time})

ifresponse_times:
avg_response_time=sum(response_times)/len(response_times)
max_response_time=max(response_times)
min_response_time=min(response_times)
packet_loss=(failures/num_tests)*100

withopen('ping_summary.txt','w')assummaryfile:
summaryfile.write(f'Averageresponsetime:{avg_response_time:.2f}seconds
')
summaryfile.write(f'Maximumresponsetime:{max_response_time:.2f}seconds
')
summaryfile.write(f'Minimumresponsetime:{min_response_time:.2f}seconds
')
summaryfile.write(f'Packetloss:{packet_loss:.2f}%
')

print(f'
Averageresponsetime:{avg_response_time:.2f}seconds')
print(f'Maximumresponsetime:{max_response_time:.2f}seconds')
print(f'Minimumresponsetime:{min_response_time:.2f}seconds')
print(f'Packetloss:{packet_loss:.2f}%')
else:
print('Allrequeststimedout.')

if__name__=='__main__':
main()

wKgZoma53JqACq6JAAG_Jn35sE0173.png

wKgZoma53KmADoBAAACAk8gk_6A485.jpg

運(yùn)行后響應(yīng):

wKgaoma53MCACeXPAABnsWDxY-k315.jpg

額外生成了兩個(gè)文件:

wKgZoma53M-AT0GrAAAkfiMUM5Y467.jpg

wKgZoma53M-ABFUqAABBUHcZbRA561.jpg

wKgaoma53M-ABv-gAABvq3M9AD4257.jpg

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1919

    瀏覽量

    34500
  • Ping
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    15911
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4756

    瀏覽量

    84283
  • 網(wǎng)絡(luò)診斷
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    6489

原文標(biāo)題:網(wǎng)工學(xué)Python入門:如何使用 Python 進(jìn)行 Ping 測(cè)試?

文章出處:【微信號(hào):網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號(hào):網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為什么用MCAN進(jìn)行ping測(cè)試不起作用怎么解決?

    我想知道為什么我用 MCAN 進(jìn)行ping 測(cè)試不起作用。我已經(jīng)在 freemaster_cfg.h 中配置了所有設(shè)置(我已經(jīng)引用了 freemaster 驅(qū)動(dòng)程序示例)?我已經(jīng)檢查過我
    發(fā)表于 04-19 07:21

    巧用Ping和Traceroute命令排除網(wǎng)絡(luò)故障

    在分析Ping 和Traceroute 命令工作原理和影響因素的基礎(chǔ)上,詳細(xì)介紹了使用Ping 和Traceroute 命令檢查網(wǎng)絡(luò)連接性、查看信息路徑從而排除網(wǎng)絡(luò)故障的方法和技巧。ping 命令是
    發(fā)表于 08-11 08:25 ?35次下載

    三種不同的“防 Ping”技巧

    三種不同的“防 Ping”技巧 淺析三種不同的“防 Ping”方法   眾所周知,Ping命令是一個(gè)非常有用的網(wǎng)絡(luò)命令,大家常用它
    發(fā)表于 04-14 13:53 ?1109次閱讀

    ping命令的使用大全(Windows下ping命令的使用)

    ping命令相信大家已經(jīng)再熟悉不過了,但是能把ping的功能發(fā)揮到最大的人卻并不是很多,下面就給大家講一些ping命令的運(yùn)用。
    的頭像 發(fā)表于 02-24 10:29 ?1.4w次閱讀

    用以太網(wǎng) Ping的方式對(duì) MAX10 FPGA 開發(fā)套件進(jìn)行測(cè)試

    對(duì)MAX10 FPGA 開發(fā)套件進(jìn)行以太網(wǎng) Ping 測(cè)試
    的頭像 發(fā)表于 06-20 01:00 ?4806次閱讀
    用以太網(wǎng) <b class='flag-5'>Ping</b>的方式對(duì)  MAX10 FPGA 開發(fā)套件<b class='flag-5'>進(jìn)行</b><b class='flag-5'>測(cè)試</b>

    ping原理及應(yīng)用介紹

    Ping程序的實(shí)質(zhì)是利用了ICMP請(qǐng)求回顯和回顯應(yīng)答報(bào)文,但ARP請(qǐng)求和應(yīng)答報(bào)文也在其中起了非常重要的作用。 Ping的邏輯過程以從PC1 ping PC2(命令:ping 11.1.
    發(fā)表于 10-06 14:25 ?8247次閱讀

    ping值和網(wǎng)速有關(guān)系嗎?ping值多少算正常

    PING值--代表你的電腦跟服務(wù)器的連接速度,即:客戶端數(shù)據(jù)傳送至服務(wù)器后再將命令反饋到客戶端所需的時(shí)長,單位為毫秒(ms),PING值越小速度越快。 主要還要看是用“光纖寬帶”還是“普通寬帶
    發(fā)表于 10-06 15:27 ?11.8w次閱讀

    Python語言的特點(diǎn)和使用Python對(duì)XML文件的數(shù)據(jù)進(jìn)行解析說明

    在民用航空電子產(chǎn)品的測(cè)試過程中,大部分的測(cè)試用例需要編寫測(cè)試腳本進(jìn)行自動(dòng)化測(cè)試Python
    發(fā)表于 08-28 10:33 ?6次下載
    <b class='flag-5'>Python</b>語言的特點(diǎn)和使用<b class='flag-5'>Python</b>對(duì)XML文件的數(shù)據(jù)<b class='flag-5'>進(jìn)行</b>解析說明

    ping命令的作用和原理是什么?

    測(cè)試和部署網(wǎng)絡(luò)通信應(yīng)用時(shí),我們經(jīng)常會(huì)遇到網(wǎng)絡(luò)不通的問題。一般都會(huì)想到ping一下。那么ping命令的作用和原理到底是什么呢? ping 命令是基于 ICMP 協(xié)議來工作的,要明白
    的頭像 發(fā)表于 03-18 17:21 ?9464次閱讀

    如何利用Python實(shí)現(xiàn)快速Ping一個(gè)IP網(wǎng)段地址?

    人都要瘋掉了,這種情況在大型網(wǎng)絡(luò)中我們有可能遇到,那怎么辦呢?我們今天來看下如何用 python 來實(shí)現(xiàn)批量 ping 測(cè)試主機(jī)。代碼如下: #!/usr/bin/python
    的頭像 發(fā)表于 06-29 15:59 ?3634次閱讀
    如何利用<b class='flag-5'>Python</b>實(shí)現(xiàn)快速<b class='flag-5'>Ping</b>一個(gè)IP網(wǎng)段地址?

    如何測(cè)試Python環(huán)境

    在編程中,測(cè)試是一項(xiàng)重要的工作,可以幫助我們驗(yàn)證代碼的正確性和穩(wěn)定性。在Python編程環(huán)境中,同樣需要進(jìn)行測(cè)試來確保Python的安裝和配
    的頭像 發(fā)表于 04-14 12:14 ?4830次閱讀

    PING命令還能這么用?

    今天和你聊聊PING命令。 一般來說,網(wǎng)工們通常會(huì)用它來直接ping ip地址,來測(cè)試網(wǎng)絡(luò)的連通情況。 類似這種,ping ip地址或網(wǎng)關(guān),然后pi
    的頭像 發(fā)表于 05-18 16:43 ?1010次閱讀
    <b class='flag-5'>PING</b>命令還能這么用?

    你知道ping命令是如何工作的嗎?

    我們用來測(cè)試一臺(tái)機(jī)器與另一臺(tái)機(jī)器的網(wǎng)絡(luò)連通性一般會(huì)使用ping命令,那么你知道ping命令是如何工作的嗎?ping命令是基于ICMP協(xié)議工作的。
    的頭像 發(fā)表于 05-31 11:40 ?990次閱讀
    你知道<b class='flag-5'>ping</b>命令是如何工作的嗎?

    如何使用ping命令測(cè)試網(wǎng)絡(luò)攝像頭連通性

    在做智能化弱電項(xiàng)目時(shí),前端攝像頭設(shè)備安裝結(jié)束后,我們會(huì)對(duì)網(wǎng)絡(luò)攝像頭進(jìn)行調(diào)試,調(diào)試過程中會(huì)遇到前端攝像頭沒有圖像或者圖像出來了畫面卡頓的現(xiàn)象。我們會(huì)采用ping命令來測(cè)試網(wǎng)絡(luò)的連通性和網(wǎng)絡(luò)承載能力。
    的頭像 發(fā)表于 08-19 09:48 ?8688次閱讀
    如何使用<b class='flag-5'>ping</b>命令<b class='flag-5'>測(cè)試</b>網(wǎng)絡(luò)攝像頭連通性

    Ping測(cè)試在不同網(wǎng)段通信中的準(zhǔn)確性

    不同網(wǎng)段之間的通信順暢與否能影響網(wǎng)絡(luò)的整體性能和業(yè)務(wù)的正常運(yùn)行。Ping 測(cè)試作為一種常用的網(wǎng)絡(luò)診斷工具,被廣泛用于檢測(cè)網(wǎng)絡(luò)連接的可達(dá)性。然而,在沒有三層交換路由功能的網(wǎng)絡(luò)中,跨網(wǎng)段的 Ping
    的頭像 發(fā)表于 07-31 16:15 ?208次閱讀