The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Трассировка обмена данными через Unix domain socket
Для Unix domain socket до сих пор отсутствовал инструмент  для захвата или
ослеживания содержимого канала связи, наподобие tcpdump для IP. Для решения
данной задачи подготовлен новый инструмент udtrace, который реализован в
виде разделяемой библиотеки, подключаемой через LD_PRELOAD.


Загружаем код из Git:

    git clone git://git.gnumonks.org/udtrace

Собираем командой:

    make

Запускаем интересующее приложение в режиме трасиировки:

    LD_PRELOAD=libudtrace.os программа

Например, чтобы узнать какие данные передаёт systemctl через Unix-сокет при
выполнении команды "stat", можно запустить:

    LD_PRELOAD=libudtrace.so systemctl status

    >>> UDTRACE: Unix Domain Socket Trace initialized (TITAN support DISABLED)
    >>> UDTRACE: Adding FD 4
    >>> UDTRACE: connect(4, "/run/dbus/system_bus_socket")
    4 sendmsg W 00415554482045585445524e414c20
    4 sendmsg W 3331333033303330
    4 sendmsg W 0d0a4e45474f54494154455f554e49585f46440d0a424547494e0d0a
    [...]
     UDTRACE: Removing FD 4

где, 

* 4 - номер файлового дескриптора
* sendmsg - имя системного вызова (кроме sendmsg может быть  read, write , readv и т.п.)
* R|W - операция чтения или записи (со стороны отслеживаемого процесса)
* шестнадцатеричный дамп переданных или полученных данных (отображаются только
реально переданные через сокет данные, а не попавшие буфер передачи)

Для декодирования шестнадцатеричного дампа можно собрать декодировщики от
проекта Osmocom, написанные на языке TTCN-3 с использованием Eclipse TITAN.
Для их включения при сборке можно указать флаг

   make ENABLE_TITAN=1

После чего запускать трассировку строкой вида:

   LD_LIBRARY_PATH=/usr/lib/titan LD_PRELOAD=libudtrace.so systemctl status
 
12.04.2018 , Источник: http://laforge.gnumonks.org/blog/20...
Ключи: trace, dump, debug, unix, socket, tcpdump / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Просмотр состояния и мониторинг системы

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Онанимус (?), 10:04, 12/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А чего не показали, как изменится выхлоп, после применения шестнадцатеричного декодировщика?
     
     
  • 2.3, Qasta (ok), 12:31, 12/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже интересно было бы посмотреть...
     
     
  • 3.8, Аноним (-), 09:42, 13/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Где тот герой, кто оторвет жопу от дивана, и пересоберет udtrace, и воспроизведет пример из статьи?
     

  • 1.2, EHLO (?), 11:23, 12/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Что из этого нельзя в strace? Или strace слишком архаично для *Ops-ов?
     
     
  • 2.4, щи (?), 15:35, 12/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тем, что strace работает через ptrace? Разве не очевидно?
     
  • 2.5, Аноним (-), 18:04, 12/04/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В *strace очевидно много лишнего.

    Интересней зачем кому-то использовать unix sockets - для общесистемных нужд?

    Для каких прикладных задач может быть полезно. nginx не предлагать, Сысоев не одобрит.

     
     
  • 3.6, Аноним (-), 18:07, 12/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Для каких прикладных задач - это вопрос. Вопросительный знак потерялся. :)
     
  • 3.9, Аноним (-), 10:24, 13/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Для каких прикладных задач может быть полезно. nginx не предлагать, Сысоев не одобрит.

    А что, чтобы применить для чего-либо этот nginx, нужно спрашивать одобрения у Сысоева? Такой "свободный" проект...

     
     
  • 4.12, Аноним (-), 12:31, 18/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Одобрение спрашивать не нужно, но полезно знать ограничения продукта, который ты используешь.

    Так вот Сысоев как-то высказался в духе, что использовать unix sockets в nginx не стоит.

     
  • 3.10, Andrey Mitrofanov (?), 10:45, 13/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В *strace очевидно много лишнего.
    > Интересней зачем кому-то использовать unix sockets - для общесистемных нужд?

    Пошарь на своём локалхостике в выводе -[CODE]for mp in /{,var/,run/}; do
        mountpoint -q $mp && find $mp -mount -type s;
    done 2>/dev/null[/CODE]и подумай, зачем _тебе_ это?

    > Для каких прикладных задач может быть полезно. nginx не предлагать, Сысоев не
    > одобрит.

     
     
  • 4.13, Аноним (-), 12:43, 18/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Годный ответ. Спасибо.
     
     
  • 5.14, Andrey Mitrofanov (?), 14:25, 18/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Годный ответ. Спасибо.

    Пожалуйста.

    Там ещё ',tmp/'  перед '}' имеет смысл добавить.

    ...и, для ценителей:
    $ lsof -U |sort -k9 |less -S
    # lsof -U |sort -k6,6 -k9 |awk '{if($6!=x){l=$0;x=$6}else{if(l)print l;print;l=""}}' |less -S

     

  • 1.7, Аноним (-), 22:51, 12/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно как-то так:
    [code]$ sudo socat -v UNIX-LISTEN:/tmp/socat-listen,ignoreeof,fork UNIX-CONNECT:/var/run/docker.sock,ignoreeof &
    [1] 14726
    $ sudo docker --host=unix:///tmp/socat-listen images
    > 2018/04/12 12:46:29.989304  length=79 from=0 to=78

    GET /_ping HTTP/1.1\r
    Host: docker\r
    User-Agent: Docker-Client/1.13.1 (linux)\r
    \r
    < 2018/04/12 12:46:29.994767  length=196 from=0 to=195
    HTTP/1.1 200 OK\r
    Api-Version: 1.26\r
    Docker-Experimental: false\r
    Server: Docker/1.13.1 (linux)\r
    Date: Thu, 12 Apr 2018 19:46:29 GMT\r
    Content-Length: 2\r
    Content-Type: text/plain; charset=utf-8\r
    \r
    OK> 2018/04/12 12:46:29.999271  length=91 from=79 to=169
    GET /v1.26/images/json HTTP/1.1\r
    Host: docker\r
    User-Agent: Docker-Client/1.13.1 (linux)\r
    \r
    < 2018/04/12 12:46:30.000197  length=516 from=196 to=711
    HTTP/1.1 200 OK\r
    Api-Version: 1.26\r
    Content-Type: application/json\r
    Docker-Experimental: false\r
    Server: Docker/1.13.1 (linux)\r
    Date: Thu, 12 Apr 2018 19:46:30 GMT\r
    Content-Length: 329\r
    \r
    [{"Containers":-1,"Created":1522924888,"Id":"sha256:8ac48589692a53a9b8c2d1ceaa6b402665aa7fe667ba51ccc03002300856d8c7","Labels":null,"ParentId":"","RepoDigests":["busybox@sha256:58ac43b2cc92c687a32c8be6278e50a063579655fe3090125dcb2af0ff9e1a64"],"RepoTags":["busybox:latest"],"SharedSize":-1,"Size":1146369,"VirtualSize":1146369}]
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              8ac48589692a        7 days ago          1.15 MB
    $[/code]

    Вместо -v можно -x (hexadecimal), или комбирированный -v -x. Ну и банальный strace -e.... никто не отменял.

     
  • 1.11, izyk (ok), 13:17, 13/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно так:
    https://superuser.com/a/576404
    если можно.
     
  • 1.15, Аноним (-), 19:17, 24/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Способ с LD_PRELOAD вообще позволяет прикалываться над программами по всякому. Можно завернуть неугодные вызовы, можно туфту возвращать. Ну и просто изучать что программа делает. И логгить, если хочется.

    Я так делал для open - можно логить что программа пыталась открыть. А можно и завернуть нафиг. Все. Или не все. Дешево и сердито.

     
     
  • 2.16, Andrey Mitrofanov (?), 06:42, 25/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >Ну и просто изучать что программа делает.

    Маленький Столман плачет в каждом читающем это.

     

  • 1.17, universite (ok), 06:07, 28/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На FreeBSD не собирается:
    [code]
    root@tank1:/tmp/udtrace/udtrace# gmake
    cc -Wall -fPIC -o utils.o -c utils.c
    cc -Wall -fPIC -o sock_events.o -c sock_events.c
    In file included from sock_events.c:3:
    ./sock_events.h:8:10: fatal error: 'sys/epoll.h' file not found
    #include <sys/epoll.h>
             ^~~~~~~~~~~~~
    1 error generated.
    gmake: *** [Makefile:18: sock_events.o] Ошибка 1
    [/code]
     
     
  • 2.19, xm (ok), 14:54, 11/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Патамушта там kqueue
     

  • 1.18, Sfinx (ok), 21:15, 09/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    sysdig не ?
     
  • 1.20, Всем Сосать (ok), 16:07, 17/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нажрались системдятины? Теперь трассировщик нужен?
    Не хотели кушать bash, жрите блобы и дампы.  
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру