Вопрос, связанный с UDP

kokoc88

Допустим, у нас есть сервер, который биндит UDP сокет без SO_REUSEADDR. Потом он отправляет броадкасты. Нужно написать пограмму, которая бы запускалась и до, и после запуска сервера, а так же позволяла бы получать эти самые броадкасты.
Если эту программу написать так, чтобы она биндила сокет с SO_REUSEADDR на тот же порт, то она будет ловить броадкасты сервера. Конечно, при этом сервер нельзя будет запустить после запуска программы.
Есть ли другие решения?

ppplva

1. Пропатчить сервер ?
2. Рутовый доступ есть ? Можно через iptables замутить перенаправление пакетов на другой порт.

ppplva

Линух/юних, я надеюсь ?
Можно перехватить библиотечные вызовы с помощью LD_PRELOAD.

kokoc88

1. Исходников серверной программы нет.
2. Программа, которую нужно написать, должна работать под виндой. И не требовать никаких знаний от пользователя.

ppplva

Так сервер тоже под виндой ? Все равно его можно пропатчить. Найти вызов socket под отладчиком, и подменить параметр.

abrek

через raw sockets можно ловить что угодно

kokoc88

Я же сказал, что исходников серверной программы нет. Мало того, она проверяет свой checksum при запуске. Да и SO_REUSEADDR ставится не в socket а отдельной функцией.

kokoc88

Две проблемы. Первая заключается в том, что винда не всегда поддерживает SOCK_RAW. Вторая заключается в том, что под обычным пользователем в XP/2000 такой сокет создать нельзя.

ppplva

Я верю, под винду есть программы, которые перехватывают вызовы библиотечных функций. На самом деле, я даже видел одну из них. Мельком.
Попробуй найти сорец одной из этих тварей, и адаптировать под свои нужды.

kokoc88

Да, я в курсе. Думал, может, есть методы проще. Видимо, либо SOCK_RAW, либо hook injection. И проще никак.
Оставить комментарий
Имя или ник:
Комментарий: