IP adresinin garip dotless ondalık gösterimi… Nasıl çalışır?


89

Bugün erken saatlerde, panomuzda bir URL bulunduğunu düşündüm, ancak aslında bir elektronik sistemden kopyalanan dört 9 basamaklı tam sayıya sahiptim; Eldeki görevle tamamen ilgisiz. Firefox'a yapıştırdım ve gerçekten bir sayfa yüklediğini bulmak beni şaşırttı. IPv4 adreslerinin noktasız ondalık gösterimlerini daha önce gördüm , ancak bu uzun sayı çok daha büyük bir şey.

714687644714805209715128610715964400 (bir HTTP yapıştırın: // önünde)

Bu nasıl çalışıyor? Ondalık -> IPv4 çeviricileri internette buldum hepsi geçersiz bir giriş olarak kabul ediyor. Gerçekte yüklediği IPv4 adresini alıp, onu noktasız ondalık sayıya dönüştürmek için aynı hesaplamaları yaparsam, çok daha küçük bir sayı elde ederim.

Ping'in şifreleri kabul edebileceğini ve bir miktar dönüşüm gerçekleştirebileceğini okudum , ancak bu numarayı bir IP adresine çeviremiyor. IPv6 söz konusu değil, çünkü bu ana bilgisayar IPv6 bağlantısına sahip değil.

Bu nasıl bir delilik? Kendime ve iş arkadaşlarına güdük oldu.

Düzenleme: Şimdi tekrar çevrimiçi.



2
Eğer misiniz gerçekten bir IPv6 adresi olmadığından emin? Çünkü bu sayı, 65536 bazında 8 haneye bölündü; IPv6 adresleri, 65536 tabanında 8 basamaktan oluşur. IPv6 için her zamanki gibi onaltılı olarak gösterilir, 89: a4d2: 471b: 45ef: 77ed: c70f: da35: 93f0.
Christian

2
@Christian Rakamın kaynağı için yaptığı açıklamada, asıl sayı gösterilen, 36 haneden oluşur (her bir ID, 714xxxxxx veya 715xxxxxx şeklinde 9 rakamdır). Bilgisayarın IPv6'sı bile yok ve IPv4 adresi olarak alınan numara gerçekten bir web sayfası döndürüyor. ~ 5E33'den ~ 3E38'e kadar olan rakamlar, 65536 tabanında 8 rakamdan oluşuyor, bence bu aralığa düşmesi sadece bir tesadüf (artı, daha küçük herhangi bir sayı da geçerli bir IPv6 adresi olabilir)
Tim S.

1
@ beeks Tamam, dün denediğimde işe yaramadı ama güvensiz bir yönlendirici olduğu göz önüne alındığında, belki de bu hiç şaşırtıcı değil. Yani adres çubuğuna rastgele bir sayı koyduğunu mu söylüyorsun? Veya güvenli olmayan yönlendiricilerin garip bir şekilde kodlanmış IP adreslerini içeren ne tür bir elektronik tablonuz var? ;)
Christian

1
@ Hıristiyan, LOL. Uyum sistemindeki bazı benzersiz mesaj tanımlayıcılarıydı. Onları adres çubuğuna yapıştırma şansım tamamen bitmişti ve işe yaradı. Bahse girerim hayatımda bir daha asla başıma
gelmeyecek

Yanıtlar:


93

Bu oldukça ilginç bir soru ve çözmem biraz zaman aldı. Kısa cevap numarasının son 32 biti olan 3660944368 (bulunabilir olan ondalık 714687644714805209715128610715964400 mod 2^32)

Bu, IPv4 adresinin 218.53.147.240 adresinin ondalık değeridir; bu 3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240sayı, ondalık sayıları yazarak aynı sayıyı ( 256 tabanına) dönüştürerek bulunabilir . Örneğin 234 = 2*10^2+ 3*10 + 4.

@ Chritohnide'nin işaret ettiği gibi, noktalı IPv4 adreslerinin her bir bölümüne 8 ikili basamağı temsil ettiği için sekizli adı verilir. Ayrıca, IPv4 adreslerinin çeşitli biçimlerinin (noktalı ondalık ya da salt ondalık gibi), 32 bitlik ikili sayıyı fayda için temsil etmenin sadece farklı yolları olduğunu belirtmekte fayda vardır.

IPv4 adresleri 32 bit sayılar olduğundan, adresin çözümlenmesi için sayının yalnızca son 32 biti kullanılır. Bunun neden doğru olduğu açık değil. Diğerlerinin de belirttiği gibi, tam sayı, ondalık sayıdaki dikkat çekici bir şekilde IPv6 adresine benziyor, ancak geçerli bir adres değil.

Teredo spesifikasyonuna bakıldığında (bkz. 4. Teredo Adresleri ), Müşteri IPv4, IPv6 adresinin son 32 bitini kaplar, ancak numara öneki Teredo spesifikasyonuyla eşleşmez (Ayrıca bkz. Wikipedia ).


12
Güzel cevap Noktalı bir IPv4 adresinin her bölümünün sekizli olarak adlandırıldığından bahsetmek yararlı olabilir, çünkü 8 bitlik ikilik bir sayının ondalık gösterimidir (4 sekizli = 4 x 8 bit = 32 bit IPv4 adresinin) ve ondalık sürüm gerçekten sadece bizim yararımız için.
chritohnide

4
IPv6 ondalık gösterimi olmadığından emin misin? Başarıyla dönüştürür0089:a4d2:471b:45ef:77ed:c70f:da35:93f0
Izkata

5
@Izkata: Bu adresin IPv6 adres alanının ayrılmamış ve ayrılmış bir parçası olması muhtemel değildir.
Henning Makholm

3
Sayı (ASCII'de) muhtemelen C-stdlib dizesinden bir tanesinin 32 bit ipv4 adresine çevrilmesi için int işlevlerine yönlendirilecektir. C stdlib'in çoğu uygulamasında, bu dönüşümler otomatik olarak bir modulo 2 ^ <istenen tamsayı büyüklüğü> yapacaktır. Bu durumda sonuç tam olarak gözlemlenen davranış için.
Tonny

3
Bunun muhtemelen Firefox’un URL ayrıştırıcısının bir tutamı olduğuna dikkat çekiyor. Bir URL yerine bir sayı olduğunu ve 32 bitlik bir IP adresi olarak ayrıştırmaya çalıştığını fark ediyor gibi görünüyor (elde edilen ayrıştırılmış tamsayı 32-bit modulo ile bitiyor ve gerçekten girdi denetlenirken herhangi bir hata yapmıyor) ). Örneğin Chrome, bu davranışı göstermiyor. Aslında Firefox'ta önemsiz bir hata olarak bildirmeye değer olabilir.
Jason C
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.