Jak zmusić netcat do natychmiastowego wysyłania danych wejściowych, nie tylko na nowe linie?

35

Jak zmusić netcat do natychmiastowego wysyłania danych wejściowych, nie tylko na nowe linie? Chcę ręcznie przetestować analizator składni HTTP i sprawdzić, jak się zachowuje, gdy linie nagłówków są rozmieszczone w wielu pakietach.

thejh
źródło
2
spróbuj socatjak podano w tej odpowiedzi
Jeremy W

Odpowiedzi:

42

Użyj przycisku „eof” CtrlD. Naciśnięcie w środku linii da netcatowi wszystko, co zostało wprowadzone w tym momencie.

Buforowanie jest faktycznie wykonywane przez warstwę tty i wcale nie jest obsługiwane nc. stty -icanon && nc ...wyłączy buforowanie i pozwoli nczobaczyć dane wprowadzane do terminala, w którym to momencie zostaną one wysłane natychmiast. (Zauważ, że polecenia sttyi ncmuszą być uruchamiane razem, w przeciwnym razie sama powłoka prawdopodobnie włączy ją ponownie, wyświetlając monit.)

grawitacja
źródło
+1, ale czy nie ma opcji otwarcia netcat tak, aby niczego nie buforował?
lpapp
5
@FinalContest: Buforowanie odbywa się przez warstwę tty. stty -icanon && nc ...lub stty raw && nc ...by to wyłączyć. [Zauważ, że musi być uruchamiany razem, w przeciwnym razie sama powłoka
włączy
@grawity: niesamowite, pierwsze działa dobrze, ale drugie się zacina ... ctrl-c już nie działa, aby opuścić sesję, i nie mogę zmusić ctrl-z do pracy nad nim. Czy to jest oczekiwane? Zaktualizuj również swoją odpowiedź, abyśmy mogli wyczyścić komentarze.
lpapp
2
@FinalContest: Tak, rawzmienia całą masę opcji tty, jedną z nich jest obsługa specjalnych klawiszy „kontrolnych” na poziomie tty. (To jest naprawdę tryb „surowy”, ponieważ przekazuje wszystko do programu.) Możesz użyć stty -a -F /dev/pts/XXinnego tty, aby zobaczyć bieżące parametry.
grawity
Używam stty -icanon -echo && nc ...inaczej każdy znak, który wpisałem w nc, zostanie powtórzony dwukrotnie
Gelin Luo