'Host Unreachable'返回成功

问题描述 投票:2回答:1

我有以下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,)

这可以在收到分组数据(成功)的情况下按预期工作,并且在“请求超时”(不成功)时也可以工作,但是当“主机无法访问”它返回结果成功时。

做了一些关于这方面的研究后,我认为“Host Unreachable”返回为== 0,即使ping实际上没有成功(仍然不明白为什么会这样?)

如果是这种情况,当我的应用程序具有与成功Ping相同的退出状态时,如何排除“Host Unreachable”显示我的应用程序成功?

python ping icmp
1个回答
0
投票

我不确定为什么这发生在你的本地,我在本地测试,当我有以下代码时它适用于我:

...
if(s.call(["ping", "-c", "1", "-W", "4", Output_IP_Address_AN])==0):
     print("AvI Navi 'Ping' Sucessful")
...

我让ping发送1个包,超时是4秒。

在本地,我运行以下命令来模拟Host Unreachable案例:

 sudo ip route add unreachable 1.0.0.3

然后使用上面的更改运行您的代码,而不是Sucessful就是打印。当Output_IP_Address_AN设置为1.0.0.3时

© www.soinside.com 2019 - 2024. All rights reserved.