I would like to do a DNS reverse lookup (return hostname for a given IP Address) with asio, but I am not able to figure out which components I need to achieve this. Asio documentiation refers to ip::basic_resolver::resolve
, but an endpoint_type
is needed and I don't know how to use it.
Could someone please post or refer to an example?
EDIT:
With Joachim Pileborg's help I was able to accomplish the task. Needed code (Minumin without error handling):
#include <asio.hpp>
#include <string>
#include <iostream>
int main()
{
asio::ip::address_v4 ipa = asio::ip::address_v4::from_string("8.8.8.8");
asio::ip::tcp::endpoint ep;
ep.address(ipa);
asio::io_service io_service;
asio::ip::tcp::resolver resolver(io_service);
asio::ip::tcp::resolver::iterator destination = resolver.resolve(ep);
std::cout << destination->host_name() << std::endl;
return 0;
}
Type in an IP address (for example, 8.8. 8.8) and press enter. The tool will perform a reverse DNS lookup and return the name record for that IP address.
The PTR record is used for reverse DNS lookups.
I haven't used the resolver in Boost ASIO my self, but reading through the reference documentation it seems you shouldn't be using ip::basic_resolver
directly. Instead you should use e.g. ip::tcp::resolver
in which case the endpoint
is an instance of ip::tcp::endpoint
.
As each host can have multiple host names, the OPs solution could be extended like this:
asio::ip::tcp::resolver::iterator itr = resolver.resolve(ep);
asio::ip::tcp::resolver::iterator end;
for (int i = 1; itr != end; itr++, i++)
std::cout << "hostname #" << i << ": " << itr->host_name() << '\n';
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With