nc listen yerine / dev / tcp listen


39

Bir netcat dinleyicisiyle:

nc -l <port> < ~/.bashrc

.Bashrc'imi yeni bir makinede alabilirim (sahip olmayan ncveya LDAP olmadan ):

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

Sorum şu: nc -l <port>İlk satırımdaki yetenekleri / dev / tcp yerine taklit etmenin bir yolu var mı nc?

Üzerinde çalıştığım makineler son derece sertleştirilmiş laboratuar / sandbox ortamı RHEL (ssh, nc yok, LDAP yok, yum yok, yeni yazılım yükleyemiyorum ve internete bağlı değiller)


Soketi açık tutmak için bir python betiği yazmaktan kaçınmak, bunu başarmanın kolay bir yolu var mı?
h3rrmiller

Yanıtlar:


23

Perl takılıysa (bir RHEL makinesinde olduğu gibi):

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

Yerel bir güvenlik duvarı 1234 ile gelen bağlantılara izin vermediği sürece işe yarar.

Socat kurulu ise:

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

Eğer zsh kurulu ise:

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

Son ztcp -c 4komut 3 okumamalı mı ? Aksi takdirde harika bilgi, harika ipucu.
dezza

@dezza, düzenlemeye bakın. Fd 3'teki soket gerçekten kapatılmadı (komut dosyası sonlandığında da olsa). Fd 4'teki soketi kapatmalıyız ki diğer uç EOF olsun.
Stéphane Chazelas

42

Ne yazık ki, sadece bash ile yapmak imkansız. /dev/tcp/<ip>/<port>Sanal dosyalar bash çalışır belirtilen bağlanmak için bu şekilde uygulanmaktadır <ip>:<port>kullanarak connect(2)fonksiyonu. Dinleme soketi oluşturmak için bind(2)işlev çağrısı yapması gerekir .

Bunu, bashkaynakları indirerek ve inceleyerek kontrol edebilirsiniz . Bu uygulanan lib/sh/netopen.cdosya _netopen4(ayrıca IPv6 destekleyen veya _netopen6,) işlevi. Bu işlev netopenaynı dosyadaki sarmalayıcı işlevi tarafından kullanılır ; bu da sırayla bu sanal yönlendirmeyi uygulamak için doğrudan dosyada redir.c( redir_special_openişlev) kullanılır .

Makinenizde dinleme soketi oluşturabilecek başka bir uygulama bulmalısınız.


+ 1 bash istemci soketi oluşturmaya izin verir, ancak nc'yi kullanabileceğiniz veya perl veya c ile uygulanabilen sunucu soketi, aslında sunucu işlemi bağlantıları kabul etme ve yumurtlama işlemlerini ya da iş parçacığı oluşturma döngüsünü ya da tek bir bağlantıyı kabul edebilir
Nahuel Fouilleul,

2
@NahuelFouilleul: Bu tamamen doğru değil. "Asenkron" veya "olaya dayalı" ağ programlaması kullanarak bir seçim / işlemi yalnızca bir iş parçacığı / işlemi ile işleyebilirsiniz (select () işlevini googling'i deneyin ve ağ programlamasında nasıl kullanılabileceğini). Çoğu durumda, çok fazla müşteriyi kabul etmenin çok daha iyi (daha hızlı) yolu.
Krzysztof Adamski

Teşekkürler Ben bu çözümü
düşünmedim

4
Xinetd bunun için var. Dinlemeyi yapar ve herhangi bir gelen bağlantı için rastgele işlem / komut dosyanızı başlatır. Bununla, her şey bir TCP / IP sunucusu olabilir.
Evi1M4chine

0

Dinlemenin bir yolu yok çünkü dinleme Adamski'nin dediği gibi sert bir şekilde yok.

Ancak istemciyi dinlemeniz gerekmez, böylece dosyaları aktarmak için istemcide netcat gerekmez.

## 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

-3

dediğiniz gibi, / dev / tcp'ye bash ile sorarak yapabilirsiniz:

</dev/tcp/host/port

hemen çalışırsa, dinler, ya da zaman aşımına uğrar


4
Hayır. Bunu kesinlikle test etmediniz ve yaptıysanız sonuçları anlamamalısınız. Öneriniz soketi açacak (dinlemeyecek) ve çalıştırdığınız komutlara yönlendirecektir. Doğru bir cevap zaten bulundu (neredeyse 6 yıl önce ...) bu yüzden neden bu soruyu cevaplamayı seçtiğinizi bilmiyorum.
h3rrmiller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.