连接服务器的客户端IP

Posted

技术标签:

【中文标题】连接服务器的客户端IP【英文标题】:IP of client that connect to server 【发布时间】: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错误处理代码...... 【参考方案1】:

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

ip, port = mysock.getsockname()

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

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

【讨论】:

以上是关于连接服务器的客户端IP的主要内容,如果未能解决你的问题,请参考以下文章

连接服务器的客户端IP

php socket 获取客户端ip地址

如何通过Socket获得所有客户端连接的IP地址

如何通过 IP 地址连接 Firefox 扩展中的 websocket 客户端

java服务端如何获得客户端的ip

Cisco实验:DHCP配置客户端跨网段通过DHCP服务器自动获取动态IP和固定IP地址