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

Я хочу спроектировать систему, которая уменьшит время прохождения пакета, что в действительности происходит, когда я посылаю бит SYN со стороны клиента, этот бит проходит через маршрутизатор, а затем на сервер, а сервер отвечает SYN + ACK, который также проходит через маршрутизатор к клиенту.

Поэтому я просто хочу что-то еще, например, что если клиент отправит SYN на маршрутизатор, маршрутизатор затем отправит это на сервер и скопирует этот пакет, измените SYN на SYN + ACK и отправит обратно клиенту, прежде чем сервер сможет отправить после того, как сервер отправит этот SYN + ACK на маршрутизатор , роутер просто примет это (посмотри как приходит ответ) и откажись

Для достижения вышеуказанной цели я разрабатываю установку, в которой у меня есть один ноутбук, который отправляет и получает пакеты с двух интерфейсов Ethernet, а другой – настольный компьютер, который действует как маршрутизатор (пакеты поступают, и он только перенаправляет его к месту назначения). таблицу маршрутизации с обеих сторон и включите пересылку ip на рабочий стол (который действует как маршрутизатор).

Все работают нормально, на ноутбуке у меня есть серверная и клиентская программа, которая отправляет пакет и получает его, но проблема в том, что я хочу отправить пакеты туда, откуда он пришел (самому источнику), поэтому я изменяю пакет при маршрутизации используя модуль netfilter, скопируйте весь skb (используя skb_copy) и поменяйте местами его источник и назначение ip (я сделал это на NF_INET_PREROUTING), а также поменяйте местами номер порта, но пакет всегда направляется к месту назначения.

Какие еще модификации мне нужно сделать, чтобы отправить пакет самому источнику?

    2 Solutions collect form web for “Отправить пакет TCP на тот же источник”

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

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

     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 .

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

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

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

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

    Interesting Posts

    Сброс сетевых интерфейсов при пробуждении от приостановки

    Debian + Huawei E3372h

    Как ограничить соединения с определенными службами, которые будут доступны только через соединение, поступающее из поддоменов?

    расхождение в выводах «swapon -show» и «df -h» для раздела swapon

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

    Могу ли я перенаправить вывод в файл журнала и выполнить фоновый процесс одновременно?

    Почему в Cinnamon / Linux / Xorg отключен ключ Scroll Lock?

    Выяснение * что * синхронизирует два сервера Linux

    Какая техническая разница между официальным виртуальным боксом и VirtualBox-OSE?

    Система Rsync'ing, исключение, похоже, не работает

    Командный инструмент для создания торрент-файлов, содержащих MD5-хэши файлов?

    Имена файлов с пробелами в подстановке

    шлюз должен находиться в подсети?

    Какая цифра для базы больше 16 в bc?

    `Control + Alt + Tab` не показывает верхнюю панель в Gnome 3

    Linux и Unix - лучшая ОС в мире.