【问题标题】:Simple Python TCP server not working on Amazon EC2 instance简单的 Python TCP 服务器在 Amazon EC2 实例上不起作用
【发布时间】:2014-08-11 00:30:46
【问题描述】:

我试图在我的 EC2 上运行一个简单的 Python TCP 服务器,侦听端口 6666。我创建了一个入站 TCP 防火墙规则来打开端口 6666,并且对传出端口没有限制。

我无法从外部世界连接到我的实例,但是使用 telnet 或 netcat 进行测试永远无法建立连接。但是,如果我从 localhost 建立连接,一切都会奏效。

关于什么可能是错误的任何想法?

#!/usr/bin/env python import socket TCP_IP = '127.0.0.1' TCP_PORT = 6666 BUFFER_SIZE = 20 # Normally 1024, but we want fast response s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((TCP_IP, TCP_PORT)) s.listen(1) conn, addr = s.accept() print 'Connection address:', addr while 1: data = conn.recv(BUFFER_SIZE) if not data: break print "received data:", data conn.send(data) # echo conn.close()

【问题讨论】:

  • 您是如何添加入站 TCP 防火墙规则的?您是否修改了与此实例关联的安全组?
  • 在尝试从外部联系您的服务器时,您使用的是内部还是外部 EC2 地址?
  • 我使用的是“ifconfig eth0”显示的ip地址
  • 是的,我修改了实例的默认安全组。

标签: python amazon-web-services tcp amazon-ec2 firewall


【解决方案1】:

您的 TCP_IP 仅在本地侦听,因为您将侦听 IP 设置为 127.0.0.1。
设置TCP_IP = "0.0.0.0",它将侦听“所有”接口,包括您面向外部的 IP。

【讨论】:

  • 也许你可以看到你想暴露的接口的ip并分配给TCP_IP常量
  • 如果您确实为面向外部的 IP 分配了实际 IP,您需要确保它是静态 IP 地址。 0.0.0.0 只是解决问题的最快方法,因为他的防火墙规则只暗示了一个接口。
  • 感谢 Max,很好的建议,但我仍然无法达到。 AWS 本身一定有什么阻碍。
  • 确保在安全组设置中,您的源 IP 地址正确设置为 CIDR 表示法中的 WAN IP 地址。出于测试目的,您可以将防火墙规则中的源 IP 地址设置为 0.0.0.0/0,这将向所有人开放端口 6666(因此您不会在生产中使用它)。如果您的 EC2 实例不是由 Amazon 构建的,您可能需要运行“sudo iptables -L”以查看是否有本地防火墙规则也阻止了您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 2013-02-21
  • 2014-11-25
  • 2021-05-04
  • 2014-05-03
  • 2013-10-06
相关资源
最近更新 更多