连接服务器的客户端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\n
? socket.send
有什么不正确的地方?
关于换行符,是的 - HTTP 行由 \r\n
终止。关于socket.send
,不能保证它会发送传递给它的整个字符串。它最多发送整个字符串并返回它发送的字节数。您必须检查返回值并通过再次尝试未发送的任何字节来处理短发送。或使用socket.sendall
。我跳过了代码中更微妙的问题,比如缺少EINTR
错误处理代码......
【参考方案1】:
要获取 mysock 的 IP 和端口,只需执行以下操作:
ip, port = mysock.getsockname()
同样,要获取有关它所连接的对等方的相同信息:
ip, port = mysock.getpeername() # 'example.ir', 80
【讨论】:
以上是关于连接服务器的客户端IP的主要内容,如果未能解决你的问题,请参考以下文章