Форум по операционной системе GNU/Linux и свободному программному обеспечению
Текущее время: 18 ноя 2018, 08:41

Часовой пояс: UTC + 3 часа


Правила форума


Запрещается помещать сообщения, не имеющие отношения к обсуждаемой статье. Все такие сообщения будут удаляться непосредствено после обнаружения.



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Непрочитанное сообщениеДобавлено: 30 окт 2016, 16:36 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11297
Откуда: Харьков
Как открыть TCP-/UDP-сокет средствами командной оболочки bash
Цитата:
Оригинал: How to open a TCP/UDP socket in a bash shell
Автор: Dan Nanni
Дата публикации: 24 мая 2016 г.
Перевод: А.Панин
Дата перевода: 23 июля 2016 г.


Смешная такая статья...
Но может иногда оказаться полезным такой приём.
Цитата:
По сути, вы можете открыть TCP-/UDP-сокет средствами командной оболочки bash, воспользовавшись следующей синтаксической конструкцией:

$ exec {дескриптор-файла}<>/dev/{протокол}/{адрес-узла}/{номер-порта}

Вместо строки "дескриптор-файла" следует использовать уникальные неотрицательные целочисленные идентификаторы (дескрипторы), которые будут ассоциированы с каждым из создаваемых сокетов. Файловые дескрипторы 0, 1 и 2 зарезервированы за стандартными потоками ввода (stdin), вывода (stdout) и ошибок (stderr) соответственно. Исходя из этого, вы должны использовать значения, начиная с 3 (которые не используются) в качестве файловых дескрипторов.

Сочетание символов "<>" указывает на то, что сокет должен быть открыт для чтения и записи. В зависимости от ваших потребностей, вы можете открыть сокет только для чтения ("<") или только для записи (">").

В поле "протокол" может располагаться строка "tcp", либо "udp". Назначение полей "адрес-узла" и "номер-порта" не требует особых комментариев.

Например, для открытия двунаправленного TCP-сокета, соединенного с основным портом HTTP-сервера ресурса xmodulo.com, с файловым дескриптором 3 достаточно выполнить следующую команду:

$ exec 3<>/dev/tcp/xmodulo.com/80

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

$ exec {дескриптор-файла}<&-
$ exec {дескриптор-файла}>&-

И примеры применения для конкретных случаев ... см. там в тексте.
Цитата:
1. Получение веб-страницы с удаленного сервера и вывод ее исходного кода

#!/bin/bash
exec 3<>/dev/tcp/xmodulo.com/80
echo -e "GET / HTTP/1.1\r\nhost: xmodulo.com\r\nConnection: close\r\n\r\n" >&3
cat <&3

2. Вывод информации о версии установленного на удаленном узле SSH-сервера

#!/bin/bash
exec 3</dev/tcp/192.168.0.10/22
timeout 1 cat <&3

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

#!/bin/bash
timeout 1 cat </dev/tcp/192.168.0.10/22

и т.д.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.134s | 17 Queries | GZIP : On ]