REMOTE_ADDR

メタ変数 REMOTE_ADDR (CGI)

[15] CGIメタ変数 REMOTE_ADDR は、 クライアントIPアドレスを表します。

仕様書

[16] REMOTE_ADDR メタ変数の値をクライアントネットワーク番地に設定しなければなりません >>14

[17] 構文は次の通りです >>14

      REMOTE_ADDR  = hostnumber
      hostnumber   = ipv4-address | ipv6-address
      ipv4-address = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit
      ipv6-address = hexpart [ ":" ipv4-address ]
      hexpart      = hexseq | ( [ hexseq ] "::" [ hexseq ] )
      hexseq       = 1*4hex *( ":" 1*4hex )

[18] この定義は IPv4アドレスIPv6アドレスの本来の構文よりかなり緩い定義です。 仕様上、IPv6アドレスについては RFC 3513 の参照がありますが、 IPv4アドレスについては明記されていません。

[23] この値はを挟む場合などに最終的な受信者になるとは限らないことに注意が必要です。 >>22 その場合 X-Forwarded-For: (HTTP_X_FORWARDED_FOR) を使うのが一般的です。

[4] HTTP::Request::AsCGIREMOTE_ADDR を常に 127.0.0.1 とします。

歴史

[1] [NCSA]:

The IP address of the remote host making the request.

その要求を作った遠隔ホストの IP アドレス。

[2] [COAR 03]:

The IP address of the client sending the request to the server. This is not necessarily that of the user agent (such as if the request came through a proxy).

その要求をサーバーに送信したクライアントの IP アドレス。これは必ずしも利用者エージェントの IP アドレスである必要はありません。 (たとえばを通ってきた要求の場合。)

  • REMOTE_ADDR = hostnumber
  • hostnumber = ipv4-address | ipv6-address

The definitions of ipv4-address and ipv6-address are provided in Appendix B of RFC 2373 [13].

Servers MUST supply this value to scripts.

ipv4-address 及び ipv6-addressRFC2373 の付属書 B で提供されています。

サーバーはこの値をスクリプトに供給しなければなりません (MUST)

[3] ごらんのように、 [NCSA] では IPv6 アドレスの扱いが謎なんですが (そりゃぁその時代には存在してなかったんだから。)、 [COAR] ではそのままふつーに書けることが明確化しています。

IPv6アドレスは場面によっては [...] で括らなければなりませんが、 REMOTE_ADDR では括ってはいけないようです。

関連

[19] ドメイン名を値とするメタ変数 REMOTE_HOST もあります。

[20] SERVER_NAME ではIPv6アドレスは括弧で括られますが、 REMOTE_ADDR ではそうではありません。なぜ両者で違っているのかは不明です。