Как я могу заставить netcat немедленно отправлять свои данные, а не только на новых строках?
35
Как я могу заставить netcat немедленно отправлять свои данные, а не только на новых строках? Я хочу проверить HTTP-парсер вручную и проверить, как он себя ведет, когда строки заголовка распределены по нескольким пакетам.
Используйте клавишу «EOF», CtrlD. Когда нажата в середине строки, это даст netcat все, что было введено в этой точке.
Буферизация фактически выполняется слоем tty и не обрабатывается ncвообще. stty -icanon && nc ...отключит буферизацию и позволит ncувидеть данные, когда они вводятся в терминал, и в этот момент они будут отправлены сразу. (Обратите внимание , что sttyи ncкоманды должны работать вместе, в противном случае сама оболочка, вероятно , включить его при отображении его строки.)
+1, но нет ли возможности открыть netcat так, чтобы он ничего не буферизировал?
lpapp
5
@FinalContest: буферизация выполняется tty-слоем. stty -icanon && nc ...или stty raw && nc ...отключил бы это. [Обратите внимание, что он должен быть запущен вместе, иначе сама оболочка включит его при отображении приглашения.]
grawity
@grawity: круто, первый работает нормально, но последний застревает ... ctrl-c больше не работает, чтобы выйти из сессии, и я не могу заставить ctrl-z работать с ним. Это ожидается? Также, пожалуйста, обновите свой ответ, чтобы мы могли очистить комментарии.
lpapp
2
@FinalContest: Да, rawизменяется целая куча опций tty, одной из которых является обработка специальных «управляющих» клавиш на уровне tty. (Это действительно «сырой» режим, в котором он передает все программе.) Вы можете использовать stty -a -F /dev/pts/XXдругой tty для просмотра текущих параметров.
grawity
Я использую, stty -icanon -echo && nc ...иначе каждый символ, который я набрал в nc, получит повторение дважды
socat
как указано в этом ответеОтветы:
Используйте клавишу «EOF», CtrlD. Когда нажата в середине строки, это даст netcat все, что было введено в этой точке.
Буферизация фактически выполняется слоем tty и не обрабатывается
nc
вообще.stty -icanon && nc ...
отключит буферизацию и позволитnc
увидеть данные, когда они вводятся в терминал, и в этот момент они будут отправлены сразу. (Обратите внимание , чтоstty
иnc
команды должны работать вместе, в противном случае сама оболочка, вероятно , включить его при отображении его строки.)источник
stty -icanon && nc ...
илиstty raw && nc ...
отключил бы это. [Обратите внимание, что он должен быть запущен вместе, иначе сама оболочка включит его при отображении приглашения.]raw
изменяется целая куча опций tty, одной из которых является обработка специальных «управляющих» клавиш на уровне tty. (Это действительно «сырой» режим, в котором он передает все программе.) Вы можете использоватьstty -a -F /dev/pts/XX
другой tty для просмотра текущих параметров.stty -icanon -echo && nc ...
иначе каждый символ, который я набрал в nc, получит повторение дважды