На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> Как перехватить вызов функции в приложении? , Linux
    Добрый день. Ничего стоящего в гугле не нашел. Может кто видел рабочий пример перехвата в Linux?

    Приложение чужое, без исходников, работает с сетью (UDP). Нужно перехватить SendTo() и при некоторых условиях подменить ответ.
    Нашел нечто
    https://github.com/kubo/plthook
    https://github.com/Zeex/subhook/
    но так и не понял как его применять к стороннему приложению (не библиотеке).


    P.S. в Windows с такой задачей проблем нет, перехватывается либо с помощью запускающего приложения, либо внедрением библиотеки. Как это делать в Linux не имею понятия.
      Есть какая-то библиотека , которая с ядра тянет пакетики. Посмотреть что идёт через интерфейс в любую сторону точно можно. Пример такой утилиты tcpdump , она в исходных текстах, так что можно посмотреть как библиотека называется , и если есть запрет на передачу пакета. Если нет , то наверное ипчейнами, это встроенный в ядрой брэндмауер, можно заблокировать передачу удп определенному клиенту, а либом вытащить пакеты и переслать кому нужно. Если пакетики идут редко, то можно даже на интерфейс повесить tcpdump, задать ему с командной строки какие пакеты печатать на экран, его вывод на экран перенаправить в собственную программку и разбирать выдачу, наверняка есть более простые методы.
        Пиши ndis драйвер-монитор.

        Добавлено
        Цитата dch @
        Есть какая-то библиотека

        либпкап

        Добавлено
        Тьфу ты нуты. Тебе под линухи, тогда либпкап.

        Добавлено
        А если и подмена нужна по опред. критериям, то проще запилить свой модуль для нетфильтра.

        Добавлено
        В бздях такое решается написанием своей нетграфы
        Сообщение отредактировано: Gonarh -
          Пакеты идут часто, костыли которые будут сильно грузить систему или увеличивать пинг, наверное, не вариант. Если бы это было приемлемо я бы уже написал UDP - прокси, повесил его на порт приложения, а само приложение - на какой-то другой порт.

          Где-то есть пример перехвата такого трафика от определенного приложения? С нуля я не напишу, это не винда. Опыт написания под NIX заканчивается запуском виндовых приложений под Wine и компиляцией кросс-платформенных приложений в gcc.
            Цитата Виталь @
            Пакеты идут часто, костыли которые будут сильно грузить систему или увеличивать пинг, наверное, не вариант.

            Зависит от пакетрейта, если пакетов не более 10-20 тысяч в секунду, задержки будут в пределах, 1-2 мсек.

            Добавлено
            Цитата Виталь @
            Где-то есть пример перехвата такого трафика от определенного приложения?

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

              точно
                Цитата Виталь @
                Как это делать в Linux не имею понятия.

                я тоже ни разу не пробовал в Linux.
                Случайно обнаружил это.
                И тут.
                Ещё
                Ещё пара статей:
                1
                2 - очень интересный вариант.
                Это не "то самое" ?
                Сообщение отредактировано: ЫукпШ -
                  ни разу не пробовал, а аскета как я понимаю все исходные тексты есть, можно перекомпилить со своими вставками и либы и ядро и драйвер интерфейса
                    Самый простой способ - через LD_PRELAOD
                    В аттаче пример, я так хватаю открытие/закрытие файла в FTP/SAMBA и отправляю пути по UDP - замена Inotify т.к. он глючный.
                    Библиотека написана так что легко можно добавить новые функции к перехвату.

                    Со статически линкованными приложениями работать не будет.

                    Нужно скомпилять в динамическую бибиотеку и запустить целевое приложение следующим способом:
                    bash:/# LD_PRELOAD=callmon.so ./my_app
                    Прикреплённый файлПрикреплённый файлcallmon.tar.gz (7 Кбайт, скачиваний: 367)
                    Сообщение отредактировано: HardRock -
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0288 ]   [ 18 queries used ]   [ Generated: 28.03.24, 10:55 GMT ]