Código de saída e python de ping

1

Estou usando o comando os.system ("ping 192.168.178.5") para executar o ping em uma máquina. O engraçado é que eu recebo o código de saída 0, mesmo que o ping falhe.

Como posso obter algo que me diga que o ping falhou / o host está off-line?

    
por Con7e 02.06.2014 / 11:43

2 respostas

3

Eu não sou usuário de Python, mas é possível encontrar muito material sobre esse problema.

Por exemplo, a postagem ping da rede local em python contém duas soluções que eu reproduzo aqui (não testado).

Solução 1: Analisando a saída do comando ping

import subprocess

hostname = "10.20.16.30"
output = subprocess.Popen(["ping.exe",hostname],stdout = subprocess.PIPE).communicate()[0]

print(output)

if ('unreachable' in output):
    print("Offline")

Também é possível testar esse caminho para "Solicitação expirada".

Solução 2: Usando um soquete (adaptado do código original, portanto, não garantido)

s = socket(AF_INET, SOCK_STREAM)         # Creates socket
host = 'localhost' # Enter the IP of the workstation here 
port = 80                # Select port which should be pinged

try:
    s.connect((host, port))    # tries to connect to the host
except ConnectionRefusedError: # if failed to connect
    print("Server offline")    # server is offline

s.close()                      # close socket
    
por 15.07.2014 / 19:38
0

O uso do comando os.system ("ping 192.168.178.5") para executar ping em uma máquina depende do sistema em que você está.

  • De uma ajuda online para o Ping nas janelas :

    A successful PING does NOT always return an %errorlevel% of 0 Therefore to reliably detect a successful ping - pipe the output into FIND and look for the text "TTL"

    Parece que você deve usar em vez de ping 192.168.178.5 algo como ping -n 1 192.168.178.5 | find "TTL="

  • De man ping no Linux (Manual do Gerenciador do Sistema: iputils)

    If ping does not receive any reply packets at all it will exit with code 1. If a packet count and deadline are both specified, and fewer than count packets are received by the time the deadline has arrived, it will also exit with code 1. On other error it exits with code 2. Otherwise it exits with code 0. This makes it possible to use the exit code to see if a host is alive or not.

    Nesse caso, você pode usar diretamente o código de saída.

por 19.07.2014 / 02:13

Tags