IP'den ondalığa çevirici

Bir IP adresini ondalık, onaltılık, ikili ve sekizli sayıya çevirin ya da IP adresini geri almak için bu sayılardan birini yazın. Her oktet basamak değerleriyle 8 bit olarak çizilir; böylece IP çevirme hesabını adım adım izleyebilirsiniz.

WHATWG URL Standard ve inet_aton ayrıştırması · IPv6 için kesin 128 bitlik aritmetik · tarayıcınızda çalışır

Okunan biçim: noktalı ondalık

Her oktetin 8 biti ve basamak değerleri198.51.100.77 = 3 325 256 781
Oktet1286432168421HexToplam× basamak= değer
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
Toplam3 325 256 781
= 3 325 256 781
Örnekler

Bir IP adresi ya da IP'yi geri almak için ondalık, hex, ikili veya sekizli sayısı. Dönüştürme tarayıcınızda yapılır; hiçbir şey gönderilmez.

IPv4 · 32 bit

3325256781

198.51.100.77, tek bir 32 bitlik sayı olarak · Dokümantasyon adresi (RFC 5737)

Kodda aynı sayı

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
Noktalı ondalık
Ondalık
Onaltılık
İkili oktetler
Sekizli
Onaltılık oktetler
Sekizli oktetler
Tarayıcıda (her biri 198.51.100.77 adresini açar)
Ters DNS adı
IPv6 olarak (eşlemeli)
IPv4 → IPv6

IP adresi ondalık sayıya nasıl çevrilir?

Dört sayıyı 256³, 256², 256 ve 1 ile çarpıp toplayın: 192.168.1.1 = 192 × 16 777 216 + 168 × 65 536 + 1 × 256 + 1 = 3 232 235 777.

Bir IPv4 adresi, 8 bitlik dört parça hâlinde yazılmış tek bir 32 bitlik sayıdır; bu yüzden noktalı biçim ile ondalık biçim aynı değerdir. MySQL'in belgeleri örnek olarak 10.0.5.9 = 167773449 kullanır.

Tek bir sayı olarak 192.168.1.1: her parça basamak değeriyle çarpılır, sonra toplanır.
IP çevirici, her oktetin bitlerini ve sayıya ulaşan basamak değerlerini gösteriyorIP çevirici, her oktetin bitlerini ve sayıya ulaşan basamak değerlerini gösteriyorHer biçim girerNoktalı, ondalık, hex, ikili, sekizli veya bir URL: alan hepsini okur.Bitler ve basamak değerleriHer 1, kendi basamak değerini ekler: 128 + 64 + 4 + 2 = 198.× 256³, 256², 256, 1Her oktet kendi ağırlığıyla çarpılır, ardından toplam.Her biçim çıkarHex, ikili, sekizli ve tarayıcıların kabul ettiği URL'ler; her biri kopyalanabilir.SayıAdresin tamamı tek bir 32 bitlik sayı olarak, kopyalamaya hazır ve adresin türüyle birlikte.
198.51.100.77 bit bit: her oktetin basamak değerleri, ardından × 256³, 256², 256 ve 1; toplam 3 325 256 781.

Ondalık sayı IP adresine nasıl çevrilir?

16 777 216'ya bölün, ardından kalanı 65 536'ya, sonra 256'ya bölün: üç bölüm ve son kalan dört sayıyı verir; yani 3232235777, 192.168.1.1 eder.

Sayıyı dönüştürücüye yazdığınızda aynısını yapar; hex, ikili, sekizli ve tarayıcıların kabul ettiği biçimleri de gösterir. 4 294 967 295'ten büyük sayılar IPv4 adresi değildir; dönüştürücü onları IPv6 sayısı olarak okur ve bunu belirtir.

3 232 235 777 bölme yoluyla yeniden 192.168.1.1 olur.

IP adresi ikiliye nasıl çevrilir?

Dört sayının her birini 128, 64, 32, 16, 8, 4, 2 ve 1 basamak değerleriyle 8 bit olarak yazın: 192 = 128 + 64, yani 11000000; 192.168.1.1 ise 11000000.10101000.00000001.00000001 olur.

Basamak değerlerinde soldan ilerleyin: değer sığıyorsa 1 yazıp çıkarın, sığmıyorsa 0 yazın. 168 için: 128 sığar (40 kalır), 64 sığmaz, 32 sığar (8 kalır), 16 sığmaz, 8 sığar; sonuç 10101000. İkiliden geri çevirmek için 1'lerin basamak değerlerini toplayın.

192.168.1.1'in her okteti, 128'den 1'e kadar basamak değerleriyle.

IP adresi onaltılığa (hex) nasıl çevrilir?

Her oktetin 8 bitini 4'er bitlik iki yarıya bölün ve her yarıyı tek bir hex rakamıyla yazın: 192, 1100 0000 yani C0 eder; bu yüzden 192.168.1.1, 0xC0A80101 olur.

IPv6 da gömülü bir IPv4 adresini hex ile yazar: ::ffff:c0a8:101, 192.168.1.1 adresidir. Tarayıcılar hex sayıyı host olarak kabul eder: http://0xC0A80101/ adresi 192.168.1.1'i açar.

Onaltılık rakam başına dört bit: 192.168.1.1, C0 A8 01 01 olarak yazılır.

http://3232235777 neden 192.168.1.1'i açar?

Çünkü tarayıcılar yalnızca sayılardan oluşan bir hostu eski inet_aton biçimlerinden herhangi birindeki (tek bir ondalık sayı dahil) bir IPv4 adresi olarak okur ve ardından noktalı adresi yükler.

Her parça ondalık (URL Standard), 0x ile hex veya baştaki 0 ile sekizli olabilir; dörtten az parça varsa sonuncusu kalan baytları doldurur. Bu yüzden http://192.168.1/ adresi 192.168.1.1'i değil, 192.168.0.1'i açar. ping ve curl aynı biçimleri kabul eder.

32 biti aşan sayılar, 0 ile başlayan bir parçada 8 veya 9 ve beşinci bir parça reddedilir.

Adres çubuğuna yazılanAçılan
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/Reddedildi
http://09/Reddedildi
http://192.0.2.1.5/Reddedildi
WHATWG URL ayrıştırıcısının her hostla ne yaptığı.

Alternatif IP adresi biçimleri güvenlik için neden önemlidir?

Çünkü adresleri metin olarak karşılaştıran bir filtre kandırılabilir: 2130706433, 0x7f.1, 127.1 ve ::ffff:127.0.0.1 adreslerinin hepsi 127.0.0.1'dir; bu yüzden filtreler dizeyi değil, sayısal değeri karşılaştırmalıdır.

OWASP'ın listesine göre bu kodlamalar SSRF savunmalarını aşmanın yolları arasındadır. Kitaplıklar da bu hatayla yayımlandı: npm paketleri netmask ve ip, Python'un ipaddress modülü ve Go'nun net paketi bir dönem baştaki sıfırları veya alternatif biçimleri yanlış okudu ve sonradan düzeltildi.

Katı bir ayrıştırıcıyla okuyun, sayıya çevirin, ardından aralıkları karşılaştırın. Engellenen aralıkların IPv4 eşlemeli adreslerini de engelleyin.

deny 127.0.0.1

Metin olarak karşılaştırma

127.0.0.1engellendi

2130706433geçiyor

0x7f.1geçiyor

127.1geçiyor

::ffff:127.0.0.1geçiyor

Sayı olarak karşılaştırma

127.0.0.12130706433 · engellendi

21307064332130706433 · engellendi

0x7f.12130706433 · engellendi

127.12130706433 · engellendi

::ffff:127.0.0.12130706433 · engellendi

CVE-2021-28918netmask (npm)CVE-2021-29418netmask (npm)CVE-2021-29424Net::Netmask (Perl)CVE-2021-29921Python ipaddressCVE-2021-29923Go netCVE-2024-29415ip (npm)
Tek kural, geri döngü adresinin beş yazımı; ardından güvenlik bültenleri.

IPv6 adresi ondalığa nasıl çevrilir?

Aynı şekilde, sekiz adet 16 bitlik grupla: 2001:db8::1, 42540766411282592856903984951653826561 eder; bu, 39 basamağa kadar uzayabilen ve JavaScript'te BigInt gerektiren bir sayıdır.

2^128 IPv6 adresi vardır. JavaScript sayıları tam sayıları yalnızca 2^53 − 1'e kadar kesin tutar, bu yüzden sıradan aritmetik IPv6 değerlerini sessizce yuvarlar. Python'un int(ipaddress.ip_address(…)) ifadesi kesin sonuç verir.

Tek bir sayı olarak 2001:db8::1 ve sıradan bir JavaScript sayısının ondan çıkardığı sonuç.

Kodda ve veritabanlarında IP adresleri sayıya nasıl çevrilir?

Platformun kendi işlevlerini işaretsiz bir türle kullanın: MySQL'de INT UNSIGNED sütununa INET_ATON(), PostgreSQL'de inet çıkarma işlemi, Python'da int(ipaddress.ip_address(…)) ve JavaScript'te kaydırmalardan sonra >>> 0.

İşaretli 32 bitlik bir tam sayı 128.0.0.0 ve üzerindeki adresleri tutamaz: JavaScript'in << işleci 192.168.1.1 için -1062731519 verir ve PHP'nin ip2long() işlevi 32 bitlik derlemelerde negatife düşer. IPv6 için MySQL INET6_ATON() ve VARBINARY(16) kullanır.

› 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 iki veritabanı ve üç dilde sayıya ve geri.

Sık sorulan sorular

192.168.1.1 ondalık olarak nedir?

3232235777. Her parçayı basamak değeriyle çarpıp toplayın: 192 × 16 777 216 + 168 × 65 536 + 1 × 256 + 1 = 3 232 235 777. Aynı sayı hex olarak 0xC0A80101, ikili olarak 11000000.10101000.00000001.00000001 şeklinde yazılır. Tarayıcılar onu host olarak da kabul eder, bu yüzden http://3232235777/ adresi http://192.168.1.1/ ile aynı adresi açar.

Bir IPv4 adresinin en büyük ondalık değeri nedir?

4 294 967 295, yani 255.255.255.255. Bir IPv4 adresi 32 bitlik bir sayıdır; bu yüzden 0 (0.0.0.0) ile 4 294 967 295 arasında 2^32 = 4 294 967 296 adres vardır. Daha büyük sayılar IPv4 adresi değildir: tarayıcılar http://4294967296/ adresini reddeder, bu dönüştürücü ise bu tür sayıları 128 bitlik IPv6 değerleri olarak okur ve size bunu söyler.

IP çevirici olmadan 3232235777 nasıl IP adresine çevrilir?

İlk parça için 16 777 216'ya bölün: 192, kalan 11 010 305. İkinci parça için bu kalanı 65 536'ya bölün: 168, kalan 257. Üçüncü parça için 257'yi 256'ya bölün: 1, kalan 1; bu da dördüncü parçadır. Cevap 192.168.1.1. Sayıyı IP çeviriciye yazarsanız her oktetin bitlerini de gösterir.

Bir IP adresinde 010 gibi baştaki bir sıfır ne anlama gelir?

Programa bağlıdır. Tarayıcılar ve inet_aton baştaki sıfırı olan bir parçayı sekizli okur, bu yüzden 192.0.2.010, 192.0.2.8 olur; sıfırı yok sayan araçlar ise 192.0.2.10 okur. Python ve Go, iki farklı okumanın isteklerin IP filtrelerinden kaçmasına yol açtığı hatalardan sonra bu tür adresleri artık doğrudan reddeder. IPv4 adreslerinde asla baştaki sıfır yazmayın.

192.168.1 neden 192.168.0.1'i açar?

Çünkü üç parçalı bir adreste son parça son 16 biti doldurur. 192.168.1 adresindeki son 1, 16 bitlik 1 sayısı olur, yani 0.1; böylece adres 192.168.0.1 olur. inet_aton ve tarayıcılar kısa biçimleri böyle okur; 192.168.257 ise 192.168.1.1 olurdu. PostgreSQL'in cidr türü 192.168.1 yazımını farklı okur: 192.168.1.0/24 ağı olarak.

Bir IP adresi elle ikiliye nasıl çevrilir?

Dört sayının her biri için 128, 64, 32, 16, 8, 4, 2 ve 1 basamak değerlerinden geçin: basamak sığıyorsa 1 yazıp çıkarın, sığmıyorsa 0 yazın. 168 için: 128 sığar (40 kalır), 64 sığmaz, 32 sığar (8 kalır), 16 sığmaz, 8 sığar (0 kalır); sonuç 10101000. Dört adet 8 bitlik grubu noktalarla birleştirin.

MySQL'de IP adresleri sayı olarak nasıl saklanır?

INET_ATON('10.0.5.9') ile dönüştürün; bu işlev 167773449 döndürür. Sonucu INT UNSIGNED bir sütunda saklayın: işaretli bir INT, 127.255.255.255 üzerindeki adresleri tutamaz. INET_NTOA sayıyı yeniden metne çevirir. IPv6 için INET6_ATON ve bir VARBINARY(16) sütunu kullanın, çünkü 128 bitlik değerler hiçbir tam sayı türüne sığmaz. 127.1 gibi kısa biçimlerde INET_ATON işlevine güvenmeyin.

JavaScript veya PHP'de IP sayım neden negatif çıkıyor?

Çünkü işaretli 32 bitlik bir tam sayı olarak işlendi. JavaScript'in << işleci işaretli sonuç döndürür, bu yüzden kaydırmalarla oluşturulan 192.168.1.1 -1062731519 verir; 3232235777 elde etmek için >>> 0 ekleyin. PHP'nin ip2long işlevi 32 bitlik derlemelerde aynı şekilde davranır; orada sprintf('%u', …) işaretsiz değeri yazdırır. Yalnızca 128.0.0.0 ve üzerindeki adresler etkilenir, bu yüzden hata çoğu zaman fark edilmez.

Bir IPv6 adresi ondalığa çevrilebilir mi?

Evet. Bir IPv6 adresi 128 bitlik bir sayıdır, yani 2001:db8::1, 42540766411282592856903984951653826561 eder ve en büyük değer 39 basamaklıdır. Sıradan JavaScript sayıları 2^53'ün ötesinde hassasiyet kaybeder; bu yüzden araçlar BigInt kullanmalıdır ve bazı çevrimiçi dönüştürücüler son basamakları yanlış verir. Python'un int(ipaddress.ip_address('2001:db8::1')) ifadesi kesin değeri verir.

http://0x7f000001/ ile 127.0.0.1 aynı mı?

Evet. Tarayıcılar ve birçok komut satırı aracı, 0x sonrasındaki hex rakamlarından oluşan bir hostu tek bir 32 bitlik sayı olarak okur; bu yüzden 0x7f000001, 2130706433, 0x7f.1 ve 127.1'in hepsi geri döngü adresi 127.0.0.1 anlamına gelir. Güvenlik filtrelerinin metin yerine sayısal değeri karşılaştırması gerekir; RFC 3986 ve OWASP'ın SSRF kılavuzu da bunu önerir.