การค้นหา DNS ไม่ส่งคืนคำตอบ


0

ฉันใช้เวลาหลายชั่วโมงในวันนี้เพื่อหาเหตุผลว่าทำไมการติดตั้ง Socket ในระดับเบราว์เซอร์ของตัวเองจึงไม่ทำงานอย่างสม่ำเสมอ ฉันจะส่งแพ็กเก็ต DNS ผ่าน UDP ได้สำเร็จ แต่จะได้รับคำตอบโดยไม่มีส่วนคำตอบ บางครั้งมันจะทำงาน แต่ก็จะหยุดทำงานทันทีโดยไม่มีการเปลี่ยนแปลงรหัสใด ๆ หลังจากดึง Wireshark ออกมาฉันเห็นภาพสองภาพต่อไปนี้ (ภาพหนึ่งผ่าน Dig ที่ประสบความสำเร็จและอีกภาพหนึ่งแสดงโดยเว็บแอปของฉันไม่ใช่)

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


0

กุญแจที่ฉันสังเกตเห็นอยู่ในบิตเดียวว่าต้องการเรียกซ้ำ ตามhttp://www.ietf.org/rfc/rfc1035.txtและ RFC 1035 ที่หน้า 25:

Recursion Desired - this bit may be set in a query and is copied into the response.
If RD is set, it directs the name server to pursue the query recursively.
Recursive query support is optional."

ในตอนแรกฉันไม่คิดว่าบิตนี้เป็นสาเหตุของปัญหาเนื่องจากบางครั้งฉันได้รับการตอบสนองที่ถูกต้องโดยไม่มีชุดบิต (เช่นมี 0 สำหรับการสอบถามซ้ำ) คำอธิบายคือถ้าตัวแก้ไขมีผลแคชมันจะส่งคืนแม้ว่า 0 สำหรับการสอบถามซ้ำ

หลังจากเล่นไปรอบ ๆ ที่บรรทัดคำสั่งฉันจำลองพฤติกรรมของฉันกับ Dig โดยผ่านการตั้งค่าสถานะ "+ norecurse":

$ dig mx google.com @8.8.8.8 +norecurse

; <<>> DiG 9.8.3-P1 <<>> mx google.com @8.8.8.8 +norecurse
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62530
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.            IN  MX

;; Query time: 50 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 24 19:52:23 2012
;; MSG SIZE  rcvd: 28

ฉันลบ + norecurse และทุกอย่างทำงานได้ดี!

บทเรียน: หากคุณไม่เห็นส่วนคำตอบใด ๆ ต่อคำขอ DNS ของคุณให้ตรวจสอบว่าคุณใช้แบบสอบถามแบบเรียกซ้ำหรือไม่ โอกาสที่คุณจะไม่ได้และไม่มีผลแคชกับตัวแก้ไขของคุณที่คุณกำลังสอบถามดังนั้นคุณจะไม่ได้รับอะไรเลย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.