python - 'Host Unreachable' 返回成功
问题描述
我有以下 Python 代码块,用于 Ping 多个地址
import subprocess as s
import tkinter as tk
from tkinter import *
IPT.title("IP Ping Test Tool")
canvas_IPT = Canvas(IPT, width=401, height=551)
canvas_IPT.pack()
Output_IP_Address_AN = Output_IP_Address[10]
IPT_Display_AN = Label(IPT, text=Output_IP_Address_AN, anchor=W)
IPT_Display_AN_Window = canvas_IPT.create_window(150, 235, anchor = 'sw', window = IPT_Display_AN)
def IPT_Test():
print("Test Initiated")
AN_Sel_State = var4.get()
if (AN_Sel_State == 1):
if(s.call(["ping", Output_IP_Address_AN])==0):
print("AvI Navi 'Ping' Sucessful")
IPT_Display_AN = Label(IPT, text=(Output_IP_Address_AN, "Ok"),fg='green', anchor=W)
IPT_Display_AN_Window = canvas_IPT.create_window(150, 235, anchor = 'sw', window = IPT_Display_AN)
else:
print("Avi Navi 'Ping' NOT Sucessful")
IPT_Display_AN = Label(IPT, text=(Output_IP_Address_AN, "Failed"),fg='red', anchor=W)
IPT_Display_AN_Window = canvas_IPT.create_window(150, 235, anchor = 'sw', window = IPT_Display_AN)
IPT_Display_AN = Label(IPT, text=Output_IP_Address_AN, anchor=W)
IPT_Display_AN_Window = canvas_IPT.create_window(150, 235, anchor = 'sw', window = IPT_Display_AN)
var4 = IntVar()
IPT_Test_AN = Checkbutton(IPT, text = "AVI/NAVI", justify=LEFT,width=15, indicatoron=0,
variable = var4, command=AN_Sel)
IPT_Test_AN_Window = canvas_IPT.create_window(20, 240, anchor = 'sw', window = IPT_Test_AN)
IPTest_Button = tk.Button(IPT, text = 'TEST', command = IPT_Test, background ="#01AEAC", width=20, height=3,)
这在接收到数据包数据(成功)的情况下按预期工作,并且在“请求超时”(不成功)时也可以工作,但是当“主机无法访问”时,它返回结果是成功的。
对此进行了一些研究后,我相信即使 ping 实际上没有成功,“Host Unreachable”也会返回==0(仍然不明白为什么会这样?)
如果是这种情况,当我的应用程序具有与成功的 Ping 相同的退出状态时,如何排除“主机无法访问”为我的应用程序显示成功?
解决方案
由于 PING 请求得到的回复为:
来自 xx.xx.xx.xx 的回复:无法访问目标主机
从技术上讲,这仍然是一个答复。
因此,尝试解析控制台输出,这可能会达到您的目的,如下所示:
ping -c 1 -w 4 ip_addr | findstr /i "TTL"
这里有一个类似的问题: Destination Host unreachable does not result in an errorlevel 1
推荐阅读
- php - 如何在事件监听器中获取经过身份验证的用户 - Laravel
- sql-server - Azure SQL 数据库上的奇怪池行为
- reactjs - 在操作符中使用 this.state 作为条件会导致 React 出现问题吗?
- docker - 我可以将 Docker 映像挂载为 Docker 中的卷吗?
- php - 使用 PHP 上传图片
- python - 混淆矩阵错误'DataFrame'“对象不可调用”
- javascript - 使用另一个数组的对象属性对数组进行排序
- go - 当 net.Addr 可能是 net.UDPAddr 或 net.TCPAddr 时如何从 net.Addr 获取 IP 和端口
- apache-spark - 在 Zeppelin 上运行 Spark 作业
- wordpress - HTML5 视频结束时的事件