2016-12-12 11 views
0

私はWindowsコマンドラインを初めて使いました。サービスによって使用されている正確なポートを名前で取得できるコマンドがあるかどうか疑問です。理想的には、私はPythonでそれをやりたいのですが、bashコマンドでなければならないのであれば、それも問題ありません。Windows:Pythonのサービスで使用されている正確なポートを取得する方法

私の例:特定の範囲内のポートに接続するサービスを実行しています。サービスが再起動するたびに、新しいランダムポートが使用されます。私はそれがポートを見つける方法を自動化したいので、このポートを聞いて、サービスが使用しているポートを手動で指定しなくても自動的にサービスに接続するコードを実行できます。

console screenshot

どのようにすることができます:このスクリーンショットのように

> netstat -ab 

:私はサービスの一覧と、彼らは、次のコマンドを使用して接続しているポートを取得することができています

私はサービス "naoqi-bin.exe"の状態を "ESTABLISHED"の状態で取得しますか?

+0

私は、 'ESTABLISHED'状態の' naoqi-bin'の2つのインスタンスを見ています。あなたは両方とも欲しいですか? – SomethingDark

答えて

0

netstat出力に必要な情報があります。それを読んで魚を釣ってみませんか?このようなものはうまくいくかもしれません...

import subprocess 

def get_naoqi_port(): 
    netstat = subprocess.Popen(["netstat", "-ab"], stdout=subprocess.PIPE) 
    for outline in netstat.stdout: 
     if "naoqi-bin.exe" in outline and "ESTABLISHED" in outline: 
      netstat.kill() # no need for more output 
      return int(outline.split(None, 3)[1].rsplit(":", 1)[-1]) 
+0

括弧内の実行可能ファイル名は、接続情報(プロトコル、ローカルアドレス、外部アドレス、状態)に続く行で、同じ行ではありません。この場合、実行ファイルは次の行にリストされますが、一般に、グループの2行目にサービス名が表示され、3行目には括弧で囲まれた実行可能ファイル名が表示されます。また、一般的には、「https」の代わりに443など、よく知られた名前の代わりに数字のポートを表示するために '-n'を使用します。 – eryksun

+0

Python 3の場合、ANSIとして出力をデコードするには 'universal_newlines = True'を指定して' subprocess.Popen'を呼び出すか、 'b" naoqi-bin.exe "'などの 'bytes'リテラルを使用してください。 – eryksun

+0

ありがとうございました! – user2399897

関連する問題