Для моего приложения мне нужно перехватить определенные пакеты TCP/IP и направить их на другое устройство через пользовательский канал связи (не Ethernet). Мне нужны все контрольные пакеты TCP и полные заголовки. Я выяснил, как получить их с помощью необработанного сокета с помощью сокета (PF_PACKET, SOCK_RAW, htons (ETH_P_IP). Это работает хорошо и позволяет мне прикреплять фильтры, чтобы просто увидеть интересующий меня порт TCP.
Тем не менее, Linux также видит эти пакеты. По умолчанию он отправляет RST при получении пакета на номер порта, о котором он не знает. Это не хорошо, так как я планирую отправить ответ сам позже. Если я открою второй "обычный" сокет на том же порту, используя сокет (PF_INET, SOCK_STREAM, 0) и listen () на нем, Linux затем отправит ACK на входящие TCP-пакеты. Ни один из этих вариантов не является тем, что я хочу. Я хочу, чтобы он ничего не делал с этими пакетами, чтобы я мог справиться со всем сам. Как я могу сделать это?