5

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アドレスを選択しないと思います。

あなたが私に与えることができるどんな助けからも前もって感謝します。

4

2 に答える 2

5

ユーザーがサイトへのアクセスに使用した IP アドレス (つまり、IPv4またはIPv6) のみを取得できますが、両方を取得することはできません。現在の IP アドレスは、request.META['REMOTE_ADDR']

ただし、両方を取得するかなり簡単な方法があります。

  • IPv4/6 経由でのみ到達可能な2v4.yourdomain.tldのサブドメインを作成します。v6.yourdomain.tld
  • 実際のページで、ユーザーに関連付けられたランダム トークンを生成し、スクリプト タグを作成します。

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

    ユーザーが IPv4 経由でページにアクセスした場合は を使用し、それ以外の場合は を使用X=6しますX=4

  • サブドメインの 1 つにアクセスするときに実行されるコードで、トークンによって識別されるユーザーの IP をログに記録します。
于 2012-06-11T00:38:36.897 に答える
0

IPv4を使用している場合は、一致するIPv6を取得できることを思い出してください。IPv4はIPv6のサブネットであるため、v6への変換は非常に簡単です。次に、サーバーへのHTTPリクエストを惜しみません。

于 2012-10-03T09:19:14.903 に答える