Можем ли мы использовать ssh для подключения к веб-серверу, а затем отправить HTTP-запрос и получить HTTP-ответ?
Нет. SSH - более сложный протокол, чем
telnet
.
telnet
- это просто текстовый протокол , отправляющий текстовые запросы и получающий текстовые ответы. Здесь не используется шифрование. Он имеет много общего с HTTP (также текстовый протокол с простыми сообщениями запроса и ответа), поэтому вы можете использоватьtelnet
для получения ответов HTTP.SSH - это бинарный протокол. Также протокол встроен в двоичный файл
ssh
, поэтому вам не нужно о нем заботиться (в отличие отtelnet
, где вам нужно аутентифицироваться с помощью специальных команд).Вы можете прочитать баннер, но затем начнется обмен ключами, а позже вы получите зашифрованные пакеты, которые вам придется как-то расшифровать, чтобы понять, что там происходит (и отправить зашифрованные пакеты, чтобы получить некоторые ответы).
telnet localhost 22 Попытка 127.0.0.1 ... Подключено к localhost. Escape-символ - '^]'. SSH-2.0-OpenSSH_7 .2p2 SSH-2.0-OpenSSH_7.2p2 � \ �� դ `� (скрыто)
Какие еще программы ...
Как уже упоминалось,
netcat
является хорошим примером, если вы хотите писать необработанные HTTP-запросы. В противном случае вы можете добиться того же с помощьюwget
,curl
или просто с помощью инструментов разработчика в вашем браузере.Чтобы ответить на дополнительные вопросы:
(1) telnet также является протоколом, отличным от http, но почему мы можем использовать http поверх telnet, но не можем использовать ssh?
Это не » http через telnet ».Вы все еще используете протокол HTTP, но используете инструмент
telnet
. Это текстовые протоколы без ограничений, и вы можете отправлять все, что угодно , используя их.(2) Что означает «баннер с сервера», которого ожидают клиенты SSH, прежде чем продолжить проверку ключа хоста сервера?
Сервер ожидает «баннера от клиента» , формально строки идентификации клиента , как описано в RFC4253 , описывающем транспортный уровень SSH. Перед тем, как приступить к проверке ключа хоста сервера, есть много этапов, но в основном это обмен ключами (первое сообщение, показанное выше).
В каталоге слишком много элементов. Это заставляет оболочку расширять *
в аргумент командной строки, который превышает ARG_MAX байт:
$ grep ARG_MAX /usr/include/linux/limits.h
#define ARG_MAX 131072 /* # bytes of args + environ for exec() */
Я предлагаю вам использовать find
в качестве обходного пути:
$ find "${PWD}" -mindepth 1 -maxdepth 1 > formmlFileList43k.list
EDIT: @hagello написал важную заметку об именах файлов, начинающихся с точки. Эти файлы следует исключить из вывода find
. Итак, правильный обходной путь:
$ find "${PWD}" -mindepth 1 -maxdepth 1 '!' -name '.*' > formmlFileList43k.list