ServletRequest.getRemoteAddr を使用して、ユーザーのIPアドレスに基づいて認証するJava EEアプリケーションの変更に取り組んでいます。 IPアドレスの範囲(FROM_IPおよびTO_IP)はデータベースに保存され、ユーザーのIPアドレスが範囲内にある場合にのみシステムが認証されます。
現在、テスターは、FROM_IPとTO_IPの値(任意の場所)で数字0(ゼロ)を使用できないことを指摘しています。これはインターネット向けのアプリケーションなので、パブリックIPアドレスのみを取得することに注意してください。
テスターはその検証を提案するのは正しいですか? 167.23.0.1〜167.23.255.255のように、範囲値にゼロを設定できないのはなぜですか?
いいえ、完全に正しくありません。
実際、これは有効なIPアドレスです:192.168.24.0
そのまま 167.23.0.1
。
IPアドレスを点線のセグメントに分離することは、純粋に人間の表示に便利です。覚えやすいです192.168.1.42
より3232235818
。
コンピュータにとって重要なのは、分離(ネットマスク)です。アドレスのホストセクションが完全に0または1に設定されたホストアドレスを持つことは無効です。
したがって、192.168.24.0は、一部のビットがホスト部分で設定されるネットマスクである限り。次の計算を参照してください。
michael@challenger:~$ ipcalc 192.168.24.0/16
Address: 192.168.24.0 11000000.10101000. 00011000.00000000
Netmask: 255.255.0.0 = 16 11111111.11111111. 00000000.00000000
Wildcard: 0.0.255.255 00000000.00000000. 11111111.11111111
=>
Network: 192.168.0.0/16 11000000.10101000. 00000000.00000000
HostMin: 192.168.0.1 11000000.10101000. 00000000.00000001
HostMax: 192.168.255.254 11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255 11000000.10101000. 11111111.11111111
Hosts/Net: 65534 Class C, Private Internet
この場合、アドレス部分(右側)には2ビットが設定されています。これは、192.168.0.0/16サブネットの有効なホストアドレスです。
michael@challenger:~$ ipcalc 192.168.24.255/16
Address: 192.168.24.255 11000000.10101000. 00011000.11111111
Netmask: 255.255.0.0 = 16 11111111.11111111. 00000000.00000000
Wildcard: 0.0.255.255 00000000.00000000. 11111111.11111111
=>
Network: 192.168.0.0/16 11000000.10101000. 00000000.00000000
HostMin: 192.168.0.1 11000000.10101000. 00000000.00000001
HostMax: 192.168.255.254 11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255 11000000.10101000. 11111111.11111111
Hosts/Net: 65534 Class C, Private Internet
この場合、アドレス部分には10ビットが設定され、6ビットは設定されていません。これは、同じサブネット内の別の有効なホストアドレスです。
michael@challenger:~$ ipcalc 192.168.24.0/24
Address: 192.168.24.0 11000000.10101000.00011000. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.24.0/24 11000000.10101000.00011000. 00000000
HostMin: 192.168.24.1 11000000.10101000.00011000. 00000001
HostMax: 192.168.24.254 11000000.10101000.00011000. 11111110
Broadcast: 192.168.24.255 11000000.10101000.00011000. 11111111
Hosts/Net: 254 Class C, Private Internet
この場合、アドレス部分にはゼロビットが設定されています。これは、192.168.24.0/24ネットワークでは有効なホストアドレスではありません。
私が誤解していない限り、あなたのテスターは完全に間違っています。有効なIPアドレスには確かに0を含めることができます。
一般的には、いいえ、アドレスに0が含まれているかどうかは関係ありません。
ただし、テスターが言っていることには細かい点があります。場合によっては、古いまたは壊れたネットワーク機器は、最後のオクテストで0のアドレスで正しく機能しません。これは、古いクラスフルルーティングルールによるものです。 Classfullルーティングでは、アドレスの最初のオクテットからネットマスクを確認できます。機器が依然としてクラスフルルーティングルールに従っている場合、200.100.1.0/16のようなアドレスを誤って処理する可能性があります。
1つの範囲で510のIPアドレスが必要で、ネットワークアドレスが192.1.1.0であるとします。/23サブネットがあり、そのホストIPの1つが.0 IPアドレスであり、.0アドレスの場合、テスターは間違っています。ホストアドレスです。あなたが/ 24ネットワークを持っているなら、それが間違っていたと言うのは正しいでしょう。
非常に単純な答えを提供するには:IPアドレスの1つ以上のゼロは、それらのアドレスがネットワークまたはブロードキャストアドレスでない限り、ホストアドレスに対して完全に有効です。
ネットワークアドレスとブロードキャストアドレスは有効なIPアドレスですが、ホストでは使用できません。