i'm trying to convert an IP address that's inputted by a user so that I can perform some bitwise operations on it and a address already stored in a structure. My problem is however that when the IP address is converted back the output is always 255.255.255.255. For example a input of 10.0.0.1 or 192.16.2.1 always returns 255.255.255.255.
Any help would be appreciated. THANKS
{
struct sockaddr_in sa;
char ipinput[INET_ADDRSTRLEN];
fputs("Enter an IP Address: ", stdout);
fflush(stdout);
fgets(ipinput, sizeof ipinput, stdin);
inet_pton(AF_INET, ipinput, &(sa.sin_addr));
inet_ntop(AF_INET, &(sa.sin_addr), ipinput, INET_ADDRSTRLEN);
printf("IP Address = \%s\ \n", ipinput);
}
The inet_ntop() function converts from an Internet address in binary format, specified by src, to standard text format, and places the result in dst, when size, the space available in dst, is sufficient. The argument af specifies the family of the Internet address.
The inet_pton() function converts an Internet address in its standard text format into its numeric binary form. The argument af specifies the family of the address.
in_addr_t inet_addr(const char *strptr) This function call converts the specified string in the Internet standard dot notation to an integer value suitable for use as an Internet address.
You're not checking the value returned by inet_pton
, you would have noticed it fails. As it turns out, it doesn't like the newline left in by fgets
. Trim it:
ipinput[strlen(ipinput) - 1] = 0;
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