Нужна помощь в понимании программы на C, чтобы узнать, что машины IP-адрес - PullRequest
0 голосов
/ 25 июля 2010

Я не получаю назначение о поиске IP-адреса аппарата. Мне нужна помощь в понимании логики этого кода. Наша лаборатория колледжа использует прокси-сервер; этот код будет работать на компьютере без прокси?

      #include <stdio.h>          /* stderr, stdout */
      #include <netdb.h>          /* hostent struct, gethostbyname() */
      #include <arpa/inet.h>      /* inet_ntoa() to format IP address */
      #include <netinet/in.h>     /* in_addr structure */

      int main(int argc, char **argv) {
        struct hostent *host;     /* host information */
        struct in_addr h_addr;    /* internet address */
        if (argc != 2) {
          fprintf(stderr, "USAGE: nslookup <inet_address>\n");
          exit(1);
        }
        if ((host = gethostbyname(argv[1])) == NULL) {
          fprintf(stderr, "(mini) nslookup failed on '%s'\n", argv[1]);
          exit(1);
        }
        h_addr.s_addr = *((unsigned long *) host->h_addr_list[0]);
        fprintf(stdout, "%s\n", inet_ntoa(h_addr));
        exit(0);
      }

Ответы [ 3 ]

2 голосов
/ 25 июля 2010

2 ключевых метода, представляющих интерес здесь:

  1. gethostbyname () - Функция gethostbyname получает информацию о хосте
  2. inet_ntoa - конвертировать ip add в in_addr

Постарайтесь указать, где у вас проблемы с пониманием кода.

Код работает со мной.

$./a.out nslookup

возвращает IP-адрес хоста.

1 голос
/ 26 июля 2010

netdb.h - определения для операций с сетевой базой данных arpa/inet.h - определения для операций с Интернетом netinet/in.h - семейство интернет-адресов Функция gethostname() возвращает стандартное имя хоста для текущего компьютера.inet_ntoa(h_addr) Чтобы преобразовать IP-адрес из 32-разрядного сетевого формата обратно в десятичный разделитель.

Это основные термины понимания.Наиболее важно использовать google для деталей.

0 голосов
/ 25 июля 2010

На самом деле функция gethostbyname выполняет DNS-запрос, который возвращает заполненную структуру hostent.Вам может быть интересно, например, перехватить сеть с помощью wireshark, чтобы посмотреть, как выглядит трафик.

...