Получите трафик протокола X11

Сделайте копирование как целевого пользователя. Это автоматически сделает конечные файлы. Удостоверьтесь, что исходные файлы читаемы миром (или по крайней мере читаемы всеми целевыми пользователями). Выполненный chmod впоследствии, если Вы не хотите, чтобы скопированные файлы были читаемы миром.

getent passwd |
awk -F : '$1 ~ /^u12/ {print $1}' |
while IFS= read -r user; do
  su "$user" -c 'cp -Rp /original/location/somefiles ~/'
done
15
23.03.2015, 22:14
3 ответа

X11 использует TCP в качестве транспортного протокола. Диапазон TCP-портов для X11 обычно составляет 6000-6063, но, скорее всего, вы увидите, что используется TCP-порт 6000.

Таким образом, вы должны иметь возможность использовать любой сетевой монитор по вашему выбору для наблюдения за трафиком, фильтруя для этого диапазона портов и соответствующих хостов. Я также знаю, что, например, wireshark уже содержит набор фильтров x11 для наблюдения за трафиком, который вас интересует.

Например, для мониторинга всего трафика X11 на локальной машине (при использовании TCP; обратитесь к ответу @Stéphane Chazelas) используйте следующий фильтр:

x11 and ip.src=127.0.0.1 and ip.dst=127.0.0.1
4
27.01.2020, 19:49

Вы можете говорить с X11 по TCP, или через доменное гнездо Unix, или (в Linux) через доменное гнездо Unix в пространстве имен абстрактного.

Когда DISPLAY имеет значение host:4, сокращенное от tcp/host:4, клиенты используют TCP для соединения с сервером. TCP-порт затем 6000 плюс номер дисплея (в данном случае 6004).

В этом случае вы можете перехватить трафик с помощью любого сетевого анализатора, например, tcpdump или wireshark, перехватив TCP-трафик на этом порту.

Если $DISPLAY только :4 (сокращение от unix/:4), то клиенты используют гнездо домена unix. Либо /tmp/.X11-unix/X4, либо тот же самый путь в пространстве имен ABSTRACT (обычно отображается как @/tmp/.X11-unix/X4 в выводе netstat).

Захват трафика в этом случае более сложен.

Если ваш X-сервер слушает по TCP (но в настоящее время уже не слушает), то проще всего изменить DISPLAY на localhost:4 вместо :4 и перехватить сетевой трафик на порту 6004 на интерфейсе обратной петли.

Если этого не происходит, вы можете использовать socat в качестве человека посередине , который принимает соединения как TCP и перенаправляет их в качестве unix или абстрактного:

socat tcp-listen:6004,reuseaddr,fork unix:/tmp/.X11-unix/X4

Затем можно установить $DISPLAY на localhost:4 и перехватить сетевой трафик, как указано выше, или сказать socat, чтобы он был сброшен с помощью -x -v.

Теперь, если вы не можете изменить $DISPLAY и хотите перехватить трафик уже запущенного локального приложения X, использующего unix-доменные сокеты, то это становится сложным.

Одним из подходов может быть использование strace (или эквивалентной команды в вашей системе, если не Linux) для отслеживания системных вызовов, которые ваше приложение делает для связи с сервером X.

Здесь для xterm я наблюдаю, как он делает writev(), recvfrom() и recvmsg() системные вызовы дескриптора файлов 3 для этого. Так что я могу сделать:

strace -qqxxttts9999999 -e writev,recvmsg,recvfrom -p "$xterm_pid" 2>&1 |
  perl -lne '
    if (($t,$f,$p) = /^([\d.]+) (writev|recvmsg|recvfrom)\(3, (.*)/) {
      @p = ($p =~ /\\x(..)/g);
      $dir = $f eq "writev" ? "O" : "I";
      while (@p) {print "$dir $t 0000 " . join(" ", splice @p,0,64000)}
    }' | text2pcap -T6000,1234 -Dqt %s. - - | wireshark -ki -

(или tshark -Vi -).

Идея состоит в том, чтобы извлечь метку времени и байты, отправленные/полученные из вывода строки и использовать text2pcap, чтобы преобразовать их в pcap (добавив фиктивные TCP-заголовки на порту 6000 с -T6000,1234) перед подачей на wireshark). Мы также разделяем пакеты, чтобы избежать лимита 64kiB на максимальную длину записи пакетов.

Обратите внимание, что для правильной работы text2pcap с точки зрения правильного направления движения, вам нужна относительно недавняя версия wireshark.

19
27.01.2020, 19:49

Если вас в основном интересует протокол X11, а не его лежащие в основе TCP / IP и Ethernet, и если вы можете настроить параметры клиента или сервера, вы можете использовать инструмент, специально разработанный для захвата и декодирования трафика между клиентом X11 и сервером X11. В отличие от диссектора Wireshark X11, эти инструменты вряд ли могут быть сбиты с толку трафиком, поскольку полностью вовлечены в него.

Основным из них является xscope , который, несмотря на то, что он не доступен в виде двоичного файла для некоторых дистрибутивов Unix или Linux, может быть легко собран из исходного кода .

Кроме того, существуют также xtruss и xtrace , но у меня нет опыта работы с ними.

Все эти инструменты действуют как обратные прокси-серверы, ретранслируя соединения с реальным сервером X11. Клиенты просто используют другую переменную DISPLAY (или аргумент -display) для подключения к прокси.

например:

$ wget http://xorg.freedesktop.org/archive/individual/app/xscope-1.4.1.tar.gz
..
$ tar xzf xscope-1.4.1.tar.gz
..
$ cd xscope-1.4.1
$ ./configure && ./make
..
$ ./xscope & sleep 5; xclock -display :1
...
 0.00: Client -->   12 bytes
              byte-order: LSB first
           major-version: 000b
           minor-version: 0000
 0.00:                   692 bytes <-- X11 Server
                    protocol-major-version: 000b
                    protocol-minor-version: 0000
                          release-number: 00adfef8
                        resource-id-base: 04c00000
                        resource-id-mask: 001fffff
                      motion-buffer-size: 00000100
                        image-byte-order: LSB first
                    bitmap-format-bit-order: LSB first
                    bitmap-format-scanline-unit: 20
                    bitmap-format-scanline-pad: 20
                             min-keycode: 8 (^H)
                             max-keycode: 255 (\377)
                                  vendor: "The X.Org Foundation"
                          pixmap-formats: (7)
                                   roots: (1)
 0.00: Client -->   20 bytes
     ............REQUEST: QueryExtension
                    name: "BIG-REQUESTS"
 0.00:                    32 bytes <-- X11 Server
                     ..............REPLY: QueryExtension
                                 present: True
                            major-opcode: 85

Примечание. Если по какой-либо причине вы не можете изменить настройки клиентов X11 (отображение), вы можете перенастроить сервер для прослушивания другого порта (обычно 6001 против 6000), а затем настроить xscope для прослушивания исходного порта (6000).

14
27.01.2020, 19:49

Теги

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