NCリスニングの代わりに/dev/tcpリスニング

NCリスニングの代わりに/dev/tcpリスニング

たとえば、netcat リスナーを使用します。

nc -l <port> < ~/.bashrc

以下を使用して、新しいシステム(LDAPなし)から私のnc.bashrcをインポートできます。

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

nc -l <port>私の質問は:最初の行の機能を模倣せずに/ dev / tcpを使用する方法はありますかnc

私が使用しているマシンは、非常に強化されたラップ/サンドボックス環境RHELです(Sshなし、NCなし、LDAPなし、yumなし、新しいソフトウェアをインストールできず、インターネットに接続されていません)。

答え1

残念ながら、これはbashだけでは不可能です。/dev/tcp/<ip>/<port>仮想ファイルの実装方法は、 bash が指定された<ip>:<port>使用connect(2)関数に接続しようとすることです。リスニングソケットを生成するには、bind(2)関数を呼び出す必要があります。

ソースコードをダウンロードして調べてみると確認bashできます。これはlib/sh/netopen.c、ファイルの関数_netopen4(またはIPv6もサポートする_netopen6)で実装されています。この関数は、同じファイルのラッパー関数によって使用され、仮想リダイレクトを実装するためにnetopenファイルredir.c(関数)で直接使用されます。redir_special_open

コンピュータでリスニングソケットを作成できる他のアプリケーションを探す必要があります。

答え2

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

答え3

Adamskiが指摘したように、リスニングは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

答え4

あなたが言ったように、bashで/ dev / tcpを要求することができます:

</dev/tcp/host/port

すぐに実行するとリスニング中なので、どちらもタイムアウトします。

関連情報