Я занимаюсь базовым сетевым программированием с использованием c / c ++. Я пытаюсь создать пакеты с заголовками, заполненными моими собственными значениями (вместо ядра), отправить пакет на некоторый сервер и получить ответ. Мне удалось создать структуры заголовков tcp / ip и заполнить поля, такие как seq_num и т. Д. В качестве примера я бы отправил пакет SYN хосту на каком-либо порту и проверил, отвечает ли хост допустимым SYN_ACK.
Мне интересно, что нужно вставить для поля source_address и source_port в заголовке ip / tcp, чтобы я получил правильный ответ. Использование локального адреса (127.0.0.1) не будет работать правильно, потому что целевой компьютер не сможет отправить ответ.
Я должен использовать только raw_sockets, не могу использовать SOCK_STREAM и т. Д. Использование ОС Linux.
Исходный IP-адрес должен быть IP-адресом интерфейса, с которого вы ожидаете, что пакет выйдет к месту назначения. Чтобы сделать вещи менее сложными, исходный порт может быть любым свободным портом на вашей машине.
Также вам нужно позаботиться еще об одной вещи. Как только вы вернете syn-ack, он также будет обрабатываться стеком tcp вашего компьютера, и стек tcp отправит сброс в ответ на этот syn-ack. Если вы используете Linux, вы можете использовать iptables, чтобы сбросить исходящий сброс.
-МИЗ
Других решений пока нет …