2011-08-03 30 views
5

Bất kỳ ai gặp phải điều này trước đây:Làm cách nào để xóa bộ nhớ cache cho phản hồi socket.gethostbyname?

Sau khi cập nhật bản ghi DNS .. Tôi thực hiện tìm kiếm 'test.somedomain.com' Tôi nhận được 167.69.143.234, tuy nhiên khi tôi thực hiện một socket.gethostbyname ('test.somedomain. com ') Tôi nhận được 167.69.6.234.

Tôi đoán ổ cắm vẫn đang sử dụng bộ nhớ cache ... làm thế nào để xóa nó? hoặc tuôn ra nó?

Mã của tôi rất đơn giản:

Linux termianl

dig test.somedomain.com 

Python:

import socket 
socket.gethostbyname('test.somedomain.com') 

Cần trả lại địa chỉ 167.69.143.234 như đó là cập nhật một trong DNS.

Trả lời

6

Python socket.gethostbyname sử dụng trình phân giải hệ điều hành và không có API để xóa bộ nhớ cache của nó. Bộ nhớ đệm (có thể là máy chủ DNS lưu trữ được hệ điều hành hoặc hệ điều hành hoặc thành phần thư viện chuẩn sử dụng) là yếu tố cơ bản của hệ thống DNS và 'đúng cách' để đối phó với nó là đợi đến khi giá trị TTL của bản ghi hết hạn (hệ điều hành nên loại bỏ giá trị cũ từ bộ nhớ cache sau đó). Khi cập nhật DNS, có lẽ bạn nên có TTL của giá trị cũ được điều chỉnh trước đó. Bạn cũng có thể sử dụng triển khai DNS Python, như DNSPython thay vì sử dụng socket.gethostbyname - bạn sẽ có toàn quyền kiểm soát bộ nhớ cache của trình giải quyết (nhưng không phải là bộ nhớ cache của NS mà trình giải quyết sử dụng) sau đó. Mặc dù, nó sẽ không có thể khắc phục vấn đề của bạn (với một mã hiện có, tôi đoán).

2

DNS không được lưu trong bộ nhớ cache trên Linux theo mặc định và yêu cầu một daemon như sssd hoặc nscd. Bạn chỉ có thể khởi động lại daemon để buộc kéo địa chỉ mới.

Lưu ý đối với người dùng Windows: có bộ nhớ cache mặc định có thể xóa bằng ipconfig /flushdns.

Hoặc bạn có thể có một mục được mã hóa cứng trong /etc/hosts, trước tiên hãy kiểm tra. Các công cụ như hoặc nslookup sẽ truy vấn trực tiếp máy chủ DNS và bỏ qua hệ thống con thư viện NSS.

Các vấn đề liên quan