X11 प्रोटोकॉल के ट्रैफ़िक को कैप्चर करें


15

मैं X11 प्रोटोकॉल के ट्रैफ़िक को कैसे कैप्चर कर सकता हूं ?

मुझे दो मशीनों के बीच और स्थानीय मशीन पर एक X11 सर्वर और एक X11 क्लाइंट के बीच X11 ट्रैफ़िक पर कब्जा करने का एक तरीका खोजने की आवश्यकता है।

जवाबों:


19

आप X11 को TCP पर, या एक यूनिक्स डोमेन सॉकेट पर (या लिनक्स पर) अमूर्त नेमस्पेस में एक यूनिक्स डोमेन सॉकेट पर बात कर सकते हैं ।

जब DISPLAY सेट किया जाता है host:4, तो tcp/host:4क्लाइंट के लिए सर्वर से कनेक्ट करने के लिए TCP का उपयोग होता है। TCP पोर्ट तब 6000 प्लस डिस्प्ले नंबर (उस स्थिति में 6004) है।

उस स्थिति में, आप किसी भी नेटवर्क स्निफर के साथ tcpdumpया wiresharkउस पोर्ट पर टीसीपी ट्रैफ़िक कैप्चर करके ट्रैफ़िक को कैप्चर कर सकते हैं ।

जब $DISPLAYकेवल :4(कम के लिए unix/:4) है, तो ग्राहक एक यूनिक्स डोमेन सॉकेट का उपयोग करते हैं। या तो ABSTRACT नेमस्पेस /tmp/.X11-unix/X4में एक ही रास्ता (आमतौर पर आउटपुट के रूप में दिखाया गया है )।@/tmp/.X11-unix/X4netstat

ट्रैफ़िक को पकड़ना तब मुश्किल है।

यदि आपका एक्स सर्वर टीसीपी पर सुनता है (लेकिन वे अब और नहीं करते हैं), तो इसके बजाय बदलने के DISPLAYलिए सबसे आसान है और लूपबैक इंटरफ़ेस पर पोर्ट 6004 पर नेटवर्क ट्रैफ़िक को कैप्चर करना है।localhost:4:4

यदि ऐसा नहीं होता है, तो आप बीच मेंsocat एक आदमी के रूप में उपयोग कर सकते हैं जो टीसीपी के रूप में कनेक्शन स्वीकार करता है और उन्हें यूनिक्स या अमूर्त के रूप में आगे करता है :

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

फिर आप सेट कर सकते हैं $DISPLAYकरने के लिए localhost:4और इसके बाद के संस्करण के रूप में नेटवर्क यातायात पर कब्जा या बताने socatके साथ यह डंप करने के लिए -x -v

अब, यदि आप बदल नहीं सकते हैं $DISPLAYऔर पहले से चल रहे स्थानीय X एप्लिकेशन के ट्रैफ़िक को कैप्चर करना चाहते हैं, जो कि यूनिक्स डोमेन सॉकेट्स का उपयोग करता है, तो यह वह जगह है जहाँ यह मुश्किल है।

एक दृष्टिकोण का उपयोग करें strace(या आपके सिस्टम पर समतुल्य कमांड अगर लिनक्स नहीं है) सेंड / रिसीव सिस्टम कॉल को ट्रेस करने के लिए हो सकता है जो आपका एप्लिकेशन एक्स सर्वर के साथ संवाद करने के लिए करता है।

इसके लिए 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 -)।

फ़ीडस्टैम्प और बाइट्स निकालने / प्राप्त करने straceऔर उपयोग text2pcapकरने के लिए उपयोग से प्राप्त होने वाले विचार को बदलने के लिए फ़ीड करने से पहले एक pcap(पोर्ट 6000 पर डमी टीसीपी हेडर जोड़कर) में परिवर्तित करने के -T6000,1234लिए wireshark। हमने एक pcap रिकॉर्ड की अधिकतम लंबाई पर 64kiB सीमा से बचने के लिए पैकेट भी विभाजित किए।

के लिए ध्यान दें text2pcap ट्रैफ़िक की दिशा सही होने के संबंध में ठीक से काम करने के , आपको अपेक्षाकृत हाल के संस्करण की आवश्यकता है।


क्या आप यूनिक्स डोमेन सॉकेट्स को डिफॉल्ट करने के पीछे का कारण जानते हैं? क्या टीसीपी के प्रदर्शन या अन्य कमियों पर कोई (महत्वपूर्ण) प्रभाव पड़ता है?
inVader

@inVader, हाँ, यह एक संपूर्ण टीसीपी / आईपी प्रोटोकॉल है, जिसे लागू करने के लिए, कई परतों के माध्यम से जाना जाता है ... मुझे लगता है कि सिस्टम लूपबैक कनेक्शन के लिए शॉर्टकट ले सकता है (जैसे सामान्य भीड़ से बचने के एल्गोरिथ्म को लागू नहीं करना), लेकिन फिर भी, मेरे परीक्षणों में मुझे एक साधारणwix-डोमेन सॉकेट के साथ दोगुना मिलता है जितना कि tcp सॉकेट सोसाइट टेस्ट के साथ।
स्टीफन चेजालस

14

यदि आप मुख्य रूप से X11 प्रोटोकॉल में रुचि रखते हैं, न कि अंतर्निहित TCP / IP और ईथरनेट सामान, और यदि आप क्लाइंट या सर्वर सेटिंग्स को समायोजित करने में सक्षम हैं, तो आप X11 के बीच ट्रैफ़िक को पकड़ने और डिकोड करने के लिए विशेष रूप से डिज़ाइन किए गए टूल का उपयोग कर सकते हैं क्लाइंट और एक X11 सर्वर। wiresharkएक्स 11 डिसेक्टर के विपरीत , ये उपकरण यातायात से भ्रमित होने की संभावना नहीं है, इसके साथ पूरी तरह से जुड़े हुए हैं।

मुख्य एक xscope है जो कुछ यूनिक्स या लिनक्स वितरणों के लिए बाइनरी के रूप में उपलब्ध नहीं होने के बावजूद आसानी से बनाया जा सकता है स्रोत

वैकल्पिक रूप से, xtruss और भी हैं xtrace लेकिन मुझे उनके साथ कोई अनुभव नहीं है।

ये सभी उपकरण एक वास्तविक X11 सर्वर से कनेक्शन रिले करने के लिए रिवर्स-प्रॉक्सि जैसे कार्य करते हैं। क्लाइंट केवल प्रॉक्सी से कनेक्ट करने के लिए एक अलग प्रदर्शन चर (या -डिसप्ले तर्क) का उपयोग करते हैं।

उदाहरण के लिए:

$ 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) पर सुनने के लिए कॉन्फ़िगर कर सकते हैं।


मैंने xscope को संकलित करने की कोशिश की ... "कोई पैकेज 'xproto' नहीं मिला"। pls क्या आप यहाँ पहले पैकेट (12 बाइट्स) का डंप लिख सकते हैं?
मैसिमो

@ मासिमो क्या आपने लापता पैकेज स्थापित किया है?
जूलियाग्रे

मैं Amazon पर एक linux istance का उपयोग कर रहा हूं, और yum को xproto का पता नहीं है। Pls आप पहले पैकेट के डंप पोस्ट कर सकते हैं? मुझे केवल यही चाहिए, thks।
मैसिमो


1
बस xtrace की कोशिश की - पुष्टि कर सकते हैं कि यह भी ठीक काम करता है; इसका आउटपुट अधिक कॉम्पैक्ट है, प्रति संदेश एक पंक्ति के साथ - इसलिए आसानी से संक्षिप्त भी। जैसे के साथ भागो। xtrace -D:1 -d:0 -k। (या x11trace, जैसा कि निष्पादन योग्य का नाम कुछ
विकृतियों

4

X11 अपने परिवहन प्रोटोकॉल के रूप में टीसीपी का उपयोग करता है। X11 के लिए टीसीपी पोर्ट रेंज आमतौर पर 6000-6063 है लेकिन सबसे अधिक संभावना है कि आप टीसीपी पोर्ट 6000 का उपयोग करते हुए देखेंगे।

इसलिए, आपको इस पोर्ट रेंज और मेजबानों के लिए फ़िल्टर करके ट्रैफ़िक का निरीक्षण करने के लिए अपनी पसंद के किसी भी नेटवर्क मॉनिटर का उपयोग करने में सक्षम होना चाहिए। मुझे यह भी पता है कि wireshark, उदाहरण के लिए, पहले से ही एक फ़िल्टर प्रीसेट हैx11 आपके द्वारा ट्रैफ़िक की निगरानी करने के लिए है।

उदाहरण के लिए, स्थानीय मशीन पर सभी X11 ट्रैफ़िक की निगरानी करने के लिए (यदि TCP का उपयोग कर रहे हैं; @ Stéphane Chazelas के उत्तर को देखें) निम्न फ़िल्टर का उपयोग करें:

x11 and ip.src=127.0.0.1 and ip.dst=127.0.0.1

स्थानीय क्लाइंट-सर्वर संदेश यूनिक्स डोमेन सॉकेट के माध्यम से पारित किए जाते हैं lsof -U | grep '^X'
गोल्डीलॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.