Pinging servers in Python

Pinging servers in Python

If you dont need to support Windows, heres a really concise way to do it:

import os
hostname = #example
response = os.system(ping -c 1  + hostname)

#and then check the response...
if response == 0:
  print hostname, is up!
  print hostname, is down!

This works because ping returns a non-zero value if the connection fails. (The return value actually differs depending on the network error.) You could also change the ping timeout (in seconds) using the -t option. Note, this will output text to the console.

This function works in any OS (Unix, Linux, macOS, and Windows)
Python 2 and Python 3

By @radato os.system was replaced by This avoids shell injection vulnerability in cases where your hostname string might not be validated.

import platform    # For getting the operating system name
import subprocess  # For executing a shell command

def ping(host):
    Returns True if host (str) responds to a ping request.
    Remember that a host may not respond to a ping (ICMP) request even if the host name is valid.

    # Option for the number of packets as a function of
    param = -n if platform.system().lower()==windows else -c

    # Building the command. Ex: ping -c 1
    command = [ping, param, 1, host]

    return == 0

Note that, according to @ikrase on Windows this function will still return True if you get a Destination Host Unreachable error.


The command is ping in both Windows and Unix-like systems.
The option -n (Windows) or -c (Unix) controls the number of packets which in this example was set to 1.

platform.system() returns the platform name. Ex. Darwin on macOS. performs a system call. Ex.[ls,-l]).

Pinging servers in Python

There is a module called pyping that can do this. It can be installed with pip

pip install pyping

It is pretty simple to use, however, when using this module, you need root access due to the fact that it is crafting raw packets under the hood.

import pyping

r =

if r.ret_code == 0:
    print(Failed with {}.format(r.ret_code))

Leave a Reply

Your email address will not be published. Required fields are marked *