gpt4 book ai didi

Python 认为我是不同的 IP

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:49 24 4
gpt4 key购买 nike

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

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

  2. 使用 socket.getaddrinfo(socket.gethostname(), None)[0][4][0]

如何查到访问者的真实IP?

最佳答案

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

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

使用底层网络接口(interface)获取客户端ip

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

# 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 header 获取客户端 IP(如果提供 html)

REMOTE_ADDR 是包含您应该首先检查的客户端 IP 地址的 header 。

您还应该检查 HTTP_X_FORWARDED header ,以防您的访问者正在通过代理。请注意,HTTP_X_FORWARDED 是一个数组,可以包含多个以逗号分隔的值,具体取决于代理的数量。

另请注意,您可能被 NATed ( Network Address Translation )。如果您的 IP 是内部 IP(例如 10.x.x.x 或 192.168.x.x),您肯定在 NAT 路由器后面,只有您的外部 IP 会暴露给网站。

这是一个小的 c# 片段,显示确定客户端的 ip,逻辑很容易转换 python 并且服务器 header 是相同的:

string clientIp = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if( !string.IsNullOrEmpty(clientIp) ) {
string[] forwardedIps = clientIp.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries );
clientIp = forwardedIps[forwardedIps.Length - 1];
} else {
clientIp = context.Request.ServerVariables["REMOTE_ADDR"];
}

关于Python 认为我是不同的 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2630371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com