2012-06-11 2 views
3

Django et tout fonctionne sur un serveur. Lorsqu'un utilisateur de sa machine locale accède à l'application, j'ai besoin de sauvegarder les IPV4 et IPV6 de cette machine locale dans un formulaire.Comment obtenir l'adresse IPV6 avec Django?

est la vue que je utilise pour enregistrer des données:

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

Mais avec ce point de vue je ne sais pas si le champ que je utilise pour enregistrer le IPV4 est la cueillette que l'adresse IPV4 de où Django est en cours d'exécution, qui est le serveur. Je suppose qu'il ne choisira pas l'adresse IPV4 de la machine locale dont j'ai besoin.

Merci d'avance de toute aide que vous pouvez me donner.

Répondre

4

Vous ne pouvez obtenir que l'adresse IP utilisée par l'utilisateur pour accéder à votre site, à savoir IPv4 ou l'IPv6 mais pas les deux. L'adresse IP actuelle est disponible via request.META['REMOTE_ADDR']

Cependant, il y a plutôt moyen facile d'obtenir à la fois:

  • Créer deux sous-domaines, v4.yourdomain.tld et v6.yourdomain.tld qui sont uniquement accessible via IPv4/6.
  • Sur votre page réelle, générer un jeton aléatoire qui est associé à l'utilisateur et créer une balise de script:

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

    Si l'utilisateur a accédé à votre page via IPv4, utilisez X=6, sinon X=4.

  • Dans votre code qui s'exécute lors de l'accès à l'un des sous-domaines, consignez l'adresse IP de l'utilisateur identifié par le jeton.
+0

Merci! C'est ce que j'avais besoin de savoir! :) –

0

Il serait judicieux de rappeler que lorsque vous avez un IPv4, vous pouvez récupérer l'IPv6 correspondant. IPv4 est un sous-réseau de IPv6 donc la traduction en v6 est assez simple. Vous épargneriez alors une requête HTTP à votre serveur.