Netcat kullanarak sunucuya metin dosyası içeriği mi gönderiliyor?


13

Değiştiremediğim 5144 numaralı bağlantı noktasını dinleyen bir daemon işlemi var.

Bir metin dosyasının içeriğini sunucuya göndermek için netcat kullanmak istiyorum, ancak + netcattuşuna basana kadar terminali asmaya neden oluyor :CtrlC

cat file.txt | nc -u 127.0.0.1 5144

Çalıştırmak için tek yolu nc -u 127.0.0.1 5144dosyanın içeriğini el ile çalıştırarak ve yapıştırarak.

Herhangi bir fikir?


Ayrıca dikkat:

  1. cat file.txt | ...için potansiyel müşteriler bash: ...: command not foundBen terminali kullanmaya devam edebilir ve
  2. kullanmak nc -u 127.0.0.1 5144 < file.txt| ile aynı davranışa yol açar. yukarıda

Ne cat file.txt | …dersin? Nasıl nc -u 127.0.0.1 5144 < file.txt?
Scott

-u kullanmanız gerekiyor mu? Ayrıca, diğer tarafı denedin mi, nc -l -p? ve nc -p'yi denedin mi? (-l -p kullanan bir nc ve -l olmadan -p kullanan biri olduğunu düşünüyorum). Yalnızca bir tarafı, müşteri / başlangıç ​​tarafını gösterdiniz. Sunucu tarafı için ne yapıyorsun? Bir test olarak deneyin, nc bağlantı noktası 1234 dinlemek ve kedi görmek ... | nc ... işe yarıyor. Daha önce hiç görmedim, bu belki zayıf bir şey, ama belki de bu özel daemon'a özgü bir şey kabul edilen şeyleri kabul etmiyor.
barlop

Cini değiştiremem. @Scott: bash: ...: command not foundve "<file.txt" kullanmak | operatörü (netcat sadece kilitleniyor)
Amil

Lütfen daha kesin olabilir misiniz? “ bash: ...: command not found” Diyor mu ? Yoksa “ bash: cat: command not found” veya “ bash: nc: command not found” mu diyor? Ve sonra bir kabuk komut istemine çıkar mı yoksa askıda kalıyor mu? (Bu ayrıntıları eklemek için soruyu düzenlemenizi tavsiye ediyorum, bu yüzden Avustralya'da uyanmakta olan kişilerin belirtilerinizin ne olduğunu öğrenmek için tüm bu yorumları okuması gerekmez.)
Scott

@Scott: Teşekkürler, sorularınıza vereceğim cevapları orijinal soruya entegre ettim. Herhangi bir fikir?
Amil

Yanıtlar:


7

Netcat'in GNU sürümünü kullanıyorsanız, EOF üzerindeki bağlantıyı kapatmak için -c bayrağını kullanabilirsiniz.

-c, - stdin'den EOF üzerinde yakın bağlantıyı kapat

Aracın orijinal sürümünü kullanıyorsanız, -q bayrağını kullanabilirsiniz.

-q sn stdin EOF sonra ve sn gecikme

Orijinal versiyon için bir örnek:

cat file.txt | nc -u -q 0 127.0.0.1 5144

Orijinal komutunuza "-q 0" ekledim. Bu, dosya gönderildikten sonra bağlantıyı kapatır.


Ayırt etmek için: orijinal sürüm, -l -p <port>dinleme için belirtilmesi gereken sürümdür . GNU sürümü sadece alır -l <port>.
15:06

1

EOF bağlantısı gönderdikten sonra boşta kalacağını varsayarsak, sıfıra eşit olarak -w timeoutçalışan seçeneği kullanabilirsiniz timeout(aptal -qseçeneğin aksine ...)

cat file.text | nc -u localhost 4300 -w0

0

FreeBSD'den Windows'a aktarıyorsanız:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N EOF'dan sonra ağ soketini kapatacak

Pencereler: nc -l -p 5144 > output.txt

-lkapalı bağlantıda dinlemeyi durduracak (aksine -L)

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.