Saya sedang mengerjakan perubahan dalam aplikasi Java EE yang akan mengotentikasi berdasarkan alamat IP pengguna menggunakan ServletRequest.getRemoteAddr . Kami menyimpan rentang alamat IP (FROM_IP dan TO_IP) dalam database dan sistem akan mengautentikasi hanya jika alamat IP pengguna berada dalam kisaran.
Sekarang, penguji telah menunjukkan bahwa angka 0 (nol) tidak boleh diizinkan dalam nilai FROM_IP dan TO_IP (di sembarang tempat). Perhatikan bahwa ini adalah aplikasi yang menghadap Internet, jadi kami hanya akan mendapatkan alamat IP publik.
Apakah penguji benar dalam menyarankan validasi itu? Mengapa kita tidak dapat memiliki nol dalam nilai rentang seperti di 167.23.0.1 - 167.23.255.255?
ip
authentication
ip-address
ipv4
Ritesh
sumber
sumber
Jawaban:
Tidak, mereka sepenuhnya salah.
Bahkan, ini adalah alamat IP yang valid:
192.168.24.0
Apa adanya
167.23.0.1
.Pemisahan alamat IP menjadi segmen bertitik adalah kenyamanan murni manusia untuk tampilan. Jauh lebih mudah diingat
192.168.1.42
daripada3232235818
.Yang penting bagi komputer adalah pemisahan (netmask). Tidak valid untuk memiliki alamat host dengan bagian host dari alamat yang disetel sepenuhnya ke 0 atau 1.
Jadi, 192.168.24.0 selama netmask sedemikian rupa sehingga beberapa bit diatur di bagian host. Lihat perhitungan berikut:
Dalam hal ini, bagian alamat (sisi kanan) memiliki 2 bit yang ditetapkan. Ini adalah alamat host yang valid di subnet 192.168.0.0/16.
Dalam hal ini, bagian alamat memiliki 10 bit yang diatur dan 6 bit yang tidak disetel. Ini adalah alamat host lain yang valid di subnet yang sama.
Dalam hal ini, bagian alamat memiliki nol bit yang ditetapkan. Ini bukan alamat host yang valid di jaringan 192.168.24.0/24.
sumber
ping 2130706432
, atauping 017700000001
(ya, bahkan pada Windows). Anda mungkin terkejut dengan hasilnya.192.168.0.257
tidak benar, tetapi192.168.257
merupakan representasi yang benar dari192.168.1.1
(sebagaimana adanya192.11010305
). Lihatinet_aton(3)
.Kecuali saya salah paham, penguji Anda salah besar. Alamat IP yang valid tentu dapat memiliki 0 di dalamnya.
sumber
Secara umum: Tidak, tidak masalah jika ada 0 di alamat atau tidak.
Namun, ada sebutir kebenaran dalam apa yang dikatakan penguji Anda. Dalam beberapa kasus, peralatan jaringan yang lama atau rusak tidak akan berfungsi dengan benar pada alamat dengan 0 pada Oktest terakhir. Ini karena aturan routing classfull lama. Dalam perutean Classfull, Anda dapat memberi tahu netmask dari oktet pertama alamat. Jika peralatan masih mengikuti aturan perutean classfull, ia kemungkinan menangani alamat seperti 200.100.1.0/16 secara tidak benar.
sumber
Katakanlah Anda memerlukan 510 alamat IP dalam satu rentang dan alamat jaringan Anda 192.1.1.0, Anda akan memiliki subnet / 23, yang salah satu IP host Anda adalah alamat IP .0, penguji Anda salah jika alamat .0 adalah alamat host Jika Anda memiliki / 24 jaringan itu akan benar untuk mengatakan itu salah.
sumber
Untuk memberikan jawaban yang sangat sederhana: Satu atau lebih nol dalam alamat ip benar-benar berlaku untuk alamat host asalkan alamat tersebut bukan alamat jaringan atau siaran.
Alamat jaringan dan broadcast adalah alamat ip yang valid, hanya saja tidak dapat digunakan oleh host.
sumber