TCP上的Python流数据

时间:2016-12-12 14:12:01

标签: python sockets ssh tcp stream

我刚遇到一个严重的网络问题。我正在设置一个虚拟雷达服务器,其中至少有一个RasPi作为ADS-B接收器。只是为了解释这是什么:飞机在公共频率(1080MHz)上传输位置数据,我想显示它。它像Flightradar24一样。

在我的Pi上,我从Malcolm Robb运行dump1090,它通过SDR设备(DVB-T棒)拦截这些传输,并提供带有解码数据的网络流。如果您只是在Pi的端口30003上进行远程登录,则可以观看此流。到目前为止,非常好。

在第二台计算机上,Virtual Radar Server(短VRS)正在运行。它主要是一个Web服务器,它显示在所描述的PI端口上接收的数据。在我的本地局域网中也可以使用。

但知道是棘手的部分。 Pi通常位于路由器/防火墙后面,没有端口转发,因此VRS无法连接该TCP流。我已经设法建立反向SSH连接以再次在telnet中打开该流,但由于这是在Pi上运行的telnet会话而且只是远程控制的VRS可以使用它。

现在我的想法是拦截来自VRS机器上的反向SSH的数据,并使用Python脚本来读取它并提供新的本地TCP流。所以在理论上,VRS可以阅读它。

我的第一个问题是如何拦截连接。我在Python中找到了两种方法。你更喜欢哪一个,或者你有更好的想法?

方法1

import os
os.system("ssh pi@localhost -p 13889 telnet localhost 30003

方法2

import subprocess
subprocess.call("ssh pi@localhost -p 13889 telnet localhost 30003")

但是我如何才能进一步努力?

下一个问题是关于设置TCP流。 Dump1090似乎一直发送数据但到目前为止我无法弄清楚如何在Python中设置它。到目前为止,我只有一个客户端服务器组合,其中接收服务器需要首先启动。另外,客户端会抛出一个监听端口未打开的例外。有什么方法可以解决这个问题吗?

也许我正在考虑如何应对。所以我有一个更容易的想法,发布它!

弗洛里安

flightradar24.com github.com/MalcolmRobb/dump1090 virtualradarserver.co.uk /

1 个答案:

答案 0 :(得分:0)

虽然我不是ssh和tunelling的高手,但我只会回答第二部分:使用Try / Except一些延迟来建立连接。

实施例

import time

connected = False
while not connected:
    try:
        # connect whatever you like
        connected = True
    except IOError: # or any other exception you get from connecting
        time.sleep(5) # or any other value
        print('Could not connect, retrying...')