私はちょうど深刻なネットワーク問題に遭遇しました。私は、ADS-B受信機として少なくとも1つのRasPiを備えた仮想レーダーサーバーをセットアップするプロセスに入っています。これが何であるかを説明するだけです。飛行機は公共の周波数(1080MHz)で位置データを送信し、それを表示したいと思います。それはFlightradar24のようなものです。PythonストリームデータをTCP経由で
私のPiでは、SDRデバイス(DVB-Tスティック)を介してこれらの送信をインターセプトし、デコードされたデータをネットワークストリームに提供するMalcolm Robbからdump1090を実行します。 Piのポート30003でtelnetすれば、このストリームを見ることができます。ここまでは順調ですね。
2番目のマシンでは、仮想レーダーサーバー(短いVRS)が実行されています。これは主に、PIのポートに受信したデータを表示するWebサーバーです。私のローカルLANでも同様に動作します。
しかし、トリッキーな部分がわかります。通常、Piはルータ/ファイアウォールの背後にあり、ポート転送は行われないため、VRSはそのTCPストリームに接続できません。私は既にtelnetでそのストリームを開くために逆SSH接続を確立することができましたが、これはPiで実行されているTelnetセッションであり、リモートで制御されているVRSではできません。
私の考えは、VRSマシンの逆SSHからデータを傍受し、Pythonスクリプトを使用してそれを読み込んで新しいローカルTCPストリームを提供することでした。だから、理論上、VRSはそれを読むことができました。
私の最初の問題は、接続を傍受する方法です。私はPythonでそれを行う2つの方法を見つけました。どちらを好むか、より良いアイデアがありますか?
方法1
import os
os.system("ssh [email protected] -p 13889 telnet localhost 30003
方法2
import subprocess
subprocess.call("ssh [email protected] -p 13889 telnet localhost 30003")
しかし、どのように私はさらにWORにスタウトを得るのですか?
次の問題は、TCPストリームを設定することです。 Dump1090はすべての時間にデータを送信するようですが、これまでのところ、Pythonでこれを設定する方法を理解できませんでした。これまでは、受信サーバーを最初に起動する必要があるクライアントとサーバーのコンボしかありませんでした。他の賢明な点として、クライアントはリスニングポートが開いていないとの例外を投げます。この問題を解決する方法はありますか?
多分私は複写する方法を考えています。だから私は誰か簡単なアイデアを掲示しています!
フロリアン
flightradar24.com github.com/MalcolmRobb/dump1090 virtualradarserver.co.uk/
あなたはすでに、なぜあなたは、単に[SSHに組み込まれたポートフォワーディング](http://blog.trackets.com/2014/05/17を使用していないSSHセッションを使用している場合/ssh-tunnel-local-and-remote-port-forwarding-explained-withexexamples.html)? –
@SteffenUllrich彼はすでにそれを使用しています。私のフロリアンへの質問は、「なぜ30003番ポートに直接sshフォワードしないのですか?"あなたのPiで、' ssh user @ vrs -R 13889:localhost:22'の代わりに 'ssh user @ vrs -R 30003:localhost:30003'を実行してみてください。 vrsのポート30003を開いてPiからストリームを取得するだけです。 – xhienne