Komutları hayatta kalacak bir netkata nasıl yönlendirebilirim?


32
echo command | netcat host port

Bu komutun uzaktaki ana bilgisayara gönderilmesine ve bazı verilerin okunmasına neden olur. Ancak birkaç saniye sonra bağlantı kapanır. -W parametresi hiçbir şeyi değiştirmedi. SuSE 10.1'de netcat v1.10 kullanıyorum.


Bağlantıyı kapatan uzak ana bilgisayar olmadığından emin misiniz?
Grawity

Evet. Netcat yapmak ve ardından komutu el ile yazmak netcat'ın süresiz olarak hayatta kalmasına neden olur.
Chris

Neden hayatta kalsın? sadece yankı parametrelerini yazdır ve sonra öl?
M'vy

1
Uzak sunucudan gelen verileri almaya devam etmesi için hayatta kalmasını istiyorum.
Chris

2
Bu doğru değil. "netcat <host> <port>" çift yönlü bir TCP soketi açar.
Chris

Yanıtlar:


33

Bu nc, OS X'deki komutla çalışır (göndermek istediğiniz komutun bir dosyada olduğu varsayılarak):

cat file - | nc host port

(Temel olarak, catdosyanın içeriğini stdout'a döker ve sonra sizi stdin'de bekler).

Ek olarak, komutu kabuğun kendisinden göndermek istiyorsanız, şunu yapabilirsiniz:

cat <(echo command) - | nc host port

Netcat'ın tüm fantezi seçeneklerinden yoksun olduğu, çok çıplak bir kemik gömülü sistemde çalışması güzel.
SF.

{ echo command; cat;}aynısını yapardı ve anlaşılması daha kolay olabilirdi.
G-Man 'Monica'yı Yeniden Girin' diyor

1
Gördüğüm kadarıyla netcatkomut girişi sonunu görene kadar soketi açık tutacaktır. Tüm bu örnekler, bunun nedenini çok fazla söylemeden bunu göstermektedir . Ben etkileşim ediyorum sunucuya kullanarak sadece kullanılarak uzun süre: . SocketTest , herhangi bir TCP veya UDP bağlantı noktasını dinleyebilen veya sunabilen kullanışlı bir araçtır. SocketTest netcatcat - | nc localhost 8063
will

14

İle ncUbuntu tarih:

nc -q -1 host port

Gönderen Ubuntu ncadam sayfası :

 -q seconds
         after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.

Kullanılabilir ncseçeneklerin dağıtımlar arasında çok fazla değiştiğine dikkat edin , bu nedenle bu sizin için çalışmayabilir (OpenSUSE).


12

Buldum:

echo command | netcat host port -

İş arkadaşım bunu biliyordu. Bunu belgelerde hiç göremiyorum.


2

Bunu netcat veya socat ile yöneteceğini sanmıyorum. Her ikisiyle de kapsamlı bir ilişki kurdum ve socat en umut verici olana baktı.

Uzak TCP portuna bağlanmak için socat kurmayı ve yerel bir unix alan soketini dinlemeyi başardım (teoride bağlantı her zaman korunabildi), ancak yerel süreç unix soketinden ayrılır ayrılmaz (başka bir socat unix soketini stdin / out ile ilişkilendirerek) TCP socat oturumunu kapattı.

Buradaki sorun netcat / socat üzerinden yapılan her bağlantının sunucuya yeni bir TCP akışı bağlantısı yapması ve yerel uç kesildiğinde bu TCP akışı oturumunu kapatmasıdır.

Muhtemelen uzak ucuna TCP bağlantısını açan ve daha sonra yerel olarak bir soket / boru / fifo üzerinde ya da her neyse yerel olarak dinleyen ve mevcut TCP borusuna veri gönderen bir özel proxy yazılımı yazmanız gerekeceğini düşünüyorum. ve sonuçları döndürür.


Çok güçlü Matt Jenkins'i dinle: D
M'vy

2

Soketin diğer ucundaki bağlantı kapalı olabilir mi?

Varsayılan olarak, nctamamlandıktan sonra bağlantıyı kapatır, açık bir şekilde dinlemeye devam etmesini söylemiyorsanız ( -kseçenekle birlikte):

 -k    Forces nc to stay listening for another connection after its current
       connection is completed.  It is an error to use this option without the
       -l option.

Bakın man nc.1.


Bunun gibi iki makine arasında veri akışını başarıyla yapıyorum:

  • gönderen:

    while (true); do 
      echo -n "$RANDOM " | nc <host> <port>
    done
    
  • alıcı:

    nc -kl <port> 
    

1

Georges'in yöntemi etkileşimli bir kabuktan işe yarar, ancak örneğin betiğinizi çağırırken komut dosyası oluşturmanıza yardımcı olmaz nohup ./script &.

Stdin'i değiştirmenin bir kukla ile yardımcı olduğunu gördüm.

 mkfifo dummy
 cat command.txt dummy | nc host port

Hiçbir şey asla beşe yazmadığından, dosyayı çıkardıktan sonra catsüresiz olarak onu kapatır.


0

socatbireyin shut-noneseçeneğinin burada yardımcı olacaktır:

Changes the (address dependent) method of shutting down the write part of a connection to not do anything.

Muhtemelen de kullanarak varsayılan zaman aşımı süresini geçersiz -t <timeout>kılmanız gerekecek, aksi takdirde soket 0,5 sn sonra kapanacaktır. Bu seçenek, varsayılan davranışı geçersiz kılar:

When one of the streams effectively reaches EOF, the closing phase begins. Socat transfers the EOF condition to the other stream, i.e. tries to shutdown only its write stream, giving it a chance to terminate gracefully. For a defined time socat continues to transfer data in the other direction, but then closes all remaining channels and terminates.

Yani, gibi bir komut:

echo 'blah' | socat -t 10 stdio tcp:<addr>:<port>,shut-none

'filan' gönderdikten sonra soketi 10 saniye açık tutacak.


0

Uzaktaki ana bilgisayar bağlantıyı kapatırsa (veya erişilemiyorsa) veya boru sonlandırılmadan önceki komutu kapatırsa (netcat hala giriş kuyruğunu geri gönderirken), komutunuz sona erer.

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.