http://qs1969.pair.com?node_id=1087438


in reply to Net::Dns::packet creation.

Try to read 'perldoc -f gethostbyname'. Basically, using that function you can get address suitable for use with 'connect' or 'bind' functions.

Module Socket also offers functions inet_ntoa and inet_aton that can be used to convert between packed and unpacked IP addresses.

Normally, module IO::Socket::INET takes care of this for you. So I don't remember when I've used these functions last time.

Just for general education. On the low level, networking requires "packed" addresses. The format of these addresses depends on the type of the network. Normally people work with IPv4 networks. The addresses on these networks are represented by 4 numbers from 0 to 255. Unpacked form of these addresses is written as 4 numbers joined by dot (10.30.96.10). One has to use some function to convert from "unpacked" form to "packed" one. To make things more complex (but easier to remember) people have introduced names that are associated with numbers. Those are referred as "domain-names". There's a service that maps names to IP addresses. There are special system functions for accessing that service. The service returns "packed" addresses.

Of course, if you have string '10.30.96.10', then you don't have to access DNS to obtain packed address. Function Socket::inet_aton can pack it for you. In this case, DNS can be contacted to obtain domains that are associated with this address (reverse lookup).