Tôi đang cố gắng phân giải tên máy chủ từ địa chỉ ip. Tôi đã thử sử dụng gethostbyaddr()
và getnameinfo()
nhưng trong nhiều trường hợp tên máy chủ không được giải quyết chút nào. Có cách nào tốt hơn để chuyển một địa chỉ IP thành một tên máy chủ hợp lệ?Giải quyết ip thành tên máy chủ
char* ip = argv[1];
// using gethostbyaddr()
hostent * phe = gethostbyaddr(ip, strlen(ip), AF_INET);
if(phe) {
cout << phe->h_name << "\n";
}
// using getnameinfo()
char hostname[260];
char service[260];
sockaddr_in address;
memset(&address, 0, sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(ip);
int response = getnameinfo((sockaddr*)&address,
sizeof(address),
hostname,
260,
service,
260,
0);
if(response == 0) {
cout << hostname << "\n";
}
Không phải tất cả địa chỉ IP đều có tên máy chủ ngược. Điều gì khiến bạn nghĩ rằng các địa chỉ IP không trả về tên máy chủ lưu trữ phải có một địa chỉ? – Bruno
@Bruno - Trong một số trường hợp khi tôi không nhận được tên máy chủ, tôi đã thử chạy 'nslookup
' từ thiết bị đầu cuối và lệnh này trả về tên máy chủ. Vì vậy, tôi đã nghĩ rằng có lẽ có một cách chính xác hơn để làm điều này. – CyclonecodeTôi biết rằng đây không phải là câu trả lời NHƯNG bạn nên gắn bó với getaddrinfo và getnameinfo vì chúng hữu ích trong cả hai trường hợp cho địa chỉ mạng Ipv4 và Ipv6. – excanoe