【问题标题】:How do I get IPV6 address with Django?如何使用 Django 获取 IPV6 地址?
【发布时间】:2012-06-11 00:31:48
【问题描述】:

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

这是我用来保存数据的视图:

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

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

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

【问题讨论】:

    标签: python django ipv6 ipv4


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 谢谢!这就是我需要知道的! :)
    【解决方案2】:

    记住,当您拥有 IPv4 时,您可以检索匹配的 IPv6。 IPv4 是 IPv6 的子网,因此转换为 v6 非常简单。然后,您将向您的服务器发送一个 HTTP 请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2016-01-12
      • 2019-01-16
      • 2014-01-11
      • 2021-06-21
      相关资源
      最近更新 更多