การแสดงเลขทศนิยมทศนิยมแบบไม่มีจุดบอดของที่อยู่ IP ... มันทำงานอย่างไร


89

ก่อนหน้านี้วันนี้ฉันคิดว่าฉันมี URL ในคลิปบอร์ดของฉัน แต่จริงๆแล้วฉันมีจำนวนเต็ม 9 หลักสี่ตัวที่คัดลอกมาจากสเปรดชีตซึ่งเป็นหมายเลขระบุตัวตนจากระบบที่เป็นกรรมสิทธิ์ ไม่เกี่ยวข้องอย่างสมบูรณ์กับงานในมือ ฉันวางลงใน Firefox และรู้สึกประหลาดใจที่พบว่ามันโหลดหน้าเว็บจริง ฉันเคยเห็นเครื่องหมายทศนิยมแบบไม่ใช้ทศนิยมของที่อยู่IPv4มาก่อน แต่ตัวเลขที่ยาวนี้เป็นสิ่งที่ยิ่งใหญ่กว่ามาก

714687644714805209715128610715964400 (ติด HTTP: // ด้านหน้า)

มันทำงานอย่างไร ทศนิยมทั้งหมด -> ตัวแปลง IPv4 ที่ฉันพบบนอินเทอร์เน็ตถือว่าเป็นอินพุตที่ไม่ถูกต้อง ถ้าฉันใช้ที่อยู่ IPv4 ที่โหลดจริงและทำการคำนวณแบบเดียวกันเพื่อแปลงเป็นทศนิยมแบบไม่มีจุดฉันจะได้รับจำนวนที่น้อยกว่ามาก

ฉันอ่านแล้วว่าpingสามารถรับ dwords และทำการแปลงได้ แต่ไม่สามารถแปลงหมายเลขนี้เป็นที่อยู่ IP ได้ IPv6 ไม่เป็นปัญหาเนื่องจากโฮสต์นี้ไม่มีการเชื่อมต่อ IPv6

นี่มันบ้าอะไรกันนะ? มันนิ่งงันกับตัวเองและเพื่อนร่วมงานของฉัน

แก้ไข: ตอนนี้กลับมาออนไลน์แล้ว



2
คุณเป็นจริงๆแน่ใจว่ามันไม่ได้อยู่ IPv6? เพราะจำนวนนี้แบ่งออกเป็น 8 หลักในฐาน 65536; ที่อยู่ IPv6 มี 8 หลักในฐาน 65536 แสดงเป็นเลขฐานสิบหกตามปกติสำหรับ IPv6 คือ 89: a4d2: 471b: 45ef: 77ed: c70f: da35: 93f0
คริสเตียน

2
@Christian คำอธิบายของเขาสำหรับแหล่งที่มาของตัวเลข jives กับตัวเลขจริงที่แสดงซึ่งมี 36 หลัก (แต่ละ ID คือ 9 หลักทั้ง 714xxxxxx หรือ 715xxxxxx) คอมพิวเตอร์ไม่มีแม้แต่ IPv6 และหมายเลขที่ใช้เป็นที่อยู่ IPv4 จะส่งคืนหน้าเว็บ ตัวเลขจาก ~ ~ 5E33 เพื่อ 3E38 มีตัวเลข 8 หลักในฐาน 65536 ผมคิดว่ามันเป็นแค่เรื่องบังเอิญที่น้ำตกเขาในช่วงนั้น (บวกจำนวนที่มีขนาดเล็ก ๆ นี้ยังจะเป็นอยู่ IPv6 ถูกต้อง)
ทิมเอส

1
@beek ตกลงแล้วมันไม่ได้ทำงานเมื่อฉันลองมันเมื่อวานนี้ แต่เพราะมันเป็นเราเตอร์ที่ไม่มีหลักประกันอาจจะไม่แปลกใจเลย คุณกำลังบอกว่าโดยทั่วไปแล้วคุณใส่หมายเลขสุ่มลงในแถบที่อยู่ของคุณ หรือว่าคุณมีสเปรดชีตชนิดใดที่มีที่อยู่ IP ที่เข้ารหัสอย่างประหลาดของเราเตอร์ที่ไม่มีหลักประกัน ;)
คริสเตียน

1
@ คริสเตียน LOL พวกเขาเป็นตัวระบุข้อความที่ไม่ซ้ำกันในระบบการปฏิบัติตาม โอกาสทั้งหมดที่ฉันวางลงในแถบที่อยู่และใช้งานได้จริง ฉันเดิมพันที่จะไม่เกิดขึ้นอีกครั้งกับผมในชีวิตของฉัน :)
beeks

คำตอบ:


93

นี่เป็นคำถามที่น่าสนใจมากและใช้เวลาสักครู่กว่าจะคิดออก คำตอบสั้น ๆ คือ 32- บิตสุดท้ายของตัวเลขคือ3660944368 (เป็นทศนิยมซึ่งสามารถพบได้714687644714805209715128610715964400 mod 2^32)

นี่คือค่าทศนิยมของที่อยู่ IPv4 218.53.147.240ซึ่งสามารถพบได้โดยการแปลงเป็นฐาน-2563660944368 = 218*(256^3)+53*(256^2)+147*(256)+240อนาล็อกเพื่อเขียนตัวเลขในทศนิยม (ฐาน -10) 234 = 2*10^2+ 3*10 + 4เช่น

@chritohnide ชี้ให้เห็นว่าแต่ละส่วนของที่อยู่ IPv4 ประถูกเรียกว่า octet เนื่องจากเป็นตัวเลข 8 หลัก นอกจากนี้ยังเป็นที่น่าสังเกตว่ารูปแบบต่างๆของที่อยู่ IPv4 (เช่นทศนิยมประหรือทศนิยมบริสุทธิ์) เป็นวิธีการที่แตกต่างกันในการแสดงเลขฐานสองแบบ 32 บิตเพื่อประโยชน์

เนื่องจากที่อยู่ IPv4 เป็นตัวเลข 32 บิตดังนั้นจึงใช้เฉพาะหมายเลข 32 บิตสุดท้ายเพื่อแก้ไขที่อยู่ ทำไมสิ่งนี้เป็นจริงไม่ชัดเจน ตามที่คนอื่น ๆ ได้ชี้ให้เห็นจำนวนเต็มที่ดูคล้ายกับที่อยู่ IPv6 เป็นทศนิยม แต่ไม่ใช่ที่อยู่ที่ถูกต้อง

ดูที่ข้อมูลจำเพาะของ Teredo (ดูที่4. ที่อยู่ของ Teredo ) ไคลเอ็นต์ IPv4 ใช้ที่อยู่ IPv6 32 บิตสุดท้าย แต่ส่วนนำหน้าของตัวเลขไม่ตรงกับข้อกำหนดของ Teredo (ดูที่wikipedia )


12
คำตอบที่ดี มันอาจจะมีประโยชน์ที่จะกล่าวถึงว่าแต่ละส่วนของที่อยู่ IPv4 ประถูกเรียกว่าoctetเพราะเป็นการแทนทศนิยมของเลขฐานสอง 8 บิต (4 octets = 4 x 8 bits = 32 บิตของที่อยู่ IPv4) และทศนิยม เวอร์ชั่นเป็นเพียงเพื่อประโยชน์ของเราเท่านั้น
chritohnide

4
คุณแน่ใจหรือว่าไม่ใช่รูปแบบทศนิยม IPv6? มันสามารถแปลงเป็น0089:a4d2:471b:45ef:77ed:c70f:da35:93f0
Izkata

5
@Izkata: ไม่น่าจะเป็นเพราะที่อยู่นั้นจะอยู่ในส่วนที่ไม่ได้ถูกจัดสรรและสงวนไว้ของพื้นที่ที่อยู่ IPv6
Henning Makholm

3
จำนวน (ใน ASCII) อาจจะถูกเรียกใช้ผ่านหนึ่งในสตริง C stdlib เป็นฟังก์ชั่น int เพื่อแปลงเป็นที่อยู่ ipv4 แบบ 32 บิต ในการใช้งานส่วนใหญ่ของ C stdlib การแปลงเหล่านั้นจะทำการโมดูโล 2 ^ <ขนาดจำนวนเต็มที่ต้องการ> โดยอัตโนมัติ ผลลัพธ์ในกรณีนั้นตรงกับพฤติกรรมที่สังเกตได้
Tonny

3
เป็นที่น่าสังเกตว่านี่น่าจะเป็นตัวแยกวิเคราะห์ URL ของ Firefox ดูเหมือนว่าจะรับรู้ว่ามันเป็นตัวเลขแทนที่จะเป็น URL และพยายามแยกมันเป็นที่อยู่ IP แบบไม่ได้ผูก 32 บิต (จำนวนเต็มแยกที่เกิดขึ้นจะจบลงด้วยโมดูโลแบบ 32 บิตและมันไม่ได้ทำการตรวจสอบข้อผิดพลาดใด ๆ ) ตัวอย่างเช่น Chrome ไม่แสดงพฤติกรรมนี้ ที่จริงแล้วมันอาจคุ้มค่าที่จะรายงานว่ามันเป็นจุดบกพร่องเล็กน้อยใน Firefox
Jason C
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.