Функции, которые вы вызываете, и область, которую вы исследуете, дают вам 32-битную переменную с каждым 8-битным октетом, содержащим один сегмент вашего IP-адреса. Следующий код:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
#define HOST_NAME_MAX 1024
int main (void) {
char *clientHostName = malloc(HOST_NAME_MAX);
gethostname(clientHostName, HOST_NAME_MAX);
printf("%s\n",clientHostName);
struct hostent *thehost = gethostbyname(clientHostName);
printf("%ld\n",(*((unsigned long *) thehost->h_addr_list[0])));
printf("%08lx\n",(*((unsigned long *) thehost->h_addr_list[0])));
return 0;
}
на моей коробке Xubuntu выдает:
formaldehyde
16842879
0101007f
и, если разбить это шестнадцатеричное число в конце на 01
, 01
, 00
и 7f
, то это (в обратном порядке из-за моего процессора) 127.0.1.1
, один из циклических адреса.