如何通过SSH为不同网络上的设备设置Python Telnet代理?

2 投票
1 回答
1940 浏览
提问于 2025-04-17 07:30

概述:

我有一个设备在本地网络上,而有一台电脑在外部网络上。我想创建一个软件程序,让我能够从不同网络的电脑无缝连接到这个设备。为了更好地说明网络流动,我画了一张图。现在我需要帮助的是,开发这个解决方案需要哪些Python包。

详细信息:

我有一台电脑叫MYPC(IP地址192.168.0.168),它通过一个代理服务器(ROUTER1)连接到互联网。我对MYPC的环境有完全的控制,它运行的是Linux系统。

我还有一台电脑叫SOMESERVER(IP地址192.168.1.168),它也通过一个代理服务器(ROUTER2)连接到互联网。此外,SOMESERVER(IP地址10.0.0.159)还连接到一个本地网络(LOCAL)。SOMESERVER运行的是Windows系统。我对SOMESERVER的控制非常有限:我只能发送一个可执行文件到SOMESERVER,这个文件可以运行一次后就会被删除。我一开始不知道ROUTER2的互联网IP地址。

我有一个设备(DEVICE1)通过LOCAL连接到SOMESERVER(IP地址:10.0.0.157)。还有另一个设备(DEVICE2)也通过LOCAL连接到SOMESERVER(IP地址:10.0.0.158)。这两个设备都运行Linux。我在DEVICE(x)上可以使用Python,如果需要的话可以安装纯Python包。不过,我不能为DEVICE(x)编译程序。

我可以通过互联网使用SSH连接MYPC和SOMESERVER,连接是经过ROUTER1和ROUTER2的。我也可以通过本地网络(LOCAL)使用Telnet连接SOMESERVER和DEVICE1,以及SOMESERVER和DEVICE2。

我想发送一个程序到SOMESERVER,这样我就可以从MYPC无缝访问DEVICE1和DEVICE2,连接方式是SSH和Telnet。此外,我希望这个程序是用Python编写的。

这里有一张图,帮助解释上述问题: 问题的视觉解释

解决方案:

我认为我想要的解决方案如下。我需要帮助的是具体细节和可能需要的包。

第一部分:拨号客户端和服务器

为MYPC创建一个“拨号回家”服务器程序(DIAL_HOME_SERVER),它监听任何拨号回家的请求,然后使用SSH“拨入”任何拨号回家的SOMESERVER。

为SOMESERVER创建一个“拨号回家”客户端程序(DIAL_HOME_CLIENT),这个程序作为一个包被下载。

第二部分:代理服务器

为SOMESERVER创建一个SSH到Telnet的代理服务器程序(PROXY_SERVER),它监听来自MYPC的连接,并将这些连接转发到DEVICE(x)的Telnet连接。

感谢Greg Hewgill,听起来我可以使用Paramiko来编写SOMESERVER上的PROXY_SERVER代码。看起来Paramiko还需要PyCryto,它的Windows二进制文件可以在这里找到。

未来的稳健性

未来,Telnet连接将被SSH客户端(DEVICE(x)上的Dropbox)替代。

总结

我认为以上方案可以让MYPC“无缝”连接,但如何将这些程序组合在一起的细节我还不清楚。我已经知道如何使用Innosetup和/或py2exe打包Python程序。我希望能看到指向不同解决方案部分的链接,这样我就可以把它们整合在一起,然后发布出来。

提前感谢大家!

1 个回答

0

我得承认,我没有完全理解你描述的所有内容,特别是关于“拨号回家”的客户端/服务器部分。不过,你的图示看起来足够清晰,可以帮助理解。

  1. 在“router2”上设置端口转发,把进入的SSH端口转发到你的Windows服务器上。
  2. 写一个Python程序(你可能会觉得paramiko很有用),这个程序在你的Windows服务器上运行,监听SSH连接,并在后台打开一个telnet连接到你的某个设备。

我觉得这样就足够了。如果你的Windows服务器有奇怪的限制,比如只能运行一次可执行文件,然后就被删除,那似乎是另一个需要解决的问题,跟这个隧道问题没什么关系。

撰写回答