Я пытаюсь создать простой сценарий, который будет имитировать TCP-клиента, который периодически инициирует соединение с эхо-сервером и генерирует случайную строку для отправки на сервер, которую он затем должен отправить обратно клиенту.Ниже приведен простой скрипт bash, который я настроил:
while :
do
var="$(shuf -i 9-19 -n 1)" # generate a random number between 9-19
rand="$(pwgen "$var" 1)" # generate a random string of size var
echo "$rand" | nc localhost 1234
sleep 5
done
Сам сервер - это просто простая команда, запущенная в терминале:
ncat -l 1234 -k --exec "/bin/cat"
I 'Я заметил в Wireshark для сценария 1, что рукопожатие по протоколу TCP 3 завершается нормально, клиент отправляет данные, казалось бы, нормально, но тогда я никогда не вижу ответа или эха с сервера.Кажется, что сервер все еще может ответить клиенту, закрывающему соединение.Захват для первого сценария здесь .
Это противоречит сценарию два, если я только что запустил nc localhost 1234
в терминале и начал набирать текст.В этом сценарии я вижу в Wireshark, что сервер отвечает, как и ожидалось, с ответом, встречающимся в строке здесь 6.
Почему я не могу видеть ответ в случае 1 какЯ делаю в случае 2?Как мне нужно изменить свой сценарий, чтобы отразить это предполагаемое поведение (если это возможно)?Наконец, в сценарии 2, почему сервер отвечает клиенту дважды, сначала с помощью [ACK] без данных, а затем с другим [PSH, ACK] сразу после размещения данных «эхо» (как видно в строках 5 и 6).второго захвата)?
РЕДАКТИРОВАТЬ: После просмотра еще, я думаю, я нашел решение этой проблемы.Это происходит из-за того, что netcat завершает работу до получения ответа, как указано в https://unix.stackexchange.com/questions/289364/netcat-doesnt-print-response.. Таким образом, простым исправлением будет изменение сценария так, чтобы он использовал опцию задержки -q
.
while :
do
var="$(shuf -i 9-19 -n 1)"
rand="$(pwgen "$var" 1)"
echo "$rand" | nc -q 1 localhost 1234 #change here
sleep 5
done
Я все еще не уверен в третьем вопросе, который у меня был, но есть подозрения, что это может быть синхронизация нового размера окна соединения?Еще раз спасибо за любые идеи.