python - 我如何使用 Django 获取 IPV6 地址?

标签 python django ipv6 ipv4

Django 和一切都在服务器上运行。当用户从他/她的本地机器访问应用程序时,我需要将这台本地机器的 IPV4 和 IPV6 保存到一个表单中。

这是我用来保存数据的 View :

def t031003form_save(request):
    form = T031003Form(request.POST or None, request.FILES or None)
    if request.method == 'POST':
        if form.is_valid():
            form = form.save(False)
            form.C003LOGB = datetime.date.today()
            form.C003LOGD = socket.gethostbyname(socket.gethostname())
            form.save()
            form = T031003Form()
        else:
           return HttpResponseRedirect('/erro/')
    return render_to_response('T031003Form_save.html', {'form': form,}, context_instance=RequestContext(request))

但在这个 View 中,我不确定我用来保存 IPV4 的字段是否仅从运行 Django 的地方(即服务器)选择 IPV4 地址。我猜它不会从我需要的本地机器上选择 IPV4 地址。

非常感谢您能给我的任何帮助。

最佳答案

您只能获取用户用于访问您网站的 IP 地址,即 IPv4 IPv6,但不能同时获取两者。当前 IP 地址可通过 request.META['REMOTE_ADDR']

获得

但是,有一种相当简单的方法可以同时获得两者:

  • 创建两个子域,v4.yourdomain.tldv6.yourdomain.tld只能通过 IPv4/6 访问。
  • 在您的实际页面上,生成与用户关联的随机 token 并创建脚本标签:

    <script src="//vX.yourdomain.tld/?token=YYY"></script>
    

    如果用户通过 IPv4 访问您的页面,请使用 X=6,否则使用 X=4

  • 在访问其中一个子域时运行的代码中,记录由 token 标识的用户的 IP。

关于python - 我如何使用 Django 获取 IPV6 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973493/

相关文章:

python - BeautifulSoup,Python 3,编码错误

python - 如何使用 django orm 将数据插入到多个表中

python - 检查 IP 地址

python - 有条件的 Django 模型创建

python - 使用 'argparse' 而不是 sys.argv

python - 如何在Python循环执行中减少和增加循环范围 'i'变量

python - 这个 lambda 函数有什么作用?

python - Selenium -socket.error : [Errno 111] Connection refused

java - 如何将 IPv6 地址转换为二进制字符串?

sockets - 在 C 中使用套接字如何将消息从 IPv6 发送到 IPv4?