2012-11-09 28 views
5

Tôi đang chạy một Máy ảo cung cấp các giá trị sau và khi mã được chạy (bằng cách thực hiện một số hành động trên trang web)socket.getfqdn() và socket.gethostname() đang đưa ra các địa chỉ IP khác nhau khi sử dụng socket.gethostname

socket.getfqdn() 
x-vps-01.abc.it 

socket.gethostname() 
x-vps-01 

socket.gethostbyname(socket.getfqdn()) 
216.185.103.35 

socket.gethostbyname(socket.gethostname()) 
78.47.171.19 

Xin lưu ý rằng, khi tôi đăng nhập vào thiết bị đầu cuối và chạy trên, tôi luôn nhận được 78.47.171.19

+1

Mô tả thiết lập mạng, máy chủ lưu trữ và giao diện/IP của máy ảo và cách bạn nối vào DNS. –

Trả lời

8

tôi đã cố gắng những gì bạn đã làm trên một hộp Linux. Có lẽ bạn nên nêu rõ tình trạng của hệ điều hành và mạng mà bạn đang chạy.

Sử dụng strace tôi thấy rằng socket.getfqdn() là sử dụng thông tin được cung cấp trong tập tin /etc/hosts khi socket.gethostname() chỉ in dữ liệu từ kết quả của các cuộc gọi hệ thống uname(); về cơ bản bạn có thể nói người hỏi mô-đun mạng trong khi người kia hỏi hạt nhân. Cả hai đều có câu trả lời cho câu hỏi của bạn nhưng họ không nhất thiết phải phù hợp bởi vì họ có quan điểm khác nhau về vấn đề đó.

Gọi socket.gethostbyname() cũng truy vấn mô-đun mạng (tìm kiếm nội dung của tệp /etc/hosts cho khớp trong trường hợp của tôi). Đưa ra câu trả lời của hạt nhân với chức năng mạng không thực sự là những gì bạn nên làm. Trong hầu hết các trường hợp, điều này sẽ làm việc tuy nhiên. Bạn tìm thấy một chỗ mà nó tạo ra kết quả lạ.

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