netcat yanıt yazmıyor


12

Ben kullanarak bir TCP portuna komutları göndermek çalışıyorum netcatve boru yanıtı
ı çalıştırdığınızda netcatve doğru yanıtı yazdırır ama borusundan komutu geçerken doğru komutu gönderir ama yanıtı yazdırmıyor benim komutu yazın

Yani, bu doğru çalışıyor:

netcat  localhost 9009

bu sadece komut gönderir ancak yanıt yazdırmaz:

echo 'my_command' | netcat  localhost 9009

neden? Yanıt metnini
nasıl netcatyazdırabilirim?


bu muhtemelen sana oluyor
Jeff Schaller

@JeffSchaller: hayır! ne yazık ki bu komutları kullanmak yardımcı olmuyor! bu kez sonsuza kadar engelliyor!
16:26, RYN

Hangi netcat kullanıyorsunuz? Ne yazık ki netcat aracının bir düzine farklı varyasyonu var ve hepsi aynı şekilde davranmıyor. Ayrıca, uzak uçta ne var?
Patrick

@Patrick: Netcat'im OpenBSD netcat (Debian patchlevel 1.105-7ubuntu1)versiyon; ve uzak uçta telegram-cliaynı makinede.
16:46, RYN

Sanırım o netcat için bir man sayfası buldum, ama ne olduğundan şüphelendiğimi kontrol edecek hiçbir bayrak göremiyorum. Bir kez netcatSTDIN'de EOF aldığından, yarı kapanma yapmak ve uzak tarafın ucunu kapatmasını beklemek yerine soketin her iki tarafını da hemen kapattığını sanıyorum . Bir socatseçenek ise, bunun yerine kesinlikle tavsiye. Sadece bir tane var socat, bu yüzden bir düzine farklı lezzeti ile taşınabilirlik sorunlarınız yok, çok daha sağlıklı davranıyor ve son derece yapılandırılabilir.
Patrick

Yanıtlar:


8

@Patrick'in dediği gibi, bu sorun genellikle netcatyanıt verilmeden önce çıkılmasından kaynaklanmaktadır . -q 2Komut satırına ekleyerek , yani netcatstandart girişte EOF tespit ettikten sonra yaklaşık 2 saniye beklemenizi söyleyin . Belli ki birkaç saniye daha bekletebilirsiniz.


Teşekkürler; -q 2çalıştı ama güvenilir mi? 2s her zaman yeterli olduğundan emin olamıyorum web isteği yapıyor! yapabilirmiyim ?
RYN

1
Daha uzun süre bekletmek için daha büyük bir sayı veya süresiz olarak bekletmek için negatif bir sayı kullanın. Ayrıca -woynama seçeneği de var. Bunların hepsi man ncelbette sayfada.
Ralph Rönnquist

5
diyorinvalid option -- 'q'
phil294

Bence iyi bir takip sorusu: ncBir cevap beklemek yerine neden hemen çıkılıyor? Bağlantı hala açıksa, ncsadece
stdin'in

6

Bunu kullan:

cat <(echo command) - | nc host port

Sorun, ncstdin kapatıldıktan hemen sonra bağlantıyı kapatmasıdır, bu da basit bir my_commanddize için çok hızlıdır ve böylece hiçbir zaman yanıt alma şansı elde etmez. (Çok büyük bir dosyayı yönlendirirseniz, dosyayı göndermeden önce bir yanıt alabileceğini görürsünüz).

Enter catile -ikinci argüman olarak: O yapar catilk argüman içeriğini gönderdi sonra içinden boruya fazla içerik için stdin'i dinlemek. İlk argüman sadece echokomutu yerine getirmektir cat- aynı zamanda komutlarınızı içeren bir dosya da la olabilir cat < file - | ....

Alternatif olarak bunu yapın:

(echo command; while true; do sleep 0.01; echo -n "#"; done) | nc host port

Bu #, girişin 2. satırına sınırsız karakter gönderir . Kullanılması #bir yorum olarak bu dikkate almayacağını uzaktan gibi bir bash için çalışmalarını. Burada 10 milisaniyelik küçük bir bekleme süresi seçtim, bu yüzden bağlantı ucunda daha hızlı tepki veriyor. YMMV.

Bunun dezavantajı, o catveya whiledöngü olabilir ve ncsiz vuruncaya ^Cveya ^Dkabuğa kadar çalışmaya devam edebilir . Gerçekten uzak uca bağlıdır.

-w 1(OSX netcat) veya -i 1(nmap's ncat) kullanarak bir zaman aşımı eklemek bağlantıyı kapatır ve nc1 saniye sonra yapar , ancak catbir karakter girip boru kopana kadar çalışmaya devam eder (sanırım).

Ancak, uzak taraf komutu aldıktan ve işledikten sonra bağlantıyı otomatik olarak kapatacaksa çalışır - bu da ncistemciyi ve içine işlem borularını sonlandırır .

Bu cevap, aynı süper kullanıcı sorununun bu cevabına dayanmaktadır .


{ echo my_command; cat;}aynı şeyi yapar ve anlaşılması daha kolay olarak değerlendirilebilir.
G-Man, '

1

Farklı openbsd-netcat'in versiyonları farklı kombinasyonlarını gerek, ilginç olan -w <seconds>, -q <seconds>, -Nbağlantının diğer ucundaki nelerin çalıştığını bağlı ve hatta gerek farklı argümanlar. Zaman aşımı seçeneklerinin belirli sürümlerde veya sunucularda kullanılması gecikmelere neden olur ve bunların kullanılmaması çok uzun (sonsuz?) Gecikmeye neden olabilir. Ve gnu netcat ile farklı tuhaflıklar beklerdim, ama sürümleri arasında farklı olup olmadıklarını bilmiyorum.

Örneğin archlinux 1.130_3 sürümü son derece uzun (sonsuza dek?) Bunu yaptığımda:

$ echo response | nc -l 9999 &
[1] 15190

$ time echo request | nc localhost 9999
request
response

(wait forever possibly)

Ancak sunucuya veya istemciye eklenen -N ile çalışır.


1

Bunun biraz eski olduğunu biliyorum ama benim için başka bir cevap işe yaramadı ve bu işe yaradı:

echo 'test' | netcat -N $server $port

Dikkat -N:

girişte EOF sonrasında ağ soketini kapatın. Bazı sunucular işlerini bitirmek için bunu gerektirir.

Hem Windows hem de Linux'ta benim için çalıştı.

Not: Bu, yinelenen bir soru için gönderdiğim yanıtın bir kopyasını .

Bunun yararlı olabileceğini düşünüyorum. Modlar, politikaya veya başka bir şeye aykırı ise düzenleme / silme konusunda çekinmeyin.

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.