# [實現自動化ping IP地址](https://hackmd.io/1pPduU9HT9Gm8GX5ADPV7g) ## :question: 目標 :::success 學習如何透過Python 腳本與xlsx結合實現自動Ping IP並接收回傳結果 ::: ## :feet: Step :::success 步驟從檔案建置到python程式碼 ::: 1. 創建3個檔案如圖所示 ![image](https://hackmd.io/_uploads/BkeJzz9itT.png) 2. 打開**ping_test.xlsx**將A-1 和B-1改為**ip**與**result** ![image](https://hackmd.io/_uploads/HyNl7csKT.png) > 注意:A-2(含)以下都可以新增自己想要ping的ip,如上圖**192.168.0.1**與**192.168.137.1**是我想ping的IP 3. 打開**ping_test _result.xlsx**將A-1 和B-1改為**ip**與**result** ![image](https://hackmd.io/_uploads/SJJUQcoKT.png) 4. 打開ping_test.py,輸入以下code ``` import threading import pandas as pd import ping3 def single_ping(ip,timeout,ping_results): ''' ping 指定地址(單獨的) parm ip:要ping的地址 parm timeout:ping超時的默認時間 parm ping_results: ping的結果,字典格式:key是ip ,value是ping的結果 exmaple: { ping_results:{"192.168.0.1": None, "192.168.137.1": 0.0} } ''' ping_time = ping3.ping(ip,timeout = timeout) ping_results[ip] = ping_time def batch_ping(file = 'ping_test.xlsx',result_file='ping_test_result.xlsx',timeout=4): ''' parm file:要從哪個檔案讀取預計要ping的ip(可用絕對或相對位置) example:D:\\test\\ping_test.xlsx parm result_file:要將ping的結果寫入哪個檔案(可用絕對或相對位置) example:D:\\test\\ping_test_result.xlsx parm timeout:默認超過幾秒就認為ping失敗 ''' #讀取xlsx ip列表 df = pd.read_excel(file) ip_items = df.to_dict(orient='records') ip_list=[] #將字典列表ip轉成list ip,供後續使用 for i in ip_items: ip_list.append(i['ip']) #設定結果空字典以及多線程空列表 ping_results = {} threads = [] #開始嘗試ping for ip in ip_list: #將IP與timeout丟入線程裡,用線程目的是加速ping過程 t = threading.Thread(target=single_ping, args=(ip, timeout,ping_results)) #加入到threads列表是為了後續可以讓系統等待線程完成 threads.append(t) #啟動宣告好的線程,開始ping IP t.start() #強制等待線程完成 for t in threads: t.join() #將結果寫入指定檔案 for i in ip_items: #將想要的ip用字典key讀取ping_results對應結果 item_ping_result = ping_results[i['ip']] #判斷回傳結果 if item_ping_result is None: i['result'] = 'full time' elif item_ping_result is False: i['result'] ='DNS ERROR' else: i['result']='OK' #寫入表格 new_df = pd.DataFrame(ip_items) new_df.to_excel(result_file,index=False,columns=['ip','result']) if __name__ == '__main__': batch_ping() ``` 5. 進行程式測試,若ping_test_result檔案出現如圖所示代表運行成功 ![image](https://hackmd.io/_uploads/HkxVD5jK6.png)