如何使用Django获取IPV6地址?

时间:2012-06-11 00:31:48

标签: python django ipv6 ipv4

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地址。

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

2 个答案:

答案 0 :(得分:4)

您只能获取用户用于访问您网站的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。

答案 1 :(得分:0)

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