たとえば、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
すぐに実行するとリスニング中なので、どちらもタイムアウトします。