繁体   English   中英

从外部(外部机器)访问使用python TCPServer编码的套接字

[英]Accessing a socket coded using python TCPServer from outside (external machine)

我正在使用TCPServer制作python服务器。 我可以做的事情是:
1.使用来自其他终端的curl(curl 10.157.41.14:8444 --data“ var1 = 10&var2 = 15”)
2.在Xming中使用firefox,然后输入“ localhost:8444”

问题是,当我尝试从外部访问服务器时,我无法
我以为这是代码问题,但是我的代码找不到任何错误。
这是我在python代码上配置主机和端口的方式:

from SocketServer import TCPServer, StreamRequestHandler
import socket

class MyRequestHandler(StreamRequestHandler):
    def handle(self):
        print "A client tried to connect";
        self.wfile.write("success/n this is a replay from the server");


server = TCPServer((socket.gethostname(), 8444), MyRequestHandler)
host, port = server.socket.getsockname()
address = host + ":" + str(port)
message = "Started string-length server at " + address
print message

server.serve_forever()


我尝试改变

server = TCPServer((socket.gethostname(), 8444), MyRequestHandler)

server = TCPServer('', 8444), MyRequestHandler);

并:

server = TCPServer('0.0.0.0', 8444), MyRequestHandler);

这些都不适合我的情况。 因此,我接下来要做的是尝试确定网络配置或防火墙是否存在问题。 问题是我不是这些产品的出口商。 这是我所做的:

user@ip-10-157-41-14:/var/www/server$ netstat -tnlpen | grep "8444\|PID"
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
    tcp        0      0 10.157.41.14:8444       0.0.0.0:*               LISTEN      1014       106226915   31541/python

然后,我这样做是为了了解有关防火墙的更多信息:

user@ip-10-157-41-14:/var/www/server$ sudo iptables -L
[sudo] password for user:
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

我做的另一件事是打开两个终端(在同一台机器上)
在终端1上,我做了“ nc -l 5000”
在终端2上,我做了“ nc 10.157.41.14 5000”
它似乎有效。 但是我无权访问另一台Linux机器以从另一台机器尝试。

问题是我不理解上面的两个命令。 我花了数小时试图在stackoverflow和其他站点上搜索解决方案,但没有找到适合我的解决方案。

过去(在同一台机器上),我能够编写cgi python服务器,并在其中使用ajax调用对其进行调用,但是我必须在所使用的python的同一目录中写入.htaccess文件。 以下是我的.htaccess文件:

Options +ExecCGI
AddHandler cgi-script .py

但是我现在遇到的问题是完全不同的问题。

我的问题原来是特定于Amazon EC2的问题。
我在Amazon EC2中的实例中运行服务器
Amazon实例位于具有IP的虚拟私有云(VPC)中。
您可以决定实例是暴露于Internet还是保持私有状态。
因此,在EC2实例之上还有一个额外的保护级别。
在EC2控制台中,您可以指定打开的端口号,并关闭其他端口号。
在实例级别执行什么操作都没有关系,因为仪表板中的配置不允许打开端口。 因此,基本上,我向Amazon EC2中的安全组添加了开放端口,并且运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM