IPv4 adresinin bir kısmının sıfıra ayarlanması geçerli midir?


36

ServletRequest.getRemoteAddr kullanarak kullanıcının IP adresine göre kimlik doğrulaması yapacak bir Java EE uygulamasında bir değişiklik üzerinde çalışıyorum . IP adres aralıklarını (FROM_IP ve TO_IP) bir veritabanında saklıyoruz ve sistem sadece bir kullanıcının IP adresi bir aralığa düşerse kimliğini doğrular.

Şimdi, test uzmanları FROM_IP ve TO_IP değerlerinde (herhangi bir yerde) 0 (sıfır) rakamına izin verilmemesi gerektiğini belirtmişlerdir. Bunun İnternet'e yönelik bir uygulama olduğunu ve yalnızca genel IP adresleri alacağımızı unutmayın.

Test edenler bu doğrulamayı önermekte haklı mı? 167.23.0.1 - 167.23.255.255'te olduğu gibi değer aralığında neden sıfır olamıyoruz?



8
Bir IPv6 adresi bir düzine 0 içerebiliyorsa, testçilerinizin bunu ortaya çıkarması şaşırtıcıdır. PS Çok geç değilse, IP adres alanınızı gerçekten IPv6 adreslerine uygun hale getirmelisiniz. Gelecekte kendinizi baş ağrılarından kurtaracaksınız.
Mark Henderson

2
127.0.0.1'de iki tane sıfır var mı?
John Smith

1
Bu arada, gösterilmesini kendi IP adresi whatismyipaddress.com onun içinde 0 (67.xx.0.xx) sahiptir
Ritesh

Yanıtlar:


70

Hayır, tamamen yanlışlar.

Aslında, bu geçerli bir IP adresi: 192.168.24.0

Olduğu gibi 167.23.0.1.

IP adresinin noktalı parçalara ayrılması, görüntüleme için tamamen insani bir rahatlıktır. Hatırlanması gereken çok daha kolay 192.168.1.42daha 3232235818.

Bilgisayarlar için önemli olan ayrımdır (ağ maskesi). Tamamen 0 veya 1 olarak ayarlanmış adresin host bölümü ile bir host adresinin olması geçerli değildir.

Bu nedenle, ağ maskesi, bazı parçaların ana bilgisayar kısmında ayarlandığı şekilde olduğu sürece, 192.168.24.0. Aşağıdaki hesaplamalara bakın:


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

Bu durumda, adres kısmının (sağ taraf) 2 bit ayarı vardır. Bu, 192.168.0.0/16 alt ağındaki geçerli bir ana bilgisayar adresidir.


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

Bu durumda, adres kısmı 10 bit ayarlanmış ve 6 bit ayarlanmamış. Bu, aynı alt ağdaki başka bir geçerli ana bilgisayar adresidir.


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

Bu durumda, adres kısmının ayarlanmış sıfır biti vardır. Bu, 192.168.24.0/24 ağındaki geçerli bir ana bilgisayar adresi değil.


11
Ek bir nokta eklemek için doğru olan bu cevaba atlayacağım: IP adresleri için "noktalı dörtlü" biçim, kurallı olsa da, tek gösterim biçimi değildir. Komutu deneyin ping 2130706432veya ping 017700000001(evet, Windows'ta bile). Kendinizi sonuçlar karşısında şaşırtabilirsiniz.
BMDan


1
Burada söylenenler gerçekte doğru olsa da, maalesef, önek uzunluğuna bakılmaksızın son sıfıra (ya da 255) kötü geldiğini düşünen çok sayıda kullanıcı arabirimi olduğu durum söz konusudur.
Theobroma Cacao

1
192.168.0.257yanlış, ancak (olduğu gibi ) 192.168.257doğru bir temsilidir . Bakın . 192.168.1.1192.11010305inet_aton(3)
BMDan

2
@Raffael: subnet zero aslında sınıflandırma yönlendirme günlerinden bir tutucuydu. Örneğin, B Sınıfı bir ağa (129.97.0.0/16) sahip olduğunuzda sıfır alt ağ, tümü 17'ye (X, alt ağın uzunluğu olan) sıfıra ayarlanmış bitler olan herhangi bir ağ olacaktır. Böylece, ağ 129.97.0.0/24 sıfır bir alt ağ olacak ve ilk günlerde yasaklanacaktı. Günümüzde (neyse ki) CIDR kullanıyoruz ve bunun için endişelenmeyin.
MikeyB

16

Yanlış anlamadığım sürece, test cihazların yanlış öldü. Geçerli IP adreslerinde kesinlikle 0 olabilir.


12

Genel olarak: Hayır, adreste 0 olup olmaması farketmez.

Ancak, testçilerinizin söylediklerinde bir doğruluk derecesi var. Bazı durumlarda eski veya bozuk ağ ekipmanı son sekizde 0 olan adreslerde düzgün çalışmayacaktır. Bu eski sınıf yönlendirme kurallarından kaynaklanmaktadır. Classfull yönlendirmesinde, ağ maskesini adresin ilk basamağından anlatabilirsiniz. Ekipman hala sınıfsal yönlendirme kurallarına uyuyorsa, 200.100.1.0/16 gibi bir adresin yanlış kullanılması muhtemeldir.


3

Diyelim ki bir aralıkta 510 IP adresine ihtiyacınız var ve ağ adresiniz 192.1.1.0, diyelim ki, ana IP adreslerinden biri .0 IP adresi olan / 23 alt ağına sahip olacaksınız. bir ana bilgisayar adresidir. Eğer bir / 24 ağınız varsa, yanlış olduğunu söylemek doğru olacaktır.


2

Çok basit bir cevap sağlamak için: Bir ip adresindeki bir veya daha fazla sıfır, bu adresler ağ veya yayın adresi olmadığı sürece, ana bilgisayar adresleri için mükemmel şekilde geçerlidir.

Ağ ve yayın adresleri geçerli ip adresleridir, yalnızca ana bilgisayarlar tarafından kullanılamazlar.


1
XY0.255’in yayın adresi ne olacak?
Random832,

2
Ağ adresini bir ana bilgisayar için kullanabilirsiniz ve bunu yapmak bir zamanlar ortak bir "zerafet" sınavıydı. Neyse ki, olsa da, o zamandan beri moda düştü. Benzer şekilde, RFC 3021 hem "yayın" kullanımına izin ve sadece başlamak için iki ana uğraşırken terimler tartışmasız biraz uygulanamayacağı olsa, / 31'de "ağ" adreslerinden.
BMDan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.