Yanıtlar:
X11'i TCP üzerinden veya soyut ad alanındaki Unix etki alanı soketindeki bir Unix etki alanı soketinden veya (Linux'ta) konuşabilirsiniz .
DISPLAY olarak host:4
kısaltılmışsa tcp/host:4
, istemciler sunucuya bağlanmak için TCP kullanır. TCP portu 6000 artı ekran numarasıdır (bu durumda 6004).
Bu durumda, herhangi bir ağ dinleyicisi ile tcpdump
veya wireshark
o bağlantı noktasındaki TCP trafiğini yakalayarak trafiği yakalayabilirsiniz.
Ne zaman $DISPLAY
sadece :4
(kısaca unix/:4
), sonra istemcileri Unix alan soketi kullanın. Her iki /tmp/.X11-unix/X4
ya da aynı yol ÖZET ad (genellikle olarak gösterilen @/tmp/.X11-unix/X4
de netstat
çıkış).
Trafiği yakalamak daha karmaşıktır.
X sunucunuz TCP'yi dinliyorsa (ancak günümüzde artık böyle bir eğilim göstermiyorsa), en kolayı geri döngü arabirimindeki bağlantı noktası 6004 yerine ağ trafiğine DISPLAY
geçmek ve bu trafiği yakalamaktır.localhost:4
:4
Aksi halde, bağlantıları TCP olarak kabul eden ve onları unix veya soyut olarak ileten socat
bir adam olarak kullanabilirsiniz :
socat tcp-listen:6004,reuseaddr,fork unix:/tmp/.X11-unix/X4
Daha sonra ayarlayabilirsiniz $DISPLAY
için localhost:4
yukarıdaki gibi ağ trafiği yakalamak veya anlatmak ve socat
onu dökümü -x -v
.
Şimdi, değiştiremiyor $DISPLAY
ve zaten çalışan bir yerel X uygulamasının unix etki alanı soketlerini kullanan trafiğini yakalamak istiyorsanız, işte burada zorlaşıyor.
Bir yaklaşım strace
, uygulamanızın X sunucusuyla iletişim kurmak için yaptığı gönderme / alma sistem çağrılarını izlemek için (veya Linux değilse sisteminizdeki eşdeğer komutu) kullanmak olabilir .
İşte için xterm
, ben öyle gözlemlemek writev()
, recvfrom()
ve recvmsg()
sistem çağrıları bunun için dosya tanımlayıcı 3. Böylece yapabilirim:
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 -
(veya tshark -Vi -
).
Fikir, çıkışından gönderilen / alınan zaman damgasını ve baytları ayıklamak ve bunu beslemeden önce ( bağlantı noktası 6000'e kukla TCP başlıkları ekleyerek) dönüştürmek için strace
kullanmaktır . Ayrıca, bir pcap kaydının maksimum uzunluğunda 64kiB sınırını önlemek için paketleri böldük.text2pcap
pcap
-T6000,1234
wireshark
text2pcap
Trafik yönünün doğru şekilde yapılması için düzgün çalışmak için , nispeten yeni bir wireshark sürümüne ihtiyacınız olduğunu unutmayın.
Temelde temel TCP / IP ve ethernet öğeleriyle değil X11 protokolüyle ilgileniyorsanız ve istemciyi veya sunucu ayarlarını ayarlayabiliyorsanız, X11 arasındaki trafiği yakalamak ve kodunu çözmek için özel olarak tasarlanmış bir araç kullanabilirsiniz. istemcisi ve bir X11 sunucusu. wireshark
X11 disektörden farklı olarak , bu araçların trafikle karıştırılması ve bununla tamamen karışması olası değildir.
Ana biridir xScope bazı Unix veya Linux dağıtımları için bir ikili olarak mevcut olmama rağmen kolaylıkla inşa edilebilir, kaynağı .
Alternatif olarak, xtruss ve xtrace de var ama onlarla hiçbir deneyimim yok.
Tüm bu araçlar, bağlantıları gerçek bir X11 sunucusuna aktaran ters proxy'ler gibi davranır. İstemciler, proxy'ye bağlanmak için yalnızca farklı bir DISPLAY değişkeni (veya -display argümanı) kullanır.
Örneğin:
$ 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
Not: Herhangi bir nedenden dolayı X11 istemci ayarlarını (ekran) değiştiremiyorsanız, sunucuyu farklı bir bağlantı noktasını (genellikle 6001'e karşı 6000) xscope
dinleyecek şekilde yapılandırabilir ve ardından orijinal bağlantı noktasını (6000) dinleyecek şekilde yapılandırabilirsiniz .
xtrace -D:1 -d:0 -k
. (Veya yürütülebilir dosya bazı dağıtımlarda adlandırıldığı için
X11, aktarım protokolü olarak TCP kullanır. X11 için TCP bağlantı noktası aralığı genellikle 6000-6063'tür, ancak büyük olasılıkla 6000 numaralı TCP bağlantı noktasının kullanıldığını göreceksiniz.
Bu nedenle, bu bağlantı noktası aralığı ve söz konusu ana bilgisayarlar için filtreleme yaparak trafiği gözlemlemek için istediğiniz herhangi bir ağ izleyicisini kullanabilmeniz gerekir. Ayrıca, wireshark
örneğin, zaten x11
ilgilendiğiniz trafiği izlemek için bir filtre hazır ayarı içerdiğini de biliyorum .
Örneğin, yerel makinedeki tüm X11 trafiğini izlemek için (TCP kullanıyorsanız; @ Stéphane Chazelas'ın cevabına bakın) aşağıdaki filtreyi kullanın:
x11 and ip.src=127.0.0.1 and ip.dst=127.0.0.1
lsof -U | grep '^X'
.