Bagaimana saya bisa memaksa netcat untuk mengirim input saya segera, bukan hanya pada baris baru?

35

Bagaimana saya bisa memaksa netcat untuk mengirim input saya segera, bukan hanya pada baris baru? Saya ingin menguji parser HTTP secara manual dan memeriksa bagaimana perilakunya ketika garis header tersebar di beberapa paket.

thejh
sumber
2
coba socatseperti yang tercantum dalam jawaban
Jeremy W

Jawaban:

42

Gunakan tombol "eof" CtrlD,. Ketika ditekan di tengah garis, itu akan memberikan kepada netcat segala sesuatu yang telah diinput pada saat itu.

Buffer sebenarnya dilakukan oleh layer tty dan tidak ditangani ncsama sekali. stty -icanon && nc ...akan menonaktifkan buffering dan memungkinkan ncuntuk melihat data saat dimasukkan ke terminal, pada saat itu akan dikirim segera. (Perhatikan bahwa perintah sttydan ncharus dijalankan bersama, jika tidak, shell itu sendiri kemungkinan akan mengaktifkannya kembali saat menampilkan promptnya.)

grawity
sumber
+1, tetapi apakah tidak ada opsi untuk membuka netcat dengan cara yang tidak buffering apa pun?
lpapp
5
@FinalContest: Buffering dilakukan oleh layer tty. stty -icanon && nc ...atau stty raw && nc ...akan menonaktifkannya. [Perhatikan bahwa itu harus dijalankan bersama, jika tidak, shell itu sendiri akan mengaktifkannya kembali saat menampilkan prompt.]
grawity
@grawity: luar biasa, yang pertama berfungsi dengan baik, tetapi yang kedua macet ... ctrl-c tidak berfungsi lagi untuk keluar dari sesi, dan saya tidak bisa membuat ctrl-z bekerja juga. Apakah itu diharapkan? Selain itu, harap perbarui jawaban Anda sehingga kami dapat membersihkan komentar.
lpapp
2
@FinalContest: Ya, rawmengubah sejumlah besar opsi tty, salah satunya adalah penanganan kunci "kontrol" khusus di tingkat tty. (Ini benar-benar mode "mentah", karena ia meneruskan semuanya ke program.) Anda dapat menggunakan stty -a -F /dev/pts/XXtty lain untuk melihat parameter saat ini.
grawity
Saya menggunakan stty -icanon -echo && nc ...sebaliknya jika setiap karakter yang saya ketikkan di nc dapat digaungkan dua kali
Gelin Luo