В этом уроке мы поговорим об очень мощном сетевом инструменте 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.
Есть еще варианты, которые мы можем увидеть, выполнив следующую команду:
нч-чНиже вы можете увидеть на изображении:
Давайте начнем с примеров, сначала они будут простыми, сложными, но немного, вы увидите, что ими очень легко пользоваться.
Пример 1
Поставь мою машину для прослушивания на порт 87:
sudo nc -l -p 87
примечание
Официальный все равно удалит -p .
Теперь мы собираемся установить соединение с другого терминала, так как я запускаю его на той же машине, я использую localhost в качестве адреса:
nc localhost 87Если мы напишем что-то из только что открытого клиента, мы также увидим это в терминале, который прослушивает, и поэтому мы проверяем, что соединение работает правильно. Но если мы напишем в слушателе, первый терминал, он также достигает клиента. Затем я оставляю изображение слушателя и другого клиента:
Мы видим, что они общаются так, как мы хотели в этом примере, давайте перейдем к другому.
Пример 2
Мы можем заставить сервер или прослушиватель сохранять данные, отправленные клиентом, в файл, поэтому команда для выполнения не сильно отличается от той, что была показана в первом примере:
sudo nc –l 87> test
примечание
test - это имя файла, в который вы будете сохранять поступающую информацию.
На стороне клиента команда будет такой же, как и раньше:
nc localhost 87На следующем рисунке показано, что было выполнено на клиенте (слушатель прослушивает перед подключением, иначе это не будет иметь никакого эффекта):
И на стороне сервера мы можем видеть, что, по-видимому, ничего не получено, но единственная определенная вещь - то, что это не показано на экране и сохранено в тестовом файле:
Давайте продолжим с другим примером.
Пример 3
Мы проверим, есть ли диапазон портов, чтобы узнать, открыты они или нет, в этом примере диапазон будет 80-90. Сначала мы открываем сервер на порту 80, как мы это делали в первом примере (поэтому мы увидим, как он работает, когда он открыт, а когда нет):
sudo nc -l 87А в клиенте мы выполним:
nc -z -v localhost 80-90Параметр -z используется для сканирования, а параметр -v, как мы видели ранее, для отображения информации (если мы не укажем, это не покажет, какой порт открыт, а какой нет), тогда образ клиента:
Давайте перейдем к рассмотрению примера в 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:
И что будет видно в Windows:
Если мы что-то модифицируем код, мы можем заставить его выполнить команду и отправить нам ее содержимое, но мы также можем вернуть оболочку, которая позволит нам делать много вещей, поэтому давайте перейдем к следующему примеру.
Пример 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):
Мы видим, что он прослушивается при его выполнении, но когда клиент подключен, соединение закрывается, и у нас есть Shell для нас.
Мы также могли бы создать код, который будет подключаться к нашей машине, который мы будем слушать на определенном порте, в общем, есть много возможностей, теперь вам нужно исследовать и «играть» с netcat, что, как вы видите, может помочь нам во многих моментах.,
- 0
СТАТЬИ