模塊安裝
- 安裝模塊
pip install pythonping
- pythonping
- pythonping 是 pytho n中 ping 的簡單方法。使用它,您可以像從終端發送 icmp 探測一樣將 icmp 探測發送到遠程設備。
- pythonping 是模塊化的,因此您可以將它作為一個獨立的函數在腳本中運行,或者將其組件集成到一個成熟的應用程序中。
Ping 基本用法
from pythonping import ping
ping('8.8.8.8')
- 上面這段代碼就是最簡單的ping使用,但是不會在控制台中看到任何輸出內容,因為ping默認情況下是靜默的,並且不會向屏幕打印任何內容
- 如果我們想在屏幕上看到所有內容,我們可以簡單地使用 verbose 標志,該標志接受 bool 值參數
from pythonping import ping
ping('8.8.8.8', verbose=True)
- 結果就會打印到屏幕上,如下所示
Reply from 8.8.8.8, 9 bytes in 70.51ms
Reply from 8.8.8.8, 9 bytes in 38.76ms
Reply from 8.8.8.8, 9 bytes in 42.33ms
Reply from 8.8.8.8, 9 bytes in 41.51ms
處理返回值
-
在屏幕上打印並不是我們一直想要的,這就是讓我們的腳本默認靜默的原因。相反,我們希望程序的其他部分使用 ping 的結果。
- 例如,如果遠程設備不可用,我們可能需要運行腳本或向管理員發送電子郵件。
- 如果延遲超過閾值,我們可能想要准備自定義操作,等等
-
正因為如此,Python 的 ping 返回值中,有你可能需要的所有細節,在自定義對象:ResponseList。此對象是一個可迭代對象,包含其他自定義對象、Response。
-
每個 Response 代表從給定的 ICMP 請求收到的響應。它包含其有效負載(消息)以及接收它所花費的時間
-
由於 Response 是一個對象,您可以從其成員中獲取其屬性:
- error_message 包含描述此響應所代表的錯誤的字符串。例如,錯誤可能是“網絡無法訪問”或“需要分段”。如果您得到成功響應,則此屬性為None
- success 是一個布爾值,指示響應是否成功
- time_elapsed 並 time_elapsed_ms 分別以秒和毫秒表示收到此響應所需的時間
-
您可以通過訪問訪問各個響應 responses 的 ResponseList的對象,從返回ping。在這種情況下,responses只是一個列表。但是,responses 不能從外部訪問 ResponseList,應該 ResponseLis t直接使用。最重要的是,ResponseList 添加了一些可以直接使用的方法
- rtt_avg 和 rtt_avg_ms
- rtt_min 和 rtt_min_ms
- rtt_max 和 rtt_max_ms
(注釋:avg 代表 response 的平均值,同理 min 是最小值,max 是最大值;以 ms 結尾的代表返回的 response 以毫秒(ms)計算;沒有則以秒(s)計算)
高級Python ping
- "ping"的所有參數
- ping() 函數還需要許多您可能想要指定的參數,如下所示
范圍 | 類型 | 描述 |
---|---|---|
target | str | 要ping的遠程設備。這是唯一的強制性參數 |
timeout | int | 在考慮未收到的響應丟失之前多長時間,以秒為單位 |
count | int | 要按順序發送多少個ICMP數據包 |
size | int | 要發送的整個ICMP數據包的大小。 您可以將其保留為o (默認值) ,以根據有效負載調整大小,而不是相反。 |
payload | str或者bytes | 數據包的有效載荷。如果您還提供了有效載荷的大小,則將對其進行剪切或重復以匹配所需的大小。 |
sweep_start | int | 與一起使用sweep_end。它size通過將有效負載大小增加一個字節來忽略並發送每個后續數據包, 從sweep_ start大小開始一直到sweep_end大小。嘗試查找 MTU 時很有用。 |
df | bool | IP報頭的 Don't Fragment標志的值。如果設置為true,將啟用IP頭中的不分段標志 |
verbose | bool | 如果您希望將輸出打印到屏幕,則為True。默認為 False |
out | file | 默認情況下,將詳細輸出結果輸出定向到sys.stdout;或者,您可能想在這里使用一個文件接受詳細輸出的值 |
