2013-07-16 5 views
7

私はPythonでアプリケーションを持っていますが、(アプリケーションを実行している)コンピュータが別のリモートコンピュータからオンになっているかどうかを知りたいと思います。Python - リモートコンピュータがオンになっているかどうかを検出する

これを行う方法はありますか?私は、UDPパケットを使用して、カウンタを使用して何らかのキープアライブを送信することを考えていました。 Ex。 5分ごとに、クライアントはUDP「キープアライブ」パケットをサーバーに送信します。前もって感謝します!

+0

あなたのアイデアは正しい方向にあると思いますが、これまでに何を試しましたか? –

+2

タイトルが誤解を招くか、アプリケーションが実行中かどうかを検出したいだけです。後であれば、どんな種類のpingでもやります。 – Ma3x

+0

私はw/@ Ma3xに同意しますが、この質問にはPythonを使用することはほとんどありません。 – Sabuncu

答えて

0

あなたが探しているものは、ネットワーク/ホスト監視ツール、または単純な心拍モニターです。詳細(監視するホストの数など)に応じて、Nagios、MuninまたはHeartbeatのようなものが役立ちます。

0

はいそうです。ハートビートpingを送るようなもの。そのUDP以来、そしてそのちょうどヘッダーメッセージ以来、あなたは10秒と言う頻度を減らすことができます。これは、私たちが話しているシステムが2つしかないため、測定可能なシステム性能の低下を引き起こすべきではありません。

私はここで、UDPはTCPに比べて良いかもしれないと感じています。軽量で、多くのシステムリソースを消費せず、理論的には高速です。欠点は、パケットロスが発生する可能性があることです。 10パケット(10秒離れている)が連続して受信されず、他のシステムが到達不能であると宣言されるようなロジックを入れることで回避できます。

+0

ちょっとそれは私の答えだった:) –

3

最初に、コンピュータがオンかどうかを判断する標準的な方法がないことを認識する必要があります。これは言語/プラットフォームに依存しません。コンピュータは、あなたがチェックしようとしている状態を偽造することができます。

しかし、は、コンピュータがオンかどうかを確認するためにPing(ICMPエコー要求)を送信しています。 This answerは、Pythonを使ってPingを送信する方法を示しています。

17

あなたの目標は、実際に特定のサービスは、リモート・マシン上で実行されているかどうかをテストする場合、このサービスは、上で実行する必要があるネットワークポートが到達可能である場合は、テストすることができ。例:

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
try: 
    s.connect(('hostname', 22)) 
    print "Port 22 reachable" 
except socket.error as e: 
    print "Error on connect: %s" % e 
s.close() 

テストするアプリケーションが、このポートを確認してください。

+0

Windowsマシンのためには動作していない –

関連する問題