Как я могу заставить netcat немедленно отправлять свои данные, а не только на новых строках?

35

Как я могу заставить netcat немедленно отправлять свои данные, а не только на новых строках? Я хочу проверить HTTP-парсер вручную и проверить, как он себя ведет, когда строки заголовка распределены по нескольким пакетам.

thejh
источник
2
попробуйте, socatкак указано в этом ответе
Джереми W

Ответы:

42

Используйте клавишу «EOF», CtrlD. Когда нажата в середине строки, это даст netcat все, что было введено в этой точке.

Буферизация фактически выполняется слоем tty и не обрабатывается ncвообще. stty -icanon && nc ...отключит буферизацию и позволит ncувидеть данные, когда они вводятся в терминал, и в этот момент они будут отправлены сразу. (Обратите внимание , что sttyи ncкоманды должны работать вместе, в противном случае сама оболочка, вероятно , включить его при отображении его строки.)

grawity
источник
+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, получит повторение дважды
Гелин Ло