Как использовать сетевой инструмент Netcat

{title}

В этом уроке мы поговорим об очень мощном сетевом инструменте Netcat, обычно обозначаемом как nc. Этот инструмент используется через командную строку, и его синтаксис очень прост. Это позволит нам записывать и получать данные через сокеты (TCP или UDP). У этого есть много особенностей, и поэтому мы можем использовать это многими способами. Важно знать, как это работает, так как это позволит нам обсуждать, тестировать и исследовать в Интернете.

Netcat может работать двумя способами:

клиент

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

Сервер или слушатель

Дождитесь клиентских подключений на определенном порту.

Мы изучим работу Netcat или nc на практических примерах, что является лучшим способом обучения. Для этого я буду использовать операционную систему Ubuntu 16.04.

Первое, что мы увидим, это синтаксис netcat:

 nc [опции] [цели] [порт] 
Netcat имеет много вариантов, давайте посмотрим некоторые:

Некоторые варианты неткара

  • -l : сообщает netcat, что он должен продолжать слушать.
  • -p : указать исходный порт.
  • -s : для указания адреса источника.
  • -k : разрешить "бесконечные" соединения слушателю (используется с -l).
  • -u : Netcat открывает порт как UDP вместо TCP (который по умолчанию).
  • -v : с этой опцией вы будете показывать нам информацию о соединении.
  • -i : для указания задержки отправки и получения. (В секундах)
  • -4 : Netcat должен использовать только IPv4.
  • -6 : Как и предыдущий, но принудительно использовать IPv6.

Есть еще варианты, которые мы можем увидеть, выполнив следующую команду:

 нч-ч 
Ниже вы можете увидеть на изображении:

{title}

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

Пример 1
Поставь мою машину для прослушивания на порт 87:

 sudo nc -l -p 87 

примечание

Официальный все равно удалит -p .

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

 nc localhost 87 
Если мы напишем что-то из только что открытого клиента, мы также увидим это в терминале, который прослушивает, и поэтому мы проверяем, что соединение работает правильно. Но если мы напишем в слушателе, первый терминал, он также достигает клиента. Затем я оставляю изображение слушателя и другого клиента:

{title}

{title}

Мы видим, что они общаются так, как мы хотели в этом примере, давайте перейдем к другому.

Пример 2
Мы можем заставить сервер или прослушиватель сохранять данные, отправленные клиентом, в файл, поэтому команда для выполнения не сильно отличается от той, что была показана в первом примере:

 sudo nc –l 87> test 

примечание

test - это имя файла, в который вы будете сохранять поступающую информацию.

На стороне клиента команда будет такой же, как и раньше:

 nc localhost 87 
На следующем рисунке показано, что было выполнено на клиенте (слушатель прослушивает перед подключением, иначе это не будет иметь никакого эффекта):

{title}

И на стороне сервера мы можем видеть, что, по-видимому, ничего не получено, но единственная определенная вещь - то, что это не показано на экране и сохранено в тестовом файле:

{title}

Давайте продолжим с другим примером.

Пример 3
Мы проверим, есть ли диапазон портов, чтобы узнать, открыты они или нет, в этом примере диапазон будет 80-90. Сначала мы открываем сервер на порту 80, как мы это делали в первом примере (поэтому мы увидим, как он работает, когда он открыт, а когда нет):

 sudo nc -l 87 
А в клиенте мы выполним:
 nc -z -v localhost 80-90 
Параметр -z используется для сканирования, а параметр -v, как мы видели ранее, для отображения информации (если мы не укажем, это не покажет, какой порт открыт, а какой нет), тогда образ клиента:

{title}

Давайте перейдем к рассмотрению примера в UDP .

Пример 4
Этот пример также прост, мы собираемся прослушивать UDP на порте 2016, и мы собираемся заставить его быть IPv4-адресом:

 sudo nc -l -u -4 2016 
И теперь у нас есть клиент для подключения:
 нк-у -4 2016 
Я не предоставляю изображение, так как захват будет таким же, как в примере 1, изменение части команды понятно. Давайте перейдем к примеру, где мы используем код на Python.

Пример 5
Мы поместим в Python максимально простой код для прослушивания соединения, получения данных и завершения.

 сокет импорта s = socket.socket () s.bind (("192.168.56.1", 1987)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) .decode (" utf-8 ") печать (данные) 
Я выполню этот код в Windows, а затем из Linux свяжусь с ним через netcat, на следующем рисунке показана сторона клиента в Linux:

{title}

И что будет видно в Windows:

{title}

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

Пример 6
В этом примере я выполню код Python на той же машине с Linux и подключусь к netcat, мы проверим, что Shell возвращает нас (/ bin / bash). Затем я оставляю код Python как можно более простым и коротким, просто для примера.

 сокет импорта, подпроцесс s = socket.socket (socket.AF_INET) s.setsockopt (socket.IPPROTO_IP, socket.SO_REUSEADDR, 1) s.bind (("", 1987)) s.listen (1) conn, addr = s .accept () p = subprocess.Popen (["/ bin / bash"], stdin = conn, stdout = conn, stder = conn) 
Код Python выполняется, и видно следующее (на рисунке показано, как это выглядит при подключении из netcat):

{title}

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

{title}

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

  • 0