Bir IP adresini pinglemek farklı IP ile yanıt verir.


21

IP adresini pinglemeye çalıştığımda 10.10.208.57hiçbir yanıt alamıyorum çünkü bu IP adresi olan ağda hiçbir şey yok.

Ancak 10.10.208.0'a ping atmaya çalışırsam, 57başka bir IP adresi yanıt verir:

root@everest:/root# ping 10.10.208.057
PING 10.10.208.057 (10.10.208.47) 56(84) bytes of data.
64 bytes from 10.10.208.47: icmp_seq=1 ttl=253 time=0.732 ms
64 bytes from 10.10.208.47: icmp_seq=2 ttl=253 time=0.695 ms
64 bytes from 10.10.208.47: icmp_seq=3 ttl=253 time=0.659 ms
64 bytes from 10.10.208.47: icmp_seq=4 ttl=253 time=0.705 ms

Bunun 10.10.208.47bir Lexmark E120n yazıcı olduğu düşünülürse, bu garip sorunun kaynağı ne olabilir?


3
Bump, bu konudaki cevaba bakın: superuser.com/questions/486788/…
Michal Sokolowski

Yanıtlar:


43

Bu davranış aslında normal bir ping özelliği nedeniyledir ve gerçek donanımınızla bir ilgisi yoktur.

Nitekim, IP adresinin (veya bir kısmının) baştaki sıfır ile ön eklenmesi, sayının sekizlik olarak yorumlanmasına neden olur .

Yani , üs 8 olan 47 olan 057anlamına gelir 57. Böylece ping, ICMP sorgusunu adrese yerleştirilen makineye gönderir 10.10.208.47ve bu nedenle bir cevap alır.

Adresleri onaltılık olarak yalnızca 0 yerine 0x ön ekini kullanarak da pingleyebileceğinizi unutmayın.

Düzenleme: Pek çok yorumun önerdiği gibi, bu özellik aslında pingIP adreslerini işleyen birçok CLI yazılımında kendine özgü değildir ve bulunabilir.


Oha! Teşekkür ederim! Kalbim birkaç dakika durdu :-)
PsyStyle

4
Sadece ping değil. Birçok şey bunu yapar.
Jenny D,

1
Bash, tüm "tamsayıları" şu şekilde kabul
Tim

15

Ping, diğer birçok unix programında olduğu gibi, unix sisteminizdeki C kitaplıklarını ad çözümlemesi için kullanır. Kullanılan fonksiyonlardan biriinet_aton .

İçin man sayfa inet_atondiyor ki:

Tüm sayılar bir `içinde 'parça' olarak verilir. gösterim, C dilinde belirtildiği gibi ondalık, sekizli veya onaltılık olabilir (yani, öncü bir 0x veya 0X onaltılık anlamına gelir; aksi takdirde, öncü 0, sekizlik anlamına gelir; aksi takdirde sayı ondalık olarak yorumlanır).

Dolayısıyla, baştaki sıfır kullanıyorsanız, sayı sekizli olarak yorumlanır. Böylece, 57 = 047 = 0x39.


Windows'un bile aynı şekilde davrandığını fark ettim. Ayrıntılı cevabınız için teşekkür ederiz!
PsyStyle

@ PsyStyle Bir şey değil! Geniş bir işletim sistemi ve programlama dili yelpazesinde sayılar için standart bir gösterimdir.
Jenny D,

"Öyleyse baştaki sıfır kullanıyorsanız, sayı ondalık olarak yorumlanır." Bence bu bir yazım hatası, demek sen octal right olarak mı demek istedin?
Cruncher 19:15

1
@Cruncher teşekkürler. Kafein akışımda çok yüksek bir kan konsantrasyonunu suçluyorum.
Jenny D,
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.