Как подделать адрес отправителя в UDP пакете?

Нужно протестировать программу, которая принимает UDP пакеты с определенных адресов. Если адрес нужный, сообщение разбираем.

Пишу тестовую программу, в которой создается несколько Udp сокетов и отсылается сообщение.
В классе QAbstractSocket есть метод setLocalAddress(const QHostAddress & address) [protected], который вроде бы должен подменять адрес отправителя. Но в Wireshark-e вижу, что адрес не подменяется.

Можно ли сделать такую подмену в принципе?
Как это сделать на С++/Qt?
  • Вопрос задан
  • 4474 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
setLocalAddress можно установить только адреса, присутствующие на локальных интерфейсах. Произвольный адрес установить нельзя. Т.о. можно либо добавить нужный адрес локальному интерфейсу (например с помощью ifconfig add), либо открыть "сырой" сокет и формировать заголовки IP и UDP самостоятельно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Properrr
@Properrr
Скорее всего никак, потому что используя такие либы Вы находитесь слишком высоко от драйверов.
Посмотрите pcap библиотеку(но она работает не со всеми сетевыми картама) и делайте что требуется.
Послать пакет, в котором в заголовке будет неродной адрес никто не запрещает(разве что оборудование через которое вы плюете пакеты в общественную сеть).
Ответ написан
Комментировать
karabanov
@karabanov
Системный администратор
Может сгенерировать пакет так: linkmeup.ru/blog/121.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы