Python认为我是另一个IP

2024-06-23 19:37:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图设置一个显示访问者IP的页面。我尝试过的所有方法显示的IP与我的计算机的IP不同。我试过:

  1. 正在查找http://www.whatismyip.com/automation/n09230945.asp

  2. 使用地址地址(套接字.gethostname(),无)[0][4][0]

如何才能找到访问者的真实IP地址?在


Tags: 方法ipcomhttp地址www计算机页面
2条回答

使用低级网络接口,您实际上可以获得运行python解释器的服务器地址:

套接字.gethostname():返回一个字符串,其中包含当前正在执行Python解释器的计算机的主机名。

使用低级网络接口获取客户端ip

插座.接受()接受连接。套接字必须绑定到地址并侦听连接。返回值是一对(conn,address),其中conn是一个新的套接字对象,可用于在连接上发送和接收数据,address是绑定到连接另一端的套接字的地址。

# 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()

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}$

我找到了一个简单的解决方案:

import getenv
print getenv("REMOTE_ADDR")

这将返回连接到服务器的计算机的IP地址。在

相关问题 更多 >

    热门问题