# Echo server program
import socket
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.send(data)
conn.close()
使用低级网络接口,您实际上可以获得运行python解释器的服务器地址:
“套接字.gethostname():返回一个字符串,其中包含当前正在执行Python解释器的计算机的主机名。“
使用低级网络接口获取客户端ip
“插座.接受()接受连接。套接字必须绑定到地址并侦听连接。返回值是一对(conn,address),其中conn是一个新的套接字对象,可用于在连接上发送和接收数据,address是绑定到连接另一端的套接字的地址。“
More info on the low level network interface
从HTTP头获取客户端IP(如果提供html)
REMOTE_ADDR
是包含客户端ip地址的头,您应该首先检查它。在如果您的访问者正在通过代理,您还应该检查
HTTP_X_FORWARDED
报头。请注意,HTTP_X_FORWARDED
是一个数组,它可以包含多个逗号分隔的值,具体取决于代理的数量。在也要注意,你可能是被激怒了(Network Address Translation)。如果你的ip是内部的(10.x.x.x或192.168.x.x等等),你肯定在NAT路由器后面,只有你的外部ip才会暴露在网站上。在
下面是一个小的c代码片段,显示了如何确定客户机的ip,逻辑很容易转换python和服务器头是相同的:
^{pr2}$我找到了一个简单的解决方案:
这将返回连接到服务器的计算机的IP地址。在
相关问题 更多 >
编程相关推荐