nslooup.c не может справиться с http / https? - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь сделать свои первые шаги в программировании на udp / tcp, и у меня возникла проблема. После компиляции и запуска nslookup.c (я использую Linux Ubuntu) я получаю веб-информацию, пока я не набирал протокол перед доменом. Например, набрав ./nslookup www.yahoo.com - будет работать нормально. Однако ввод ./nslookup http://www.yahoo.com - приведет к ошибке: Error in resolving hostname.

вот код, который я использую:

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char* argv[]) {
  struct addrinfo* res;
  char* hostname;
  char* hostaddr;
  struct sockaddr_in* saddr;

  if (argc != 2) {
    perror("Usage: hostnamelookup <hostname>\n");
    exit(1);
  }

  hostname = argv[1];

  if (0 != getaddrinfo(hostname, NULL, NULL, &res)) {
    fprintf(stderr, "Error in resolving hostname %s\n", hostname);
    exit(1);
  }

  saddr = (struct sockaddr_in*)res->ai_addr;
  hostaddr = inet_ntoa(saddr->sin_addr);

  printf("Address for %s is %s\n", hostname, hostaddr);
  exit(0);
}

В чем причина этой проблемы? Спасибо

1 Ответ

0 голосов
/ 02 мая 2018

http://www.yahoo.com это не имя хоста, это скорее URL. URL имеет (или может иметь) несколько компонентов, но в данном случае это просто протокол (часть 'http', и имя хоста, который является www.yahoo.com часть. Итак, эта часть, являющаяся фактическим именем хоста будет (или может, могут быть и другие ошибки) разрешаться, тогда как URL, не являющийся именем хоста, потерпит неудачу. Вам может понадобиться написать или использовать парсер URL, если вам нужно делать такие вещи в более общем плане.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...