1. ホーム
  2. python

[解決済み] Pythonで、利用可能でアクティブなネットワーク接続があるかどうかを確認するにはどうすればよいですか?

2022-04-26 11:56:33

質問

オンラインAPIにアクセスできるかどうかを確認したいのですが、そのためにはインターネットにアクセスする必要があります。

Pythonを使って、接続が可能かどうか、アクティブかどうかを確認するにはどうすればよいですか?

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

おそらく、次のようなものが使えると思います。

import urllib2

def internet_on():
    try:
        urllib2.urlopen('http://216.58.192.142', timeout=1)
        return True
    except urllib2.URLError as err: 
        return False

現在、216.58.192.142はgoogle.comのIPアドレスの1つです。 変更 http://216.58.192.142 を、迅速な対応が期待できるサイトであれば何でもよい。 .

この固定IPは永遠にgoogle.comにマッピングされることはないでしょう。ですから、このコードは 堅牢ではない -- 動作を維持するためには常にメンテナンスが必要です。

上記のコードで完全修飾ドメイン名(FQDN)ではなく、固定IPアドレスを使用している理由は、FQDNを使用するとDNSルックアップが必要になるためです。マシンがインターネットに接続されていない場合、DNS検索自体が urllib_request.urlopen を1秒以上続ける。このことを指摘してくれた@rzetterbergに感謝します。


上記の固定IPアドレスがうまくいかない場合、google.comの現在のIPアドレスは(unixの場合)以下を実行することで見つけることができます。

% dig google.com  +trace 
...
google.com.     300 IN  A   216.58.192.142