1. ホーム
  2. python

[解決済み] PythonでサーバにPingを打つ

2022-02-25 18:34:24

質問

Pythonで、ICMPでサーバーにpingを打ち、サーバーから応答があればTRUEを、応答がなければFALSEを返す方法はありますか?

どのように解決するのですか?

この機能は、どのOS(Unix、Linux、macOS、Windows)でも動作します。
Python 2およびPython 3

EDITS
By ラダト os.system に置き換えられました。 subprocess.call . これにより シェルインジェクション の脆弱性が発生する可能性があります。

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 google.com"
    command = ['ping', param, '1', host]

    return subprocess.call(command) == 0

Windows の @ikrase によると、この関数は依然として True を取得した場合 Destination Host Unreachable のエラーが発生します。

説明

コマンドは ping は、WindowsとUnix系システムの両方で使用できます。
オプション -n (Windows)または -c (Unix)はパケット数を制御し、この例では1に設定されています。

platform.system() はプラットフォーム名を返します。例 'Darwin' をmacOSで実行します。
subprocess.call() は、システムコールを実行します。例 subprocess.call(['ls','-l']) .