3

Я могу использовать netcat для передачи файлов между двумя компьютерами.

# Server
nc -l -p 8080 < file

# client
nc 192.168.1.101 8080 > file

Могу ли я использовать netcat для загрузки URL-адреса из Интернета, например wget?

2 ответа2

6

Предполагая, что вы имеете в виду обычный URL-адрес HTTP, это возможно, но для этого необходимо вручную ввести HTTP-запрос. Если для URL-адреса требуется HTTP-запрос POST с формой в кодировке URL или для поиска определенных заголовков, это может быть довольно громоздким.

Вам нужно будет предоставить действительный HTTP-запрос на стандартный ввод netcat. Общая идея такова:

Выполните команду nc example.com 80

netcat начнет чтение со стандартного stdin , и все, что вы введете или вставите в терминал, будет отправлено по сети на удаленный сервер с выбранным вами портом (80 - это порт HTTP по умолчанию).

Теперь вам нужно ввести или вставить HTTP-запрос, например:

GET / HTTP/1.1
Host: example.com
User-Agent: netcat

В конце вам также понадобятся некоторые новые строки, поэтому нажимайте несколько раз клавишу ввода, пока не получите ответ HTTP. Тогда вам придется вручную разобрать ответ.

Netcat работает на уровне TCP, поэтому любой протокол, основанный на HTTP, технически может использоваться с netcat, но для протоколов, которые не подходят для человеческого ввода (таких как ssh и https), это может быть трудно использовать, если вы не написание сценария из программы. И если вы пишете программу, почему вы не используете обычные TCP-сокеты?

Ограничения netcat для этой цели следующие:

  • Netcat не понимает HTTP, FTP, HTTPS, SSH или любой другой протокол прикладного уровня. Независимо от того, какой сценарий, программа или ручное управление вы используете, этот ввод должен обладать достаточными знаниями о проводном протоколе прикладного уровня, чтобы правильно взаимодействовать с сервером.
  • Даже простые протоколы, такие как HTTP, могут иметь сложности, которые требуют детального знания протокола - кусочная кодировка, URL-кодированные формы, различное поведение в зависимости от предоставляемых файлов cookie, пользовательского агента и т.д. И HTTPS, требующий успешного установления связи SSL. Я не знаю никого, кто мог бы вручную вводить рукопожатие SSL, используя только свой мозг :)
  • Поскольку netcat тупой, он не дает никаких преимуществ по сравнению с использованием программного сокета TCP, если вы пишете программу. Если вы просто печатаете на терминале, проще использовать программу, которая поддерживает надлежащие протоколы прикладного уровня, такие как wget, curl, lftp, ssh и так далее.
1
# create a request file
$ cat req
GET / HTTP/1.1
Host: superuser.com
User-Agent: Mozilla/5.0

# send request to get response
$ nc superuser.com 80 <req >res

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .