--- /dev/null
+#include <boost/asio.hpp>
+#include <iostream>
+
+#include "hostaddress.h"
+
+#include "dnsresolver.h"
+
+using namespace std;
+using namespace boost::asio;
+using namespace boost::asio::ip;
+
+//-----------------------------------------------------------------------------
+// DnsResolver
+//-----------------------------------------------------------------------------
+
+DnsResolver::DnsResolver( string dns_address ) :
+ ResolvedHostAddressList()
+{
+ resolve( dns_address );
+}
+
+DnsResolver::~DnsResolver()
+{
+}
+
+string DnsResolver::get_next_ip()
+{
+ uint list_size_before = ResolvedHostAddressList.size();
+
+ HostAddress host_address = ResolvedHostAddressList.front();
+ ResolvedHostAddressList.pop_front();
+ string destination_ip = host_address.get_ip();
+ ResolvedHostAddressList.push_back( host_address );
+
+ uint list_size_after = ResolvedHostAddressList.size();
+ BOOST_ASSERT( list_size_before == list_size_after );
+
+ return destination_ip;
+}
+
+/**
+ * Resolve which IPs belong to the given DNS and build a list of these IPs.
+ *
+ * @param dns_address The DNS address to be query for IPs.
+ */
+void DnsResolver::resolve( string dns_address )
+{
+ BOOST_ASSERT( !dns_address.empty() );
+
+ cerr << " - Host : " << dns_address << endl;
+
+ io_service io_service;
+ tcp::resolver resolver( io_service );
+ tcp::resolver::query query( tcp::v4(), dns_address, "" );
+ tcp::resolver::iterator it_first = resolver.resolve( query );
+ tcp::resolver::iterator it_last = tcp::resolver::iterator();
+ while ( it_first != it_last )
+ {
+ string ip = (*it_first).endpoint().address().to_string();
+
+ HostAddress resolved_host;
+ resolved_host.set_ip( ip );
+ ResolvedHostAddressList.push_back( resolved_host );
+
+ cerr << " |_ " << ip << endl;
+
+ ++it_first;
+ }
+
+ BOOST_ASSERT( 0 < ResolvedHostAddressList.size() );
+}
--- /dev/null
+#ifndef DNSRESOLVER_H
+#define DNSRESOLVER_H
+
+#include <string>
+#include <list>
+
+class HostAddress;
+
+//-----------------------------------------------------------------------------
+// DnsResolver
+//-----------------------------------------------------------------------------
+
+class DnsResolver
+{
+public:
+ DnsResolver( std::string dns_address );
+ virtual ~DnsResolver();
+
+ std::string get_next_ip();
+
+private:
+ void resolve( std::string dns_address );
+
+private:
+ std::list<HostAddress> ResolvedHostAddressList;
+
+};
+
+#endif /* DNSRESOLVER_H */
--- /dev/null
+#include "hostaddress.h"
+
+using namespace std;
+
+//-----------------------------------------------------------------------------
+// HostAddress
+//-----------------------------------------------------------------------------
+
+HostAddress::HostAddress() :
+ Ip( "" ),
+ Ttl( 0 )
+{
+}
+
+HostAddress::~HostAddress()
+{
+}
+
+void HostAddress::set_ip( string ip )
+{
+ this->Ip = ip;
+}
+
+string HostAddress::get_ip() const
+{
+ return Ip;
+}
+
+uint HostAddress::get_ttl() const
+{
+ return Ttl;
+}
+
+void HostAddress::set_ttl( uint ttl )
+{
+ this->Ttl = ttl;
+}
+
--- /dev/null
+#ifndef HOSTADDRESS_H_
+#define HOSTADDRESS_H_
+
+#include <string>
+#include <sys/types.h>
+
+//-----------------------------------------------------------------------------
+// HostAddress
+//-----------------------------------------------------------------------------
+
+class HostAddress
+{
+public:
+ HostAddress();
+ virtual ~HostAddress();
+
+ std::string get_ip() const;
+ void set_ip( std::string ip );
+
+ uint get_ttl() const;
+ void set_ttl( uint ttl );
+
+private:
+ std::string Ip;
+ uint Ttl;
+
+};
+
+#endif /* HOSTADDRESS_H_ */