Возвращение хоста недоступно - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть следующий блок кода Python, который я использую для проверки связи с несколькими адресами

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, хотя пинг на самом деле не был успешным (все еще не совсем понимаю, почему это так?)

Если это так, как я могу исключить "Host Unreachable" из отображения успешного для моего приложения, когда оно имеет тот же статус завершения, что и успешный Ping?

1 Ответ

0 голосов
/ 05 сентября 2018

Я не уверен, почему это произошло в вашем регионе, я тестирую локально, это работает для меня, когда у меня есть следующий код:

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

Я разрешил ping отправить 1 пакет, и время ожидания составляет 4 секунды.

локально, я запускаю следующую команду для имитации случая отсутствия доступа к хосту:

 sudo ip route add unreachable 1.0.0.3

затем запустите ваш код с изменениями выше, и НЕ удачным является печать. когда Output_IP_Address_AN установлен в 1.0.0.3

...