C - контрольная сумма TCP (с использованием необработанных сокетов) - как получить IP-адрес источника - PullRequest
6 голосов
/ 29 июня 2011

При использовании raw sockets для отправки TCP данных разрешается оставлять ноль source ip address, чтобы ядро ​​указывало правильное значение. Это полезно, особенно когда используется несколько интерфейсов (с разными IP адресами).

Моя проблема сейчас: чтобы вычислить контрольную сумму * 1007, мне нужно знать, каким будет IP-адрес источника в конце. Это кажется мне невозможным?

Есть ли способ определить источник IP моих исходящих пакетов?

(Альтернативой может быть конкретное связывание моего необработанного сокета с адресом, но я бы предпочел этого не делать).

/ edit: Использование Linux

1 Ответ

1 голос
/ 29 июня 2011

Если вы не привязываете свой сокет, ядро ​​должно найти адрес источника на основе адреса назначения.

По существу, поиск маршрута выполнен и определен интерфейс назначения. После этого IP-адрес берется из этого интерфейса: источник вашего пакета.

Таким образом, ваш вопрос превращается в поиск маршрута, как это делает ip route get.

EDIT

@ nos упоминается с использованием другого сокета (UDP) и подключения его к этому адресу назначения. Получение его локально связанного имени с помощью getsockname должно дать вам адрес источника, который будет использоваться для этого места назначения.

...