【发布时间】:2014-05-14 06:09:37
【问题描述】:
我正在使用 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 机器以从另一台机器上进行尝试。
问题是我不明白上面的2个命令。我花了几个小时试图在 stackoverflow 和其他网站上搜索解决方案,但没有找到适合我的解决方案。
在过去(在同一台机器上),我能够编写 cgi python 服务器,我使用 ajax 调用来调用它,但我必须在我使用的 python 的同一目录中编写一个 .htaccess 文件。以下是我的 .htaccess 文件:
Options +ExecCGI
AddHandler cgi-script .py
但我现在遇到的问题是完全不同的问题。
【问题讨论】:
-
"from outside"是什么意思?同一本地子网上的另一台机器?还是从您的 NAT 路由器外部? -
不,这意味着“一台具有不同 IP 地址的机器”我正在使用 Amazon EC2 作为我的服务器并使用 ssh 连接到它。客户端是我正在使用的 Windows 机器上的浏览器。
-
您究竟是如何通过 SSH 连接到它的(从家里)? 10.157.41.14 不是公共的、可通过 Internet 路由的 IP 地址。您的 EC2 实例是否有公共 IP?
-
是的,我在发布之前更改了 IP,这样黑客就无法使用这篇文章来对付我了。所以,是的,我拥有的 IP 是公共 IP,但我没有发布我正在使用的确切 IP。 ip没有问题。但我认为因为我发布了我正在使用的防火墙配置和端口,所以更改 IP 是个好主意。所以一切都没有改变,但IP改变了
标签: python sockets amazon-ec2 firewall iptables