พฤติกรรมที่แตกต่างกันของ InetSocketAddress#getHostName ใน windows และ linux สำหรับ 127.0.0.1

InetAddress.getByName("127.0.0.1").getHostName()

String ข้างต้นใน windows ส่งคืน 127.0.0.1 แต่ใน linux จะส่งกลับ localhost

เอกสารของ InetAddress#getHostName พูดว่า:

หาก InetAddress นี้ถูกสร้างขึ้นด้วยชื่อโฮสต์ ชื่อโฮสต์นี้จะถูกจดจำและส่งคืน มิฉะนั้น จะดำเนินการค้นหาชื่อแบบย้อนกลับ และผลลัพธ์จะถูกส่งกลับตามบริการค้นหาชื่อที่กำหนดค่าโดยระบบ

  • นี่เป็นพฤติกรรมที่คาดหวังหรือไม่
  • เหตุใดความแตกต่างนี้สำหรับระบบปฏิบัติการที่แตกต่างกัน
  • เป็นกรณีที่บริการค้นหาชื่อสำหรับ linux และ windows แตกต่างกันและนั่นคือเหตุผลที่เราเห็นความแตกต่างในลักษณะการทำงานนี้หรือไม่

ฉันเคยเห็นคำถามนี้ แต่คำถามของฉันเกี่ยวกับความแตกต่าง ในพฤติกรรมของ API ใน windows และ linux และสาเหตุของความแตกต่างนี้


person Lavish Kothari    schedule 04.04.2019    source แหล่งที่มา
comment
ใบเสนอราคาไม่เกี่ยวข้อง InetAddress นี้สร้างขึ้นด้วยที่อยู่ IP ไม่ใช่ชื่อโฮสต์   -  person user207421    schedule 05.04.2019


คำตอบ (1)


ดังนั้นจึงไม่มีความแตกต่างที่สำคัญระหว่าง Windows และ Linux มีความแตกต่างในการกำหนดค่าของทั้งสองแม้ว่า ตามที่ระบุไว้ในคำถามที่คุณอ้างอิง ขึ้นอยู่กับสิ่งที่อยู่ภายในไฟล์ hosts นี่คือไฟล์ที่มีทั้งบน Windows และ Linux และจะบอกระบบปฏิบัติการว่า IP ใดที่สามารถกำหนดให้กับชื่อโฮสต์เฉพาะได้ นี่คือตัวอย่างรายการในไฟล์:

127.0.0.1    localhost

สิ่งนี้จะบอก OS ว่าถ้าฉันส่งคำขอไปที่ localhost เพียงกำหนดเส้นทางคำขอไปที่ 127.0.0.1 คล้ายกับสิ่งที่เซิร์ฟเวอร์ DNS ทำ แต่กระบวนการนี้เกิดขึ้นบนคอมพิวเตอร์ของคุณ โดยไม่ต้องตรวจสอบอินเทอร์เน็ต

ตอนนี้ พูดถึงสาเหตุที่บรรทัดนั้นเปลี่ยนแปลงบนแพลตฟอร์มต่างๆ เอกสารบอกว่าสิ่งนี้:

หาก InetAddress นี้ถูกสร้างขึ้นด้วยชื่อโฮสต์ ชื่อโฮสต์นี้จะถูกจดจำและส่งคืน มิฉะนั้น การค้นหาชื่อแบบย้อนกลับจะดำเนินการและผลลัพธ์จะถูกส่งกลับตามบริการค้นหาชื่อที่กำหนดค่าโดยระบบ หากจำเป็นต้องค้นหาบริการชื่อ ให้โทร getCanonicalHostName

ส่วนนี้อ้างอิงถึงชื่อโฮสต์ที่ระบุในไฟล์ hosts บนระบบ Linux ของคุณ ไฟล์ hosts มีรายการที่มีลักษณะคล้ายกับรายการด้านบน (ซึ่งค่อนข้างพบได้ทั่วไปในสภาพแวดล้อม Linux) Java สังเกตเห็นสิ่งนี้ และส่งคืนสิ่งนั้นแทน IP เนื่องจากไม่มีรายการดังกล่าวบน Windows จึงส่งคืน IP แทนได้อย่างง่ายดาย

person Fishy    schedule 04.04.2019