Отправка TCP-пакета в тот же источник

Вы можете попробовать следующее: он использует отдельный вызов hadoop fs cat (в подстановке процесса )для извлечения каждого файла и представления его в script.sh в качестве имени файла для открытия для чтения.

 # Adjust the hdfs: URLs as necessary
 hadoop fs -cat hdfs://path_to_script/sample.sh | exec bash  \
  <(hadoop fs -cat hdfs://param1) \
  <(hadoop fs -cat hdfs://param2) \
  <(hadoop fs -cat hdfs://param3) \
  <(hadoop fs -cat hdfs://param4)

Если script.sh уже знает, как читать из hdfs, то

  hadoop fs -cat hdfs://path_to_script/script.sh | exec bash -s param1 param2 param3 param4

может быть достаточно. Параметр -s сообщает bash, что сценарий следует читать из стандартного ввода, чтобы параметр param1 не был ошибочно принят за имя запускаемого сценария.

1
06.08.2018, 10:41
2 ответа

TCP использует разные счетчики последовательности на обоих концах соединения. Поэтому, если вы просто отправите полный пакет обратно, он будет иметь неправильный порядковый номер и будет отклонен на другом конце, потому что другой конец думает, что это дубликат пакета, который был задержан и т. д.

Однако вы можете отправить содержимое пакета обратно, если хотите. Простой способ сделать это с помощью socat. Проверьте следующее в двух окнах терминала. В одном сделай

socat TCP-LISTEN:9990 SYSTEM:"cat"

Он будет прослушивать входящие соединения и, когда соединение будет установлено, направлять входящие данные на cat, который будет выводить те же данные, которые затем выводятся через TCP-соединение.

В другом сделай

socat - TCP:localhost:9990

Это подключится к первому socatна порту 9990, отправит на него stdinи запишет ответ на stdout. Введите несколько строк (stdin отправляет строки только по CR )и смотрите, как они возвращаются.

Таким образом, вы можете использовать это для проверки вашей установки, если это была идея. Вы также можете использовать что-то подобное, чтобы отправить все обратно на сервер :

.
socat TCP:server.com:1234 SYSTEM:"cat"

Но для этого требуется, чтобы сервер действительно что-то отправлял при подключении.

Если это не решит вашу проблему, отредактируйте свой вопрос и объясните, почему вы хотите отправить обратно "пакеты", и какую проблему вы хотите решить, отправив обратно "пакеты". (Проверить установку? Тестировать сервер? Что-то другое? ).

Это очень похоже на задачу XY .

0
28.01.2020, 00:31

Поскольку вопрос полностью изменился, другой ответ:

Отправка SYN+ACK обратно клиенту до того, как сервер фактически получит SYN, — это синпрокси . Google для существующих реализаций.

Это не имеет ничего общего с «обратной отправкой пакетов», это просто начальная обработка SYN/ACK.

И нет, это невозможно сделать с помощью правил брандмауэра, потому что он должен сохранять состояние (или, по крайней мере, какое-то количество состояний ).

0
28.01.2020, 00:31

Теги

Похожие вопросы