2013-11-16 7 views
1

Я занимаюсь базовым сетевым программированием с использованием c/C++. То, что я пытаюсь сделать, это создать пакеты с заголовками, заполненными моими собственными значениями (вместо ядра), отправить пакет на какой-то сервер и получить ответ. Я смог создать структуры заголовков tcp/ip и заполнить поля, такие как seq_num и т. Д. В качестве примера я отправил SYN-пакет хосту на каком-то порту и проверил, отвечает ли хост действительным SYN_ACK.Заполнение IP-адреса источника в сыром сокете, чтобы получить действительный ответ

Мне интересно, что нужно поместить в поле source_address и source_port в заголовке ip/tcp, чтобы получить действительный ответ. Использование локального адреса (127.0.0.1) не будет работать правильно, так как целевая машина не сможет отправить ответ.

Я должен использовать только raw_sockets, не могу использовать SOCK_STREAM и т. Д. Используя ОС Linux.

+0

Я думаю, вы отправите IP-адрес сетевого интерфейса, который вы слушаете. IP должен быть действительным с точки зрения удаленного сайта. – usr

ответ

1

Исходный IP-адрес должен быть IP-адресом интерфейса, из которого вы ожидаете, что пакет выйдет, чтобы добраться до пункта назначения. Чтобы сделать вещи менее сложными, порт источника может быть любым свободным портом на вашем компьютере.

Также вам нужно позаботиться о еще одной вещи. После того, как вы получите обратно syn-ack, он будет также обрабатываться стекю tcp вашего компьютера, а стек tcp отправит сброс в ответ на этот syn-ack. Если вы используете Linux, вы можете использовать iptables, чтобы сбросить сброс.

-MS

+0

Да для получения также я буду использовать сырые сокеты. Я могу понять это. Я мог бы придумать следующее: 1) Для source_ip используйте структуры ifaddr и информацию из них. 2) Для порта просто получите getpid()% 65535 (немного багги, но сейчас все в порядке). Будет ли это работать? – user775093

+0

Я думаю, что будет лучше напрямую использовать номер порта из диапазона эфемерных портов напрямую, поскольку эта формула может указывать на номер порта 0, а иногда может указывать номер порта от 1 до 1024. –

+0

да, вот почему я сказал «немного багги». другим способом, который я думал, было использование часового времени для вычисления случайного числа. Я могу понять это. Так подходит ли метод ifaddr для получения source_ip? – user775093

 Смежные вопросы

  • Нет связанных вопросов^_^