Netcat подключение. Полезные команды Linux

nc [-46bCDdhklnrStUuvZz] [-I length ] [-i interval ] [-O length ] [-P proxy_username ] [-p source_port ] [-q seconds ] [-s source ] [-T toskeyword ] [-V rtable ] [-w timeout ] [-X proxy_protocol ] [-x proxy_address [:port ]] [destination ] [port ]

Options

-4 Forces nc to use IPv4 addresses only.
-6 Forces nc to use IPv6 addresses only.
-b Allow broadcast.
-C Send as line-ending.
-D Enable debugging on the socket.
-d Do not attempt to read from stdin .
-h Prints out nc help.
-I length Specifies the size of the TCP receive buffer .
-i interval Specifies a delay time interval between lines of text sent and received. Also, causes a delay time between connections to multiple ports.
-k Forces nc to stay listening for another connection after its current connection is completed. It is an error to use this option without the -l option.
-l Used to specify that nc should listen for an incoming connection rather than initiate a connection to a remote host . It is an error to use this option in conjunction with the -p , -s , or -z options. Additionally, any timeouts specified with the -w option are ignored.
-n Do not do any DNS or service lookups on any specified addresses, hostnames or ports .
-O length Specifies the size of the TCP send buffer.
-P proxy_username Specifies a username to present to a proxy server that requires authentication . If no username is specified then authentication will not be attempted. Proxy authentication is only supported for HTTP CONNECT proxies at present.
-p source_port Specifies the source port nc should use, subject to privilege restrictions and availability.
-q seconds after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
-r Specifies that source or destination ports should be chosen randomly instead of sequentially within a range or in the order that the system assigns them.
-S Enables the RFC 2385 TCP MD5 signature option.
-s source Specifies the of the interface that is used to send the packets . For UNIX-domain datagram sockets, specifies the local temporary socket file to create and use so that datagrams can be received. It is an error to use this option in conjunction with the -l option.
-T toskeyword Change IPv4 TOS value. toskeyword may be one of critical , inetcontrol , lowcost , lowdelay , netcontrol , throughput , reliability , or one of the DiffServ Code Points: ef , af11 ... af43 , cs0 ... cs7 ; or a number in either hex or decimal .
-t Causes nc to send RFC 854 DON"T and WON"T responses to RFC 854 DO and WILL requests. This makes it possible to use nc to script telnet sessions.
-U Specifies to use UNIX-domain sockets.
-u Use UDP instead of the default option of TCP. For UNIX-domain sockets, use a datagram socket instead of a stream socket. If a UNIX-domain socket is used, a temporary receiving socket is created in /tmp unless the -s flag is given.
-V rtable Set the routing table to be used. The default is 0.
-v Have nc give more verbose output.
-w timeout Connections which cannot be established or are idle timeout after timeout seconds. The -w flag has no effect on the -l option, i.e. nc will listen forever for a connection, with or without the -w flag. The default is no timeout.
-X proxy_protocol Requests that nc should use the specified protocol when talking to the proxy server. Supported protocols are "4 " (SOCKS v.4), "5 " (SOCKS v.5) and "connect " (HTTPS proxy). If the protocol is not specified, SOCKS version 5 is used.
-x proxy_address[:port] Requests that nc should connect to destination using a proxy at proxy_address and port . If port is not specified, the well-known port for the proxy protocol is used (1080 for SOCKS, 3128 for HTTPS).
-Z DCCP mode.
-z Specifies that nc should only scan for listening daemons, without sending any data to them. It is an error to use this option in conjunction with the -l option.

destination can be a numerical IP address or a symbolic hostname (unless the -n option is given). In general, a destination must be specified, unless the -l option is given (in which case the local host is used). For UNIX-domain sockets, a destination is required and is the socket path to connect to (or listen on if the -l option is given).

port can be a single integer or a range of ports. Ranges are in the form nn-mm . In general, a destination port must be specified, unless the -U option is given.

Client/Server model

It is quite simple to build a very basic client/server model using nc . On one console, start nc listening on a specific port for a connection. For example:

Nc -l 1234

nc is now listening on port 1234 for a connection. On a second console (or a second machine), connect to the machine and port being listened on:

Nc 127.0.0.1 1234

There should now be a connection between the ports. Anything typed at the second console will be concatenated to the first, and vice-versa. After the connection was set up, nc does not really care which side is being used as a ‘server’ and which side is being used as a ‘client’. The connection may be terminated using an EOF (‘^D ’).

There is no -c or -e option in modern netcat, but you still can execute a command after connection being established by redirecting file descriptors. Be cautious here because opening a port and let anyone connected execute arbitrary command on your site is DANGEROUS. If you really need to do this, here is an example:

On ‘server’ side:

Rm -f /tmp/f; mkfifo /tmp/f cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

On ‘client’ side:

Nc host.example.com 1234

(shell prompt from host.example.com)

Start by using nc to listen on a specific port, with output captured into a file:

Nc -l 1234 > filename.out

Using a second machine, connect to the listening nc process, feeding it the file that is to be transferred:

Nc host.example.com 1234 < filename.in

After the file is transferred, the connection will close automatically.

Talking to servers

It is sometimes useful to talk to servers "by hand" rather than through a user interface. It can aid in troubleshooting, when it might be necessary to verify what data a server is sending in response to commands issued by the client. For example, to retrieve the homepage of a website:

Printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

Note that this also displays the headers sent by the web server. They can be filtered, using a tool such as sed , if necessary.

More complicated examples can be built up when the user knows the format of requests required by the server. As another example, an e-mail may be submitted to an SMTP server using:

Nc [-C] localhost 25 << EOF HELO host.example.com MAIL FROM:< > RCPT TO:< > DATA Body of e-mail. . QUIT EOF

Port scanning

It may be useful to know which ports are open and running services on a target machine. The -z flag can be used to tell nc to report open ports, rather than initiate a connection. Usually, it"s useful to turn on verbose output to stderr by use this option in conjunction with -v option.

Nc -zv host.example.com 20-30 Connection to host.example.com 22 port succeeded! Connection to host.example.com 25 port succeeded!

The port range was specified to limit the search to ports 20 - 30 , and is scanned by increasing order.

You can also specify a list of ports to scan, for example:

Nc -zv host.example.com 80 20 22 nc: connect to host.example.com 80 (tcp) failed: Connection refused nc: connect to host.example.com 20 (tcp) failed: Connection refused Connection to host.example.com port succeeded!

The ports are scanned by the order you given.

Alternatively, it might be useful to know which server software is running, and which versions. This information is often contained in the greeting banners. To retrieve these, it is necessary to first make a connection, and then break the connection when the banner was retrieved. This can be accomplished by specifying a small timeout with the -w flag, or perhaps by issuing a "QUIT" command to the server:

Echo "QUIT" | nc host.example.com 20-30 SSH-1.99-OpenSSH_3.6.1p2 Protocol mismatch. 220 host.example.com IMS SMTP Receiver Version 0.84 Ready

Examples

nc -p 31337 -w 5 host.example.com 42

Opens a TCP connection to port 42 of host.example.com , using port 31337 as the source port, with a timeout of 5 seconds.

Nc -u host.example.com 53 nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42

The same as the above example, but this time enabling proxy authentication with username "ruser " if the proxy requires it.

Related commands

ifconfig — View or modify the configuration of network interfaces.

Здравствуй Уважаемый читатель Х!

Думаю, этот рисунок можно назвать мини-тестом "Хакер ли ты?". Попробуй сказать, что
означает этот забавный котенок. Ну а если затруднения все-таки возникают, знай, что перед тобой самый любимая вещь всех продвинутых людей, так или иначе
связанных с Сетью, и имя ей - Netcat.

Netcat - это утилита, которая позволяет читать и передавать данные через сетевые
соединения. Иными словами, Netcat позволяет тебе соединятся с чем угодно и делать что угодно. Netcat абсолютно самодостаточен, при грамотном использовании он может заменить любое программное средство, включая даже известный тебе
Apache. Итак, в самом простом варианте Netcat позволяет создавать TCP и UDP соединения с любого на любой порт, умеет "слушать" входящие соединения (причем можно приказать "котенку" ждать соединения только с указанных тобой адресов и даже портов!), может сканировать порты, разрешать DNS-запросы, посылать любые команды со стандартного ввода, выполнять заранее предопределенные действия, в ответ на соединение, которое слушает "котенок", делать Hex-дамп отправленных и полученных данных и много-много чего еще...

Хотя, думаю нужно было с самого начала сказать, что Netcat умеет все; и возможности его использования ограниченны лишь уровнем твоих знаний и твоей фантазией. Изначально, Netcat задумывался как Unix утилита, но как ты понимаешь не могло не найтись энтузиастов, которые бы не портировали "котенка" под Windows. Обе версии ты без труда найдешь в поисковиках по запросу "Netcat". Но преимущества, конечно, достаются Unix-оидам, которые при компиляции могут слегка подправить "котенка" и тем самым активировать отключенные по дефолту фишки "дополнительные возможности".

Если ты когда-либо пользовался "программно-реализованными атаками", а попросту говоря эксплоитами, то наверняка замечал, что более, чем в половине из них так или иначе используется Netcat. Это связано прежде всего с тем, что Netcat никогда и никоим образом не модифицирует входящие данные (равно как и исходящие), в отличие скажем от Telnet-клиента, который сначала интерпретирует входящие данные, а уж затем выдает их тебе. Именно поэтому Netcat превратился в мощный инструмент поиска и эксплуатации уязвимостей, благодаря которому Bugtraq пополнился сотнями новых постингов.

Но, если поиск уязвимостей тебе не по душе, можешь попробовать использовать Netcat в качестве web-браузера, или, скажем, почтового клиента; тем паче, что в Internet Explorer-е и Outlook-е нашли "свежие" дыры, старый добрый Уникод, хех... Причем, на этом поприще отличились наши русские парни (!Играет национальная гордость!). Если ты читаешь эту статью, используя Explorer, сходи, посмотри насколько твой "Осел"
дыряв .

Вот после такого и пересядешь на Netcat - не очень удобно, зато
безопасно... Ну и наконец, примеры "продвинутого" использования Netcat
(Unix):

  1. Netcat как ;
  2. Netcat как утилита " "; такие часто описываются в X, а ведь в действительности они просто отправляют запросы на хорошо известные тебе поисковики... Твой "котенок" тоже может делать эту полезную работу!;
  3. Netcat как ! Заставь провайдера отдохнуть!!!

Обрати внимание, все выполнено в виде shell-скриптов так что ты при необходимости сможешь подправить все, что угодно.
За сим хочу проститься. Читай мануалы, и удачи тебе в изучении в изучении культовой утилиты Netcat!

P.S./Личное/: Сайт http://georgy.h1.ru/ мною закрыт. Раз и навсегда. Спасибо всем, кто был моим гостем.

Отображение тестовой HTML-странички клиенту с обычным браузером одной командой (порт 8080):
(echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n Hello World";) | nc -vv -l -p 8080
Передача файла клиенту с обычным браузером одной командой (порт 8080):
(echo -e "HTTP/1.1 200\nContent-Disposition: attachment; filename=целевое-имя-которое-увидит-клиент\nContent-Type: application/octet-stream\nConnection: close\n"; cat имя-файла-на-диске) | nc -vv -l -p 8080

Как пользоваться nc?

(http://handynotes.ru/2010/01/unix-utility-netcat.html )

Начнем с нескольких простых примеров и далее будем их использовать как базовые.
Если Вы помните, я говорил, что netcat это Швейцарский армейский нож. Чем-бы этот нож был, если бы его нельзя было использовать как обычный нож? Вот почему netcat может использоваться вместо обычного telnet:

$ nc www.google.com 80

В действительности он более удобный чем обычный telnet, потому что Вы можете завершить соединение в любое время, нажав Ctrl+C и он обрабатывает двоичные данные как обычные (никаких escape последовательностей, ничего).
Вы можете добавить параметр “-v” для более подробного вывода результатов действий, и параметр (-vv) для получения статистики о том, сколько байт было передано во время текущего сеанса соединения.
Netcat может быть использован в качестве сервера. Если Вы запустите его, как указано ниже, он будет слушать на порту 12345 (на всех интерфейсах):

$ nc -l -p 12345

Теперь если Вы подключитесь к порту 12345 этого хоста, все, что Вы набираете будет передано удаленной стороне, что говорит нам о том, что netcat можно использовать как чат сервер. Запустите на одном из компьютеров:

# На компьютере A с IP 10.10.10.10
$ nc -l -p 12345

И подключитесь к нему с другого:

# На компьютере B
$ nc 10.10.10.10 12345

Теперь обе стороны могут переговариваться!
Такой способ разговора, когда обе стороны могут разговаривать друг с другом делает возможным использование nc для операций ввода/вывода через сеть! К примеру, Вы можете послать целую директорию с одного компьютера на другой организовав tar конвейер через nc на первом компьютере, и перенаправив вывод в другой tar процесс на втором.
Предположим, Вы хотите переслать файлы из директории /data компьютера A с IP 192.168.1.10 на компьютер B (с любым IP). Это просто:


$ tar -cf — /data | nc -l -p 6666


# На компьютере B
$ nc 192.168.1.10 6666 | tar -xf -

Не забудьте скомбинировать конвейер с Рipe Viewer , который был описан в предыдущей статье, что-бы посмотреть статистику того, как быстро происходит передача!
Одиночный файл может быть послан проще:

# На компьютере A с IP 192.168.1.10
$ cat file | nc -l -p 6666


# На компьютере B
$ nc 192.168.1.10 6666 > file

Вы даже можете скопировать и восстановить целый диск, с помощью nc:

# На компьютере A с IP 192.168.1.10
$ cat /dev/hdb | nc -l -p 6666


# На компьютере B
$ nc 192.168.1.10 6666 > /dev/hdb

Заметим: Опция “-l” не может быть использована совместно с “-p” на Mac компьютерах! Решение, — просто заменить “-l -p 6666? на “-l 6666?. Как здесь:

# теперь nc слушает на порту 6666 для Mac компьютеров
$ nc -l 6666

Незаурядное использование netcat — сканирование портов. Netcat не лучший инструмент для такой работы, но он с этим справляется (лучший, конечно-же nmap):

$ nc -v -n -z -w 1 192.168.1.2 1-1000
(UNKNOWN) 445 (microsoft-ds) open
(UNKNOWN) 139 (netbios-ssn) open
(UNKNOWN) 111 (sunrpc) open
(UNKNOWN) 80 (www) open
(UNKNOWN) 25 (smtp) : Connection timed out
(UNKNOWN) 22 (ssh) open

Параметр “-n” предотвращает от просмотра DNS, “-z” не ждет ответа от сервера, и “-w 1? задает таймаут для соединения в 1 секунду.
Другое нетривиальное использование netcat в роли прокси. И порт и хост могут быть перенаправлены. Посмотрите на этот пример:

$ nc -l -p 12345 | nc www.google.com 80

Эта команда запускает nc на порту 1234 и перенаправляет все соединения на google.com:80. Если теперь Вы подключитесь к этому компьютеру на порту 12345 и сделаете запрос, Вы обнаружите, что в ответ не получаете никаких данных. Это правильно, потому-что мы не установили двунаправленный канал. Если Вы добавите второй канал, Вы получите Ваши данные на другом порту:

$ nc -l -p 12345 | nc www.google.com 80 | nc -l -p 12346

После посылки запроса на порт 12345, получите Ваши данные ответа на порту 12346.
Вероятно самая мощная возможность netcat — запустить любой процесс как сервер:

$ nc -l -p 12345 -e /bin/bash

Параметр “-e” пораждает выполнение ввода и вывода перенаправляемого через сетевой сокет. Теперь, если Вы подключитесь к хосту на порту 12345, Вы можете использовать bash:
$ nc localhost 12345
ls -las
total 4288
4 drwxr-xr-x 15 pkrumins users 4096 2009-02-17 07:47 .
4 drwxr-xr-x 4 pkrumins users 4096 2009-01-18 21:22 ..
8 -rw——- 1 pkrumins users 8192 2009-02-16 19:30 .bash_history
4 -rw-r—r— 1 pkrumins users 220 2009-01-18 21:04 .bash_logout

(http://execbit.ru/2011/05/23/netcat/)
1 Передавать файлы (первую команду выполняем на принимающей машине, вторую - на передающей:

$ nc -l 31334 > filename $ nc 172.16.69.143 31334 < filename

$ nc -f /var/log/messages | nc -l 31334 $ nc 172.16.69.143 31334

3 Использовать вместо telnet (первая - telnet-сервер, вторая - клиент):

$ nc -l -p 31334 -e /bin/sh $ nc 172.16.69.143 31334

4 Сканировать на открытые порты:

$ nc -z execbit.ru 1-1024

5 Осуществлять фингерпринт сервисов на основе баннеров:

$ echo "QUIT" | nc execbit.ru 1-1024

6 Организовывать обратный шелл (первая - клиент, вторая - сервер, однако шелл откроется от сервера к клиенту).

Кафедра проектирования дорог

Лабораторная работа №1

по курсу «Информатика»

Выполнил студент группы №114359 Райхман Сергей Юрьевич

Проверил

Лабораторная работа №1

Тема: Сервисная программа Norton Commander

Цель: Научиться осуществлять управление компьютером с помощью Norton Commander

Norton Commander позволяет выполнять следующие функции: 1) выполнять функции MS-DOS, 2) Отображать содержание каталогов на дисках, 3) изображать дерево каталогов на диске, 4) просматривать файлы, 5) редактировать текстовые файлы, 6) копировать, перемещать, переименовывать, удалять файлы, 7) изменять атрибуты файлов.

Запуск Norton Commander

Для запуска Norton Commander необходимо набрать в командной строке “nc” и нажать “Enter” (ввод). Выход из Norton Commander – клавиша F10 или ALT+X

Вид экрана и панелей

После запуска Norton Commander на экране появляются два прямоугольных окна (панели).


Ниже этих панелей располагается приглашение MS-DOS и информационная строка со значениями функциональных клавиш.

F1 HELP – краткая информация о назначении клавиш при работе NC.

F2 MENU – пользовательское меню

F3 VIEW – просмотр текстового файла, документа

F4 EDIT – редактирование текстового файла

F5 COPY – копирование файлов

F6 RENMOV – пересылка, переименование файла

F7 MKDIR – создание каталога (подкаталогов)

F8 DELETE – удаление файлов или подкаталогов

F9 PULL DN – в верхней строке экрана выводятся меню, содержащие режимы работы NC.

F10 QUIT – выход из NC

Меню при нажатии клавиши F9

Left и Right – задаются режимы вывода информации на левой и правой панелях

Files – производятся различные операции с файлами

Commands – выполняются различные команды NC, задается конфигурация NC и режимы работы.

Один из пунктов меню является выделенным, для выбора другого пункта пользуются стрелками <¬>, <­>, <®>, <¯> и нажимается клавиша “Enter”.

Выделение файлов

Для копирования, удаления, перемещения файлов необходимо их выделить нажатием клавиши Ins. Для отмены выделения необходимо повторно нажать “Ins”. Внизу панели появляется информация о количестве выделенных файлов.

Создание каталога

Для создания каталога нажать клавишу “F7”, набрать его имя, нажать “Enter”.

Для входа в каталог необходимо на его имени нажать клавишу “Enter”. При нажатии клавиш “ALT+F10” на экран выводится дерево каталогов. Клавишами перемещения курсора можно быстро переместиться в нужный подкаталог.

Основные клавиши NC

TAB – переход на другую панель

ALT+F1 – вывод в левой панели оглавления другого диска.

ALT+F2 – вывод в правой панели оглавления другого диска

CTRL+F1 – убрать левую панель с экрана

CTRL+F2 – убрать правую панель с экрана

CTRL+O – убрать обе панели

CTRL+U – поменять панели местами

Для запуска компьютера необходимо в строке приглашения набрать “LOGIN”, ввести пароль (335_2).

Задания по лабораторной работе

С помощью команд, создать на диске структуру подкаталогов:


|

Система Linux известна тем, что в большинстве дистрибутивов огромное количество полезных утилит командной строки поставляются сразу вместе с ОС. Опытные системные администраторы могут выполнить большинство задач с помощью встроенных инструментов без необходимости установки дополнительного программного обеспечения.

Данное руководство посвящено работе утилиты . Этот своеобразный «швейцарский армейский нож» сетевых инструментов может быть полезен при мониторинге, тестировании и передаче данных через сетевые соединения.

В данном руководстве используется сервер Ubuntu 12.04, но в целом утилита netcat доступна практически на любом современном дистрибутиве. Ubuntu поставляется с BSD-вариантом утилиты, который и будет использован в этой статье. Другие версии могут работать по-другому или предоставлять другие опции.

Общий синтаксис

По умолчанию netcat работает путем инициации соединения TCP с удаленным хостом.

Базовый синтаксис:

netcat [опции] хост порт

Такая команда инициирует TCP-соединение с указанным хостом через заданный порт. В основном, она функционирует аналогично старой команде Linux — telnet. Имейте в виду, что ваше соединение будет установлено в незашифрованном виде.

Чтобы вместо установления TCP-соединения отправить UDP-пакет, используйте опцию -u:

netcat -u хост порт

Чтобы задать диапазон портов, укажите первый и последний порт диапазона через тире:

netcat хост первый_порт-последний_порт

Обычно данная команда используется с дополнительными флагами.

На большинстве систем можно использовать netcat или nc. Они взаимозаменяемы, поскольку являются псевдонимами для одной команды.

Использование для сканирования портов

Чаще всего netcat используют как сканер портов.

Хотя Netcat, вероятно, не самый умный инструмент для выполнения этой задачи (в большинстве случаев для этого больше подойдет nmap), он может выполнять простое сканирование портов, чтобы быстро определить открытые порты.

Для этого укажите диапазон портов для сканирования (как показано выше), а также используйте опцию -z, которая выполняет сканирование вместо установления соединений.

К примеру, чтобы просканировать все порты до порта 1000, выполните:

netcat -z -v domain.com 1-1000

Как видите, кроме опции -z в данной команде использована опция -v, благодаря которой netcat выводит более подробную информацию.

Результат имеет такой вид:

nc: connect to domain.com port 1 (tcp) failed: Connection refused
nc: connect to domain.com port 2 (tcp) failed: Connection refused
nc: connect to domain.com port 3 (tcp) failed: Connection refused
nc: connect to domain.com port 4 (tcp) failed: Connection refused
nc: connect to domain.com port 5 (tcp) failed: Connection refused
nc: connect to domain.com port 6 (tcp) failed: Connection refused
nc: connect to domain.com port 7 (tcp) failed: Connection refused
. . .
Connection to domain.com 22 port succeeded!
. . .

Как видите, эта команда выводит достаточно подробный результат, а также сообщает, было ли сканирование каждого отдельного порта успешным или нет.

Это удобно при использовании доменного имени.

Тем не менее, указывая нужные IP-адреса, можно значительно ускорить сканирование. Затем можно использовать флаг -n, чтобы указать, что не нужно разрешать IP-адрес с помощью DNS:

netcat -z -n -v 111.111.111.111 1-1000

Возвращаемые сообщения отправляются в стандартный поток ошибок. Сообщения о стандартных ошибках можно отправлять в стандартный вывод, чтобы фильтровать результаты.

Для перенаправления стандартной ошибки в стандартный вывод используется bash-синтаксис 2>&1; полученные результаты фильтруются с помощью grep:

netcat -z -n -v 111.111.111.111 1-1000 2>&1 | grep succeeded
Connection to 111.111.111.111 22 port succeeded!

Итак, теперь можно видеть, что единственный открытый порт на удаленной машине в диапазоне 1-1000 — это порт 22, стандартный порт SSH.

Общение с помощью netcat

Команда netcat не ограничивается отправкой пакетов TCP и UDP. Она также может прослушивать порт на соединения и пакеты, что дает возможность подключить два экземпляра netcat в отношении «клиент-сервер».

Который компьютер является сервером, а который — клиентом, существенно только во время начальной настройки. После того, как соединение установлено, связь одинакова в обоих направлениях.

На одной машине нужно сказать netcat прослушивать определенный порт на подключения. Это делается с помощью параметра -l, после которого указывается номер порта:

Выполнив эту команду, netcat прослушивает соединения TCP на порту 4444. Теперь обычный пользователь (не root) не сможет открывать какие-либо порты до 1000 (для безопасности сервера).

На втором сервере нужно подключиться к первой машине через указанный порт. Это делается так же, как было показано ранее:

netcat domain.com 4444

После установления соединения может показаться, что ничего не произошло. Но теперь можно отправлять сообщения по обе стороны соединения и они будут видны на обоих серверах.

Введите сообщение и нажмите ENTER. Сообщение появится как на локальном, так и на удаленном сервере. Это работает и в обратном направлении.

Завершив передачу сообщений, нажмите CTRL-D, чтобы прервать TCP-соединение.

Обмен файлами с помощью netcat

Ознакомившись с основными функциями утилиты и выполнив предыдущие примеры, можно перейти к более сложным задачам.

Как уже говорилось, утилита netcat создает TCP-соединения, с помощью которых можно передавать практически любой вид информации, не ограничиваясь набранными пользователем сообщениями. Эти знания можно использовать, чтобы превратить netcat в программу передачи файлов.

Опять же, нужно выбрать одну машину для прослушивания соединений. Однако, вместо того, чтобы печатать информацию на экран (как в предыдущем примере), netcat разместит всю информацию прямо в файл:

netcat -l 4444 > received_file

На втором компьютере нужно создать простой текстовый файл:

echo "Hello, this is a file" > original_file

Теперь можно использовать этот файл в качестве входных данных для создания соединения со слушающим компьютером. Файл будет передаваться так же, как если бы он был набран в интерактивном режиме:

netcat domain.com 4444 < original_file

Как можно видеть, на компьютере, который ожидал соединения, теперь есть новый файл с именем «received_file», содержащий введенные на другом компьютере данные:

cat received_file
Hello, this is a file

Как видите, подобные соединения можно легко использовать для передачи любого рода информации.

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

На принимающей стороне можно использовать следующую команду, чтобы предупредить о том, что нужно получить и распаковать файл:

netcat -l 4444 | tar xzvf -

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

На стороне, содержащей каталог, который нужно передать, упакуйте данный каталог в архив, а затем отправьте его на удаленный компьютер с помощью netcat:

tar -czf - * | netcat domain.com 4444

На этот раз тире в команде tar значит, что содержимое текущего каталога (как указано символом *) нужно заархивировать и передать, а затем записать результат в стандартный вывод.

Затем это записывается в подключение ТСР, передается другой стороне соединения и распаковывается в текущий каталог удаленного компьютера.

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

как простой веб-сервер

Утилита netcat уже была использована для передачи сообщений и файлов. Этот же подход поможет использовать netcat как простой веб-сервер. Это может пригодиться для тестирования готовых страниц.

Для начала нужно создать HTML-файл на одном сервере:

В данном файле можно разместить следующий простой код:



Test Page


Level 1 header


Subheading


Normal text here




Сохраните и закройте файл.

Данный файл нельзя обслуживать на порту веб-сервера по умолчанию (80) без привилегий root. Потому как обычный пользователь установите порт 8888.

Чтобы протестировать одну страницу и проверить, как она отображается, наберите что-то вроде:

netcat -l 8888 < index.html

Теперь контент можно просмотреть в браузере, посетив:

http://IP_сервера:8888

Эта команда выведет страницу, после чего соединение netcat закроется. При попытке обновить страницу она исчезнет.

Netcat может обслуживать страницу на продолжении неопределенного срока; для этого нужно сделать последнюю команду цикличной при помощи строки:

while true; do nc -l 8888 < index.html; done

Тогда страница будет продолжать получать соединения после того, как первое соединение было прекращено.

Чтобы остановить цикл, наберите CTRL-C.

Этот сервер позволит увидеть, как страница отображается в браузере, но не предоставляет более широкой функциональности. Никогда не используйте такой веб-сервер для обслуживания реальных сайтов: он небезопасен, кроме того, такие простые вещи, как ссылки, не всегда работают правильно.

Итоги

Данное руководство знакомит с основными функциями и использованием netcat. Так как этот инструмент универсален, он может быть использован для диагностики проблем и тестирования базовой функциональности TCP/UDP-соединений.

Кроме того, netcat позволяет общаться и обмениваться информацией между различными компьютерами, что очень важно для быстрого взаимодействия пользователей. Упрощая создание соединения, утилита netcat пытается сделать сетевые взаимодействия компьютеров более удобными, быстрыми и понятными.

Tags: ,