/dev/tcp послушайте вместо nc, слушают

Как geekosaur сказал, Вы используете неправильные кавычки. Палка с doublequotes, когда Вы хотите, чтобы оболочка развернула ссылку на переменную до значения.

Во-вторых, Вы делаете математику в двойных круглых скобках неправильно. Вы не хотите $ внутри там, ссылки на переменную в $ (()), конструкция не нуждается в $.

#!/bin/bash
echo "enter number"
read number
newnumber=${number#${number%%[!0]*}}
newnumber=$((newnumber + 1))
echo "$number changes to $newnumber"

Те два изменения работают на меня в Вашем оригинале также...

read var
newvar=${var#${var%%[!0]*}}
newvar=$((newvar + 1))
printf -v newvar "%02d" "$newvar"
grep "$newvar" /some/dir

ОБНОВЛЕНИЕ, добавленное printf строка для форматирования вывода. ОБНОВИТЕ 2 добавленных в фиксации для того, чтобы ввести дополненные номера нуля. Это должно быть полным примером теперь.

39
17.09.2016, 18:08
5 ответов

Если Perl установлен (как это будет на машине RHEL):

perl -MIO::Socket::INET -ne 'BEGIN{$l=IO::Socket::INET->new(
  LocalPort=>1234,Proto=>"tcp",Listen=>5,ReuseAddr=>1);
  $l=$l->accept}print $l $_' < ~/.bashrc

работал бы, если локальный брандмауэр не позволяет входящие соединения с 1234.

Если socat установлен:

socat -u - tcp-listen:1234,reuseaddr < ~/.bashrc

Если zsh установлен:

zmodload zsh/net/tcp
ztcp -ld3 1234 && # start listening socket on fd 3
  ztcp -ad4 3 && # accept connection on fd 4
  ztcp -c 3 && # close the listening socket that is no longer needed
  cat < ~/.bashrc >&4 && # send the data
  ztcp -c 4 # close the communication socket to tell the other end we're finished
24
27.01.2020, 19:35
  • 1
    Не был Должен последнее ztcp -c 4 управляйте читает 3? В других отношениях большая информация, большая подсказка. –  dezza 17.07.2016, 14:28
  • 2
    @dezza, посмотрите редактирование. Сокет на fd 3 не закрывался действительно (хотя это будет, когда сценарий завершится). Мы должны закрыть сокет на fd 4, таким образом, другой конец получает EOF. –  Stéphane Chazelas 17.07.2016, 14:36

К сожалению, невозможно сделать только с ударом. /dev/tcp/<ip>/<port> виртуальные файлы реализованы в пути, которые колотят попытки соединиться с указанным <ip>:<port> использование connect(2) функция. Для создания сокета слушания он должен был бы звонить bind(2) функция.

Можно проверить это путем загрузки bash источники и рассмотрение его. Это реализовано в lib/sh/netopen.c файл в _netopen4 функция (или _netopen6, который также поддерживает IPv6). Эта функция используется функцией обертки netopen из того же файла, который по очереди непосредственно используется в файле redir.c (redir_special_open функция) для реализации этого виртуального перенаправления.

Необходимо найти некоторое другое применение, которое может создать сокет слушания на машине.

43
27.01.2020, 19:35
  • 1
    +1 удар позволяет создавать клиентский сокет, но сокет сервера Вы можете использовать nc или можете быть реализованы с жемчугом или c, на самом деле серверный процесс, циклично выполнит соединения принятия и порождение процессов или создание потоков, или это может принять только одно соединение одним –  Nahuel Fouilleul 04.10.2012, 22:36
  • 2
    @NahuelFouilleul: Это не совсем корректно. Можно обработать много клиентов со всего одним потоком/процессом с помощью так называемого "asynchronious", или "управляемое событиями" сетевое программирование (попытайтесь гуглить для выбора () функцию и как это может использоваться в сетевом программировании). Во многих случаях это - намного лучше (более быстрый) способ принять много клиентов. –  Krzysztof Adamski 04.10.2012, 22:50
  • 3
    Спасибо, которое я не сделал, хотя из этого решения –  Nahuel Fouilleul 04.10.2012, 23:12
  • 4
    Это - то, для чего xinetd. Это делает слушание и порождает Ваш произвольный процесс/сценарий для любых входящих соединений. С ним что-либо может стать сервером TCP/IP. –  Evi1M4chine 24.01.2016, 01:33

вы можете сделать это, как вы сказали, запросив /dev/tcp с помощью bash:

</dev/tcp/host/port

если он запускается немедленно, он прослушивается, в любом случае время ожидания истекает

-3
20.08.2021, 13:21

Невозможно слушать, потому что прослушивание не в bash, как указал Адамски.

Но вам не нужно слушать на клиенте, поэтому вам не нужен netcat на клиенте для передачи файлов, например:

## To send a file to the locked down computer: 
 ## Local server where you do have netcat 
cat ~/.bashrc | nc -l -q 1 -p 8998

 ## Remote locked down computer without netcat
cat < /dev/tcp/local.server.ip.addr/8998 > latest.bashrc 

## To grab a file from the locked down computer: 
 ## First - on the local server run 
nc -l -p 8998 -q 1 > remote.bashrc < /dev/null 

 ## Then on the locked down computer run: 
cat ~/.bashrc > /dev/tcp/local.server.ip.addr/8998 0<&1 2>&1
2
20.08.2021, 13:21

Вы можете использовать ucspi -tcp Д. Дж. Бернштейна, см.http://cr.yp.to/ucspi-tcp.html

0
20.08.2021, 13:21

Теги

Похожие вопросы