В 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-способ, использующий что-либо, кроме оболочки, для выполнения полного соединения?
Другими словами, существует переносимый способиспользовать соединения?