Posix способ открыть дескриптор сокета в оболочке - PullRequest
0 голосов
/ 25 февраля 2019

В bash мы можем использовать файловые дескрипторы , чтобы (попытаться) открыть дескрипторы сокетов следующим образом:

exec 3<>/dev/prot/host/port

где:

  • prot может быть tcp или udp;
  • host может быть действительным именем хоста или Интернет-адресом;
  • port можетбыть целым номером порта или именем службы.

Это всего лишь пример, и можно использовать любое перенаправление
(EG printf "%s" "${payload}" >"/dev/udp/${host}/${port}").
Это верно, по крайней мере, начиная с bash v4+.

Кто-то уже просил выполнить то же самое без встроенного bash;
Я уже нашел и попробовал другие решения, включая (но не ограничиваясь):

  • nc / netcat / nmap / tcping (или аналогичные), чтобы "сканировать" (локальные или удаленные) порты (некоторые из них не смогутдля получения полезных нагрузок);
  • netstat / ss (или аналогичных), для того чтобы узнать LISTEN-состояние (локальные) порты (и не может отправлять или получать какую-либо полезную нагрузку);

Среди прочих nc CouЯ считаю самым переносимым решением для этой задачи, хотя (по крайней мере, в моем понимании) оно не должно быть в coreutils ;в то время как решения с именем ss нельзя считать действительными для этой задачи, поскольку они не могут "сканировать" другой хост и не могут отправлять и получать полезные данные;
В любом случае мне пришло в голову найти среду, в которой nc не был установлен.

Я не могу предположить, что установлены другие интерпретаторы (EG python, perl и т. Д.);
Я не могу предположить, что установлены компиляторы.

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

Другими словами, существует переносимый способиспользовать соединения?

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