Konverter IP ke desimal

Konversi alamat IP ke desimal, heksadesimal, biner, dan oktal, atau ketik salah satu angka itu untuk mendapatkan IP-nya kembali. Setiap oktet digambar sebagai 8 bit dengan nilai tempatnya, jadi Anda bisa mengikuti hitungannya.

Parsing WHATWG URL Standard dan inet_aton · aritmetika 128 bit yang tepat untuk IPv6 · berjalan di browser Anda

Dibaca sebagai desimal bertitik

8 bit setiap oktet, dengan nilai tempatnya198.51.100.77 = 3 325 256 781
Oktet1286432168421HexJumlah× bobot= nilai
19811000110C6128+64+4+2 = 198× 256³16 777 2163 321 888 768
128+64+4+2 × 256³ = 3 321 888 768
51001100113332+16+2+1 = 51× 256²65 5363 342 336
32+16+2+1 × 256² = 3 342 336
100011001006464+32+4 = 100× 25625625 600
64+32+4 × 256 = 25 600
77010011014D64+8+4+1 = 77× 1177
64+8+4+1 × 1 = 77
Total3 325 256 781
= 3 325 256 781
Coba

Sebuah IP, atau angka desimal, hex, biner, atau oktalnya untuk mendapatkan IP-nya kembali. Dikonversi di browser Anda; tidak ada yang dikirim.

IPv4 · 32 bit

3325256781

198.51.100.77 sebagai satu angka 32 bit · Alamat dokumentasi (RFC 5737)

Angka yang sama dalam kode

SELECT INET_ATON('198.51.100.77');3325256781
SELECT '198.51.100.77'::inet - '0.0.0.0'::inet;3325256781
int(ipaddress.ip_address('198.51.100.77'))3325256781
ip2long('198.51.100.77')3325256781
Desimal bertitik
Desimal
Hex
Oktet biner
Oktal
Oktet hex
Oktet oktal
Di browser (masing-masing membuka 198.51.100.77)
Nama reverse DNS
Sebagai IPv6 (mapped)
IPv4 → IPv6

Bagaimana cara mengubah alamat IP ke desimal?

Kalikan keempat angka dalam format dotted decimal (4 oktet) dengan 256³, 256², 256, dan 1, lalu jumlahkan: 192.168.1.1 adalah 192 × 16 777 216 + 168 × 65 536 + 1 × 256 + 1 = 3 232 235 777.

Alamat IPv4 adalah satu angka 32 bit yang ditulis dalam empat potongan 8 bit, jadi bentuk bertitik dan bentuk desimal adalah nilai yang sama. Dokumentasi MySQL memakai 10.0.5.9 = 167773449 sebagai contoh.

192.168.1.1 sebagai satu angka: setiap bagian dikali bobot posisinya, lalu dijumlahkan.
Konverter IP ke desimal menampilkan bit dan nilai tempat setiap oktet yang dijumlahkan menjadi satu angkaKonverter IP ke desimal menampilkan bit dan nilai tempat setiap oktet yang dijumlahkan menjadi satu angkaMasukkan bentuk apa punBertitik, desimal, hex, biner, oktal, atau URL: kolom ini membaca semuanya.Bit dan nilai tempatSetiap 1 menambahkan nilai tempatnya: 128 + 64 + 4 + 2 = 198.× 256³, 256², 256, 1Setiap oktet dikalikan bobotnya, lalu dijumlahkan.Semua bentuk keluaranHex, biner, oktal, dan URL yang diterima browser, masing-masing dengan tombol salin.AngkanyaSeluruh alamat sebagai satu angka 32 bit, siap disalin, beserta jenis alamatnya.
198.51.100.77 bit demi bit: nilai tempat setiap oktet, lalu × 256³, 256², 256, dan 1, dijumlahkan menjadi 3 325 256 781.

Bagaimana cara mengubah desimal ke alamat IP?

Bagi dengan 16 777 216, lalu bagi sisanya dengan 65 536, lalu dengan 256: ketiga hasil bagi dan sisa terakhir adalah keempat angkanya, jadi 3232235777 adalah 192.168.1.1.

Ketik angkanya di konverter dan alat ini melakukan hal yang sama, beserta hex, biner, oktal, dan bentuk yang diterima browser. Angka di atas 4 294 967 295 bukan alamat IPv4; konverter membacanya sebagai angka IPv6 dan memberi tahu Anda.

3 232 235 777 kembali menjadi 192.168.1.1 lewat pembagian.

Bagaimana cara mengubah alamat IP ke biner?

Tulis setiap angka dari keempat angka itu sebagai 8 bit dengan nilai tempat 128, 64, 32, 16, 8, 4, 2, dan 1: 192 adalah 128 + 64, jadi 11000000, dan 192.168.1.1 adalah 11000000.10101000.00000001.00000001.

Telusuri nilai tempat dari kiri: tulis 1 dan kurangkan jika nilainya muat, jika tidak tulis 0. Untuk 168: 128 muat (sisa 40), 64 tidak, 32 muat (sisa 8), 16 tidak, 8 muat, jadi 10101000. Untuk kembali dari biner, jumlahkan nilai tempat dari setiap angka 1.

Setiap oktet 192.168.1.1 dibandingkan dengan nilai tempat 128 sampai 1.

Bagaimana cara mengubah alamat IP ke heksadesimal?

Bagi 8 bit setiap oktet menjadi dua bagian berisi 4 bit dan tulis setiap bagian sebagai satu digit hex: 192 adalah 1100 0000, yaitu C0, jadi 192.168.1.1 adalah 0xC0A80101.

Hex juga cara IPv6 menulis alamat IPv4 yang tersemat: ::ffff:c0a8:101 adalah 192.168.1.1. Browser menerima angka hex sebagai host: http://0xC0A80101/ membuka 192.168.1.1.

Empat bit per digit hex: 192.168.1.1 adalah C0 A8 01 01.

Mengapa http://3232235777 membuka 192.168.1.1?

Karena browser membaca host yang hanya berisi angka sebagai alamat IPv4 dalam bentuk inet_aton lama mana pun, termasuk satu angka desimal, lalu memuat alamat bertitiknya.

Setiap bagian boleh desimal (URL Standard), hex dengan 0x, atau oktal dengan 0 di depan, dan jika kurang dari empat bagian, bagian terakhir mengisi byte yang tersisa. Jadi http://192.168.1/ membuka 192.168.0.1, bukan 192.168.1.1. ping dan curl menerima bentuk yang sama.

Angka di atas 32 bit, angka 8 atau 9 di bagian yang diawali 0, dan bagian kelima akan ditolak.

Diketik di address barMembuka
http://3232235777/192.168.1.1
http://0xC0A80101/192.168.1.1
http://0300.0250.1.1/192.168.1.1
http://127.1/127.0.0.1
http://192.168.1/192.168.0.1
http://4294967296/Ditolak
http://09/Ditolak
http://192.0.2.1.5/Ditolak
Apa yang dilakukan URL parser WHATWG pada setiap host.

Mengapa bentuk alternatif alamat IP penting untuk keamanan?

Karena filter yang membandingkan alamat sebagai teks bisa dikelabui: 2130706433, 0x7f.1, 127.1, dan ::ffff:127.0.0.1 semuanya adalah 127.0.0.1, jadi filter harus membandingkan nilai angkanya, bukan string-nya.

OWASP mencantumkan encoding ini di antara cara melewati pertahanan SSRF. Sejumlah library pernah punya bug ini: paket npm netmask dan ip, ipaddress di Python, dan paket net di Go pernah salah membaca nol di depan atau bentuk alternatif, dan sudah diperbaiki.

Parse dengan pembaca yang ketat, ubah ke angka, lalu bandingkan rentangnya. Blokir juga alamat IPv4-mapped dari rentang yang diblokir.

deny 127.0.0.1

Dibandingkan sebagai teks

127.0.0.1diblokir

2130706433lolos

0x7f.1lolos

127.1lolos

::ffff:127.0.0.1lolos

Dibandingkan sebagai angka

127.0.0.12130706433 · diblokir

21307064332130706433 · diblokir

0x7f.12130706433 · diblokir

127.12130706433 · diblokir

::ffff:127.0.0.12130706433 · diblokir

CVE-2021-28918netmask (npm)CVE-2021-29418netmask (npm)CVE-2021-29424Net::Netmask (Perl)CVE-2021-29921Python ipaddressCVE-2021-29923Go netCVE-2024-29415ip (npm)
Satu aturan, lima penulisan alamat loopback; lalu advisori keamanannya.

Bagaimana cara mengubah alamat IPv6 ke desimal?

Dengan cara yang sama, memakai delapan grup 16 bit: 2001:db8::1 adalah 42540766411282592856903984951653826561, angka hingga 39 digit yang memerlukan BigInt di JavaScript.

Ada 2^128 alamat IPv6. Angka JavaScript hanya menyimpan bilangan bulat dengan tepat sampai 2^53 − 1, jadi aritmetika biasa diam-diam membulatkan nilai IPv6. int(ipaddress.ip_address(…)) di Python memberikan hasil yang tepat.

2001:db8::1 sebagai satu angka, dan apa jadinya di angka JavaScript biasa.

Bagaimana cara mengubah alamat IP ke angka di kode dan database?

Pakai fungsi bawaan platform dengan tipe unsigned: INET_ATON() di MySQL ke kolom INT UNSIGNED, pengurangan inet di PostgreSQL, int(ipaddress.ip_address(…)) di Python, dan >>> 0 setelah operasi shift di JavaScript.

Integer 32 bit bertanda (signed) tidak bisa menampung alamat mulai 128.0.0.0: << di JavaScript menghasilkan -1062731519 untuk 192.168.1.1, dan ip2long() di PHP menjadi negatif di build 32 bit. Untuk IPv6, MySQL memakai INET6_ATON() dan VARBINARY(16).

› SELECT INET_ATON('192.168.1.1'), INET_NTOA(3232235777);
3232235777 | 192.168.1.1

MySQL 8.4

› SELECT '192.168.1.1'::inet - '0.0.0.0'::inet,
       '0.0.0.0'::inet + 3232235777;
3232235777 | 192.168.1.1

PostgreSQL 16

› import ipaddress
int(ipaddress.ip_address('192.168.1.1')), ipaddress.IPv4Address(3232235777)
(3232235777, IPv4Address('192.168.1.1'))

Python ipaddress

› '192.168.1.1'.split('.').reduce((n, o) => (n << 8) | +o, 0) >>> 0
3232235777

JavaScript

› echo ip2long('192.168.1.1'), ' ', long2ip(3232235777);
3232235777 192.168.1.1

PHP 8

192.168.1.1 sebagai angka dan kembali lagi di dua database dan tiga bahasa pemrograman.

Pertanyaan yang sering diajukan

Berapa 192.168.1.1 dalam desimal?

3232235777. Kalikan setiap bagian dengan nilai tempatnya lalu jumlahkan: 192 × 16 777 216 + 168 × 65 536 + 1 × 256 + 1 = 3 232 235 777. Angka yang sama adalah 0xC0A80101 dalam hex dan 11000000.10101000.00000001.00000001 dalam biner. Browser juga menerimanya sebagai host, jadi http://3232235777/ membuka alamat yang sama dengan http://192.168.1.1/.

Berapa rentang nilai desimal setiap oktet IPv4, dan berapa nilai terbesar alamat IPv4?

Setiap oktet berisi 8 bit, jadi nilainya 0 sampai 255, dan nilai terbesar seluruh alamat adalah 4 294 967 295, yaitu 255.255.255.255. Alamat IPv4 adalah angka 32 bit, jadi ada 2³² = 4 294 967 296 alamat, dari 0 (0.0.0.0) sampai 4 294 967 295. Angka yang lebih besar bukan alamat IPv4: browser menolak http://4294967296/, dan konverter ini membacanya sebagai nilai IPv6 128 bit dan memberi tahu Anda.

Bagaimana cara mengubah 3232235777 kembali menjadi alamat IP?

Bagi dengan 16 777 216 untuk bagian pertama: 192, sisa 11 010 305. Bagi sisa itu dengan 65 536 untuk bagian kedua: 168, sisa 257. Bagi 257 dengan 256 untuk bagian ketiga: 1, sisa 1, yang menjadi bagian keempat. Hasilnya 192.168.1.1. Ketik angkanya di konverter dan alat ini juga menampilkan bit setiap oktet.

Apa arti nol di depan, seperti 010, pada alamat IP?

Tergantung programnya. Browser dan inet_aton membaca bagian dengan nol di depan sebagai oktal, jadi 192.0.2.010 adalah 192.0.2.8, sedangkan alat yang mengabaikan nol itu membaca 192.0.2.10. Python dan Go kini langsung menolak alamat seperti itu, setelah ada bug ketika dua cara baca tersebut membuat permintaan lolos dari filter IP. Jangan pernah menulis nol di depan pada alamat IPv4.

Mengapa 192.168.1 membuka 192.168.0.1?

Karena alamat tiga bagian mengisi 16 bit terakhir dengan bagian terakhirnya. Pada 192.168.1, angka 1 di akhir menjadi angka 16 bit bernilai 1, yaitu 0.1, jadi alamatnya 192.168.0.1. Begitulah inet_aton dan browser membaca bentuk singkat, dan 192.168.257 akan menjadi 192.168.1.1. Tipe cidr di PostgreSQL membaca 192.168.1 secara berbeda, sebagai jaringan 192.168.1.0/24.

Bagaimana cara mengubah alamat IP ke biner secara manual?

Untuk masing-masing dari empat angka, telusuri nilai tempat 128, 64, 32, 16, 8, 4, 2, dan 1: tulis 1 dan kurangkan jika nilainya muat, jika tidak tulis 0. Untuk 168: 128 muat (sisa 40), 64 tidak, 32 muat (sisa 8), 16 tidak, 8 muat (sisa 0), jadi 10101000. Gabungkan keempat grup 8 bit dengan titik.

Bagaimana cara menyimpan alamat IP sebagai angka di MySQL?

Konversi dengan INET_ATON('10.0.5.9'), yang menghasilkan 167773449, dan simpan hasilnya di kolom INT UNSIGNED: INT bertanda tidak bisa menampung alamat di atas 127.255.255.255. INET_NTOA mengubah angka itu kembali menjadi teks. Untuk IPv6, pakai INET6_ATON dan kolom VARBINARY(16), karena nilai 128 bit tidak muat di tipe integer mana pun. Jangan andalkan INET_ATON untuk bentuk singkat seperti 127.1.

Mengapa angka IP saya negatif di JavaScript atau PHP?

Karena angka itu diperlakukan sebagai integer 32 bit bertanda. Operator << di JavaScript menghasilkan nilai bertanda, jadi 192.168.1.1 yang disusun dengan shift menghasilkan -1062731519; tambahkan >>> 0 untuk mendapatkan 3232235777. ip2long di PHP berperilaku sama di build 32 bit, dan di sana sprintf('%u', …) mencetak nilai unsigned-nya. Hanya alamat mulai 128.0.0.0 yang terdampak, itulah sebabnya bug ini sering tidak disadari.

Bisakah alamat IPv6 diubah ke desimal?

Bisa. Alamat IPv6 adalah angka 128 bit, jadi 2001:db8::1 adalah 42540766411282592856903984951653826561, dan nilai terbesarnya punya 39 digit. Angka JavaScript biasa kehilangan presisi di atas 2^53, jadi alat harus memakai BigInt, dan beberapa konverter online salah di digit terakhir. int(ipaddress.ip_address('2001:db8::1')) di Python memberikan nilai yang tepat.

Apakah http://0x7f000001/ sama dengan 127.0.0.1?

Ya. Browser dan banyak alat command line membaca host berisi digit hex setelah 0x sebagai satu angka 32 bit, jadi 0x7f000001, 2130706433, 0x7f.1, dan 127.1 semuanya berarti 127.0.0.1, alamat loopback. Itulah sebabnya filter keamanan harus membandingkan nilai angkanya, bukan teksnya, sesuai saran RFC 3986 dan cheat sheet SSRF dari OWASP.