Как скачать URL из интернета по netcat?

3

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

# Server
nc -l -p 8080 < file

# client
nc 192.168.1.101 8080 > file

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

kev
источник

Ответы:

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 и так далее.
allquixotic
источник
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
kev
источник