/ dev / tcp escuta em vez de nc listen

33

Com um ouvinte de netcat como:

nc -l <port> < ~/.bashrc

Eu posso pegar meu .bashrc em uma nova máquina (não tem nc ou LDAP) com:

cat < /dev/tcp/<ip>/<port> > ~/.bashrc

A minha pergunta é: Existe uma maneira de imitar as capacidades de nc -l <port> na minha primeira linha com / dev / tcp em vez de nc ?

As máquinas em que estou trabalhando são ambiente de laboratório / sandbox extremamente avançado RHEL (sem ssh, nc, sem LDAP, sem yum, não consigo instalar novos softwares e eles não estão conectados à Internet)

    
por h3rrmiller 04.10.2012 / 20:26

3 respostas

20

Se o Perl estiver instalado (como será em uma máquina 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

funcionaria, a menos que um firewall local não permita conexões de entrada para 1234.

Se o socat estiver instalado:

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

Se o zsh estiver instalado:

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
    
por 04.10.2012 / 21:50
30

Infelizmente, é impossível fazer apenas com bash. /dev/tcp/<ip>/<port> virtual files são implementados da maneira que o bash tenta se conectar à função <ip>:<port> using connect(2) . Para criar um soquete de escuta, ele teria que chamar a função bind(2) .

Você pode verificar isso baixando bash sources e olhando para ele. Ele é implementado no arquivo lib/sh/netopen.c em _netopen4 function (ou _netopen6, que também suporta IPv6). Essa função é usada pela função de invólucro netopen do mesmo arquivo, que, por sua vez, é usada diretamente no arquivo redir.c ( redir_special_open function) para implementar esse redirecionamento virtual.

Você precisa encontrar algum outro aplicativo que possa criar um soquete de escuta em sua máquina.

    
por 04.10.2012 / 21:24
-2

você pode fazer isso como você disse, perguntando / dev / tcp, com bash:

</dev/tcp/host/port

se for executado imediatamente, está escutando, de qualquer forma, o tempo limite

    
por 07.05.2018 / 11:54