IPv4アドレスの一部をゼロに設定することは有効ですか?


36

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などの範囲値にゼロを設定できないのはなぜですか?


11
また、サブネット仕組みへの必須リンクは次のとおりです。質問。

8
IPv6アドレスに1ダースの0が含まれている場合、テスターがこれを表示するのは驚くべきことです。PS手遅れにならない場合は、IPアドレスフィールドをIPv6アドレスに合わせる必要があります。将来、頭痛の種を省くことができます。
マークヘンダーソン

2
127.0.0.1には2つのゼロがありますか?
ジョンスミス

1
ところで、上に表示私自身のIPアドレスwhatismyipaddress.comは、その中に0(67.xx.0.xx)がある
Ritesh

回答:


70

いいえ、それらは完全に間違っています。

実際、これは有効な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ネットワークの有効なホストアドレスではありません。


11
この答えにジャンプしますが、これは正しいです。追加のポイントを追加します。IPアドレスの「ドット付きクワッド」形式は、正規ではありますが、唯一の表現形式ではありません。コマンドを試してくださいping 2130706432、またはping 017700000001(はい、Windowsでも)。結果に驚くかもしれません。
BMD11年


1
ここで言われていることは確かに真実ですが、残念ながら、プレフィックスの長さに関係なく、末尾のゼロ(または255)が悪いと考えるユーザーインターフェイスが非常に多い場合もあります。
テオブロマカカオ

1
192.168.0.257は正しくありません192.168.257が、192.168.1.1(のように192.11010305)正しい表現です。をご覧くださいinet_aton(3)
BMD11年

2
@Raffael:サブネットゼロは、実際にはクラスフルルーティング時代からのホールドオーバーでした。たとえば、クラスBネットワーク(129.97.0.0/16)の場合、ゼロサブネットはビット17→Xがすべてゼロに設定されたネットワークになります(Xはサブネットの長さです)。したがって、ネットワーク129.97.0.0/24はゼロサブネットになり、初期には許可されませんでした。最近(ありがたいことに)CIDRを使用していますが、心配する必要はありません。
MikeyB

16

私が誤解していない限り、あなたのテスターは間違っています。有効なIPアドレスには、必ず0を含めることができます。


12

一般的に:いいえ、アドレスに0が含まれているかどうかは関係ありません。

ただし、テスターが言っていることには真実があります。場合によっては、古いまたは破損したネットワーク機器は、最後のoctestに0が含まれるアドレスでは正しく機能しません。これは、古いクラスフルルーティングルールによるものです。クラスフルルーティングでは、アドレスの最初のオクテットからネットマスクを伝えることができます。それでも機器がクラスフルルーティングルールに従っている場合、200.100.1.0 / 16のようなアドレスを誤って処理する可能性があります。


3

1つの範囲で510個のIPアドレスが必要で、ネットワークアドレスが192.1.1.0で、/ 23サブネットがあり、そのうちホストIPの1つが.0 IPアドレスであり、.0アドレスの場合はテスターが間違っているとしますホストアドレスです。/ 24ネットワークがある場合、それが間違っていると言うのは正しいでしょう。


2

非常に簡単な答えを提供するには:IPアドレスの1つ以上のゼロは、それらのアドレスがネットワークまたはブロードキャストアドレスでない限り、ホストアドレスに対して完全に有効です。

ネットワークおよびブロードキャストアドレスは有効なIPアドレスであり、ホストでは使用できません。


1
XY0.255のブロードキャストアドレスはどうですか?
Random832

2
ホストのネットワークアドレスを使用できますが、これはかつて「リートネス」の一般的なテストでした。ありがたいことに、それはそれ以来、流行から大きく落ちています。同様に、RFC 3021 では、/ 31で「ブロードキャスト」アドレス「ネットワーク」アドレスの両方を使用できますが、2つのホストのみを扱う場合は、この用語はほぼ適切ではありません。
BMD11年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.