【发布时间】:2014-11-29 07:00:09
【问题描述】:
我有 4 个人的外部 IP。我想连接到他们的 IP 并从服务器获得响应。这很奇怪,因为对于这 4 个中的每一个,tcp 协议上的端口都不会连接,但是 udp 协议上的每个端口,这对于我自己的 IP 来说是不一样的。
import socket, sys
socket.setdefaulttimeout(8.5)
del sys.argv[0]
def connect_send_receive(host, port):
try:
s = socket.socket((socket.AF_INET, socket.SOCK_DGRAM) #On the Tcp protocol, no single port would connect to one of these 4 addresses.
s.connect((host, port))
s.send("I want you to dammit respond me something") #packet request says it all.
s.recv(1024) #Server response with nothing. Error here.
except:
print("No response")
for connect in sys.argv:
connect_send_receive(connect, 80)
我的问题很明确。 1.我如何让服务器给我一个响应,以及之后。 2. 为什么随机4个人只能用udp协议连接。我尝试了 tcp 上的每个端口,但没有连接,为什么即使我使用不同的 IP,我也可以使用 tcp 协议连接到自己。
注意:Http 请求不适用于这 4 个 IP。
【问题讨论】:
-
尝试使用 telnet 或 nc 等更简单的程序来查看您尝试使用的端口是否工作。可能是防火墙问题。
-
为什么应该任意主机接受随机端口上的连接?您是否知道这些端口中的任何一个是开放的,或者您究竟为什么期望得到响应?
-
UDP 的工作方式不同。 UDP 是一种无连接协议,因此没有像 TCP 那样明确的打开/关闭状态。您可以从 UDP 端口获得的唯一可靠信息是响应,这意味着显然有东西在该端口上侦听。如果你没有得到回应,你知道的和以前一样多。
-
他们需要启动某种允许通信的服务。可以是任何东西(理论上),来自 IRC、邮件服务器 (SMTP)、Skype、某些 LAN 即时消息服务……然后你需要说出那个协议——这比仅仅发送一个 ASCII 字符串要复杂得多.
-
如果您想要一个非常简单的 UDP 回显客户端和服务器示例,请查看:pymotw.com/2/socket/udp.html
标签: python sockets protocols response