Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python和SSH连接的开放端口进行TCP-IP通信_Python_Sockets_Tcp_Ssh - Fatal编程技术网

通过Python和SSH连接的开放端口进行TCP-IP通信

通过Python和SSH连接的开放端口进行TCP-IP通信,python,sockets,tcp,ssh,Python,Sockets,Tcp,Ssh,这是Python中基于TCP的通信的新手问题。我试图通过SSH隧道和Python套接字模块在两个*NIX系统之间建立基于TCP的通信。我使用了Python MOTW网站上的前两个示例“echo服务器”和“echo客户端”: 在同一个*NIX系统(HOST1)上,通信工作正常,但在ssh隧道上失败 我用ssh-L 10000:HOST2:10000登录到第二个*NIX系统USERNAME@HOST2。然后,我在HOST2上为服务器启动python脚本,在HOST1上为客户机启动脚本,并尝试以相同的

这是Python中基于TCP的通信的新手问题。我试图通过SSH隧道和Python套接字模块在两个*NIX系统之间建立基于TCP的通信。我使用了Python MOTW网站上的前两个示例“echo服务器”和“echo客户端”:

在同一个*NIX系统(HOST1)上,通信工作正常,但在ssh隧道上失败

我用ssh-L 10000:HOST2:10000登录到第二个*NIX系统USERNAME@HOST2。然后,我在HOST2上为服务器启动python脚本,在HOST1上为客户机启动脚本,并尝试以相同的方式建立通信。这是我在stderr上看到的:

python test_socket_client.py 
connecting to localhost port 10000
Traceback (most recent call last):
File "test_socket_client.py", line 10, in <module>
sock.connect(server_address)
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused
python测试\u socket\u client.py
连接到本地主机端口10000
回溯(最近一次呼叫最后一次):
文件“test_socket_client.py”,第10行,在
sock.connect(服务器地址)
文件“”,第1行,在connect中
socket.error:[Errno 111]连接被拒绝
当我分别在主机1和主机2上启动服务器和客户端时,我收到了相同的消息


我做错了什么?

我会检查您的服务器是否在服务器主机上侦听,以及ssh客户端是否在客户端主机上侦听。您可以运行
netstat-tnlp
来检查这一点


您确定在运行客户端时ssh客户端仍处于打开状态吗。您需要在一个终端中运行shh,在另一个终端中运行客户端,或者运行
ssh-Nf
,这会导致ssh在经过身份验证后转到后台。

您的服务器将其套接字绑定到localhost:10000,这意味着它只侦听来自环回接口的连接。SSH命令行指示SSH通过隧道将本地连接连接到端口10000,再将连接到主机2:10000。客户端Python程序连接到localhost:10000,然后SSH链接的远程端尝试连接到HOST2:10000。即使它与套接字绑定到的端口和机器相同,但它是一个不同的接口,套接字不监听它

将SSH命令行更改为
SSH-L 10000:localhost:10000USERNAME@HOST2
,或将服务器的侦听套接字绑定到所有接口:
服务器地址=('',10000)
。空字符串用作INADDR_ANY


当然,Gary van der Merwe所说的是对的:在HOST1上运行客户端Python程序时,SSH需要运行。

这对我帮助很大。谢谢你的提示。