Как установить адрес источника при отправке с использованием UDP-сокета - PullRequest
4 голосов
/ 22 апреля 2011

У меня два компьютера, использующих VRRP для резервирования. Таким образом, каждый ПК (Linux) имеет физический и виртуальный IP-адрес.

У меня есть программное обеспечение (C ++) с архитектурой клиент / сервер с протоколом UDP. Программное обеспечение связывает сокет прослушивания на «0.0.0.0» и использует новый сокет каждый раз, когда ему нужно отправить некоторые данные другой стороне. С wireshark я увидел, что при отправке данных IP источника является физическим ... Как я могу установить исходный адрес отправляющего сокета на Виртуальный ??

ПРИМЕЧАНИЕ. Если в конфигурации, я вижу только eth0 с физическим адресом ...

Ответы [ 2 ]

7 голосов
/ 22 апреля 2011

Когда ядру нужно что-то отправить через сокет, оно выполняет эти шаги

  • , если сокет связан, используйте этот адрес источника
  • , если сокет не связан, онищет интерфейсы и выбирает адрес источника

Так что вам нужно bind(2) вашего сокета по вашему желаемому адресу.Для получения дополнительной информации: Выбор адреса источника .

0 голосов
/ 22 апреля 2011

Я не уверен, что полностью понимаю ваш вопрос, но с точки зрения написания кода C / C ++ для linux на низком уровне, вы можете импортировать заголовок ip.h из заголовков ядра linux, который дает вам доступ к низкому уровнюСтруктура IP-пакета.(UDP работает поверх IP)

#include <linux/ip.h>

, а затем посмотрите на struct iphdr, который является заголовком для каждого отправленного IP-пакета и содержит элемент saddr, который вы можете программно установить в качестве источникаадрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...