The OpenNET Project / Index page

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



"Раздел полезных советов: Трассировка обмена данными через Un..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Трассировка обмена данными через Un..."  +/
Сообщение от auto_tips on 12-Апр-18, 10:04 
Для Unix domain socket до сих пор отсутствовал инструмент  для захвата или ослеживания содержимого канала связи, наподобие tcpdump для IP. Для решения данной задачи [[http://laforge.gnumonks.org/blog/20180330-udtrace/ подготовлен]] новый инструмент [[https://github.com/laf0rge/udtrace 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 с использованием [[https://projects.eclipse.org/projects/tools.titan Eclipse TITAN]]. Для их включения при сборке можно указать флаг

   make ENABLE_TITAN=1

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

   LD_LIBRARY_PATH=/usr/lib/titan LD_PRELOAD=libudtrace.so systemctl status

URL: http://laforge.gnumonks.org/blog/20180330-udtrace/
Обсуждается: http://www.opennet.ru/tips/info/3057.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Онанимус on 12-Апр-18, 10:04 
А чего не показали, как изменится выхлоп, после применения шестнадцатеричного декодировщика?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Трассировка обмена данными через Unix domain socket"  +1 +/
Сообщение от EHLO on 12-Апр-18, 11:23 
Что из этого нельзя в strace? Или strace слишком архаично для *Ops-ов?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Qasta (ok) on 12-Апр-18, 12:31 
Тоже интересно было бы посмотреть...
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от щи on 12-Апр-18, 15:35 
Тем, что strace работает через ptrace? Разве не очевидно?
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Трассировка обмена данными через Unix domain socket"  –2 +/
Сообщение от Аноним (??) on 12-Апр-18, 18:04 
В *strace очевидно много лишнего.

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

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Аноним (??) on 12-Апр-18, 18:07 
Для каких прикладных задач - это вопрос. Вопросительный знак потерялся. :)
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Аноним (??) on 12-Апр-18, 22:51 
Можно как-то так:
$ 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
$

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Аноним (??) on 13-Апр-18, 09:42 
Где тот герой, кто оторвет жопу от дивана, и пересоберет udtrace, и воспроизведет пример из статьи?
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

9. "Трассировка обмена данными через Unix domain socket"  +1 +/
Сообщение от Аноним (??) on 13-Апр-18, 10:24 
>Для каких прикладных задач может быть полезно. nginx не предлагать, Сысоев не одобрит.

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

10. "Трассировка обмена данными через Unix domain socket"  +1 +/
Сообщение от Andrey Mitrofanov on 13-Апр-18, 10:45 
> В *strace очевидно много лишнего.
> Интересней зачем кому-то использовать unix sockets - для общесистемных нужд?

Пошарь на своём локалхостике в выводе -

for mp in /{,var/,run/}; do
    mountpoint -q $mp && find $mp -mount -type s;
done 2>/dev/null
и подумай, зачем _тебе_ это?

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

11. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от izyk (ok) on 13-Апр-18, 13:17 
Можно так:
https://superuser.com/a/576404
если можно.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Аноним (??) on 18-Апр-18, 12:31 
Одобрение спрашивать не нужно, но полезно знать ограничения продукта, который ты используешь.

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

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

13. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Аноним (??) on 18-Апр-18, 12:43 
Годный ответ. Спасибо.
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

14. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Andrey Mitrofanov on 18-Апр-18, 14:25 
> Годный ответ. Спасибо.

Пожалуйста.

Там ещё ',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

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Аноним (??) on 24-Апр-18, 19:17 
Способ с LD_PRELOAD вообще позволяет прикалываться над программами по всякому. Можно завернуть неугодные вызовы, можно туфту возвращать. Ну и просто изучать что программа делает. И логгить, если хочется.

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

16. "Трассировка обмена данными через Unix domain socket"  +/
Сообщение от Andrey Mitrofanov on 25-Апр-18, 06:42 
>Ну и просто изучать что программа делает.

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

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема


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