【问题标题】:IP of client that connect to server连接服务器的客户端IP
【发布时间】:2014-06-11 23:19:01
【问题描述】:

我有一个套接字,我通过它连接到一个网页并得到一些东西。

import socket

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('example.ir', 80))
mysock.send('GET http://example.ir/index.php HTTP/1.0\n\n')
while True:
    print"##########################"
    data = mysock.recv(512)
    if ( len(data) < 1 ) :
        break
    print data

mysock.close()

现在,我想知道,mysock 的端口和 IP 是什么?
mysocket 使用什么 IP 和端口连接到 example.ir?

【问题讨论】:

  • 你的例子坏了。它错误地使用了socket.send。它还错误地使用了 HTTP 协议。考虑使用更高级别的网络库,该库具有更少的细微陷阱,并且可以为您实现正确的 HTTP 字节格式等无聊的低级功能。
  • @Jean-PaulCalderone \n 而不是 \r\nsocket.send 有什么不正确的地方?
  • 关于换行符,是的 - HTTP 行由 \r\n 终止。关于socket.send,不能保证它会发送传递给它的整个字符串。它最多发送整个字符串并返回它发送的字节数。您必须检查返回值并通过再次尝试未发送的任何字节来处理短发送。或使用socket.sendall。我跳过了代码中更微妙的问题,比如缺少EINTR错误处理代码......

标签: python sockets networking ip port


【解决方案1】:

要获取 mysock 的 IP 和端口,只需执行以下操作:

ip, port = mysock.getsockname()

同样,要获取有关它所连接的对等方的相同信息:

ip, port = mysock.getpeername()  # 'example.ir', 80

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 2012-08-31
    • 2017-08-04
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多