Intereting Posts
Как фиксировать вывод хвоста -f с удаленного хоста на неопределенный срок Выполняет ли «последнюю» команду в сбросе linux через определенное количество времени? Можно ли полностью спрятать сценарий с момента создания? Как? Преобразование текста в ямль Apache, svn в корне домена с одним исключением Сохранение config / pkg dirs в существующей BSD-установке для повторного использования при чистой установке и безопасные способы ее выполнения? Лучший способ удалить байты с начала файла? Как отключить звуковой сигнал по всей системе Как загрузить много документов на терминал с сервера? Установка Ubuntu 14.04 – Ошибка восстановления Grub после отказа отключить безопасную загрузку dconf не работает при запуске приложения X от другого пользователя Как установить bash на FreeBSD Имя протокола протокола Rsync полный, а не модуль выйти из системы из-за обновления пакета обновления для google-chrome? Сохранение настроек внешнего монитора

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

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

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

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

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

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

    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.

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