Разница между ping и wget в отношении разрешения имени хоста

Если ваш инструмент командной строки является интерактивным, вы можете написать expect - скрипт. В таком сценарии вы можете "ожидать" некоторого вывода (например, $> как пользовательский запрос) и, когда он появится, послать команду на stdin вашей командной строки.

Смотрите, например, статью в Википедии https://en.wikipedia.org/wiki/Expect

Если ваш инструмент не интерактивный, вы можете написать простой скрипт (как указано в комментарии), который будет вызывать каждую команду, которую вам нужно использовать, например:

#!/bin/bash
command1 arg1
command2 arg1 arg2

Когда вы вызываете этот скрипт через . /path/to/script он будет выполнять каждую команду до тех пор, пока не

  1. захочет получить ввод на stdin, или
  2. не выполнит последнюю команду

4
24.12.2016, 06:18
3 ответа

Wget в основном используется для загрузки через HTTP, HTTPS и FTP, поэтому по умолчанию для соединений будет использоваться TCP. Ping использует протокол под названием ICMP , который в основном передает "привет" хосту и проверяет, отвечает ли он. ICMP не использует порт, что означает http: //. Он сообщает "компьютеру" открыть соединение на порту 80 "и для HTTPS-порта 443. Поскольку ICMP не использует порты, ping ожидает только и IP-адрес, но wget установил TCP-соединение и загрузил файл.

{{ 1}}
5
27.01.2020, 20:45

Чтобы ответить на вопрос, который вы задали. wget принимает URL-адрес, но ping принимает имя хоста. Ваш URL-адрес состоит из протокол ( https ), имя хоста ( gfe.cit.api.here.com ), путь ( /1/layer_put.json ) и три закодированные параметры ( layer_id = 123 & app_id = x2 & app_code = x1 ). В URL могут отображаться и другие элементы, например аутентификация и порт.

Для приемлем только компонент имени хоста. ] команду ping .

Затем команда wget открывает TCP / IP-соединение с портом, ожидаемым протоколом ( 443 / tcp в случае https ) и использует протокол HTTP для получения содержимого с указанного URL.

Команда ping использует ICMP для отправки запроса ping на указанный хост, который затем возвращает ответ эхо-ответ . Это пакеты ICMP типов 8 и 0 соответственно.


Основная причина ошибки wget заключается в том, что вы не указали параметр для wget , поэтому оболочка анализирует его. Символ и в середине URL-адреса указывает оболочке запускать все до этого момента в фоновом режиме. Затем он немедленно запускает оставшиеся две части строки и сразу же выводит ошибки.

Используйте одинарные кавычки в своем URL-адресе, и, вероятно, все будет работать так, как вы планировали.

Итак, мы имеем

wget -O layer_put.json 'https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1'

ping -c3 gfe.cit.api.here.com
6
27.01.2020, 20:45

В ответ на:

В чем разница между «ping» и «wget» в отношении разрешения имени хоста

Ping ожидает либо IP-адрес, либо имя хоста в качестве параметра. Вы даете ему полный URL-адрес, который он пытается разрешить как имя хоста и терпит неудачу. Когда все, кроме полностью квалифицированного имени, удалено, команда ping может проверить соединение (и не работает в моем следующем тесте, возможно, из-за того, что запрос ICMP заблокирован или сервер down):

$ ping gfe.cit.api.here.com

Pinging cle2-cit.eu-west-1.elasticbeanstalk.com [54.154.19.134] with 32 bytes of data:
Request timed out.

Общие различия между ping и wget см. в ответе Алека.

Вероятную причину, объясняющую ошибку 400, см. В статье Роаймы.

11
27.01.2020, 20:45

Теги

Похожие вопросы