首页 > 解决方案 > '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 相同的退出状态时,如何排除“主机无法访问”为我的应用程序显示成功?

标签: pythonpingicmp

解决方案


由于 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


推荐阅读