এক্স 11 প্রোটোকলের ট্র্যাফিক ক্যাপচার করুন


15

আমি কীভাবে এক্স 11 প্রোটোকলের ট্র্যাফিক ক্যাপচার করতে পারি ?

দুটি মেশিনের মধ্যে এবং স্থানীয় মেশিনে একটি এক্স 11 সার্ভার এবং এক্স 11 ক্লায়েন্টের মধ্যেও এক্স 11 ট্র্যাফিক ক্যাপচার করার জন্য আমার একটি উপায় খুঁজে পাওয়া উচিত।

উত্তর:


19

আপনি টিসিপি, বা ইউনিক্স ডোমেন সকেট বা ইউনিক্স ডোমেন সকেটে অ্যাবস্ট্রাক্ট নেমস্পেসের মাধ্যমে এক্স 11 নিয়ে কথা বলতে পারেন ।

যখন DISPLAY সেট করা থাকে host:4, এর জন্য সংক্ষিপ্ত tcp/host:4, ক্লায়েন্টরা সার্ভারের সাথে সংযোগ করতে টিসিপি ব্যবহার করে। টিসিপি পোর্টটি তখন 6000 প্লাস প্রদর্শন সংখ্যা (সেই ক্ষেত্রে 6004)।

সেক্ষেত্রে আপনি যে কোনও নেটওয়ার্ক স্নিফার সহ ট্র্যাফিক ক্যাপচার করতে পারেন tcpdumpবা wiresharkসেই বন্দরে টিসিপি ট্র্যাফিক ক্যাপচারের মাধ্যমে করতে পারেন ।

যখন $DISPLAYকেবল :4(সংক্ষিপ্ত unix/:4) হয়, তখন ক্লায়েন্টরা একটি ইউনিক্স ডোমেন সকেট ব্যবহার করে। উভয় ক্ষেত্রেই /tmp/.X11-unix/X4বা একই পথ বিমূর্ত নামস্থান (সাধারণত হিসাবে দেখানো @/tmp/.X11-unix/X4মধ্যে netstatআউটপুট)।

ট্র্যাফিক ক্যাপচার করা তখন আরও জটিল।

যদি আপনার এক্স সার্ভারটি টিসিপি শুনে (তবে তারা আজকাল আর তেমন প্রবণতা রাখে না) তবে লুপব্যাক ইন্টারফেসে 6004 পোর্টে নেটওয়ার্ক ট্র্যাফিকের পরিবর্তে পরিবর্তিত DISPLAYহয়ে ক্যাপচার করা সহজ ।localhost:4:4

যদি এটি না হয় তবে আপনি মাঝখানে এমন socatএকজন মানুষ হিসাবে ব্যবহার করতে পারেন যিনি সংযোগগুলিকে টিসিপি হিসাবে গ্রহণ করেন এবং তাদের ইউনিক্স বা বিমূর্ত হিসাবে ফরোয়ার্ড করতে পারেন :

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

তারপরে আপনি উপরের মতো নেটওয়ার্ক ট্র্যাফিক সেট $DISPLAYকরতে localhost:4এবং ক্যাপচার করতে পারেন বা socatএটি ডাম্প করতে বলতে পারেন -x -v

এখন, আপনি যদি পরিবর্তন করতে না $DISPLAYপারেন এবং ইউনিক্স ডোমেন সকেট ব্যবহার করে এমন একটি ইতিমধ্যে চলমান স্থানীয় এক্স অ্যাপ্লিকেশনটির ট্র্যাফিক ক্যাপচার করতে চান তবে এটিই জটিল।

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 -)

আউটপুট থেকে পাঠানো টাইমস্ট্যাম্প এবং বাইটগুলি উত্তোলন করা এবং তা খাওয়ানোর আগে এটিকে (6000 বন্দরটিতে ডামি টিসিপি হেডার যুক্ত করে ) রূপান্তর করতে straceব্যবহার text2pcapকরার ধারণা । আমরা পিসিপি রেকর্ডের সর্বোচ্চ দৈর্ঘ্যে 64kiB সীমা এড়াতে প্যাকেটগুলিও বিভক্ত করি।pcap-T6000,1234wireshark

নোট করুন যে text2pcapট্র্যাফিকের দিকনির্দেশটি সঠিকভাবে পাওয়ার জন্য সঠিকভাবে কাজ করার জন্য আপনার ওয়্যারশার্কের তুলনামূলক সাম্প্রতিক সংস্করণ প্রয়োজন।


আপনি কি ইউনিক্স ডোমেন সকেটে ডিফল্ট হওয়ার পিছনে কারণটি জানেন? পারফরম্যান্স বা অন্যান্য ত্রুটিগুলি নিয়ে টিসিপি'র কোনও (উল্লেখযোগ্য) প্রভাব আছে?
inVader

@ ইনভ্যাডার, আচ্ছা হ্যাঁ, এটি বেশ কয়েকটি স্তর পেরিয়ে বাস্তবায়ন করার জন্য পুরো টিসিপি / আইপি প্রোটোকল ... আমি মনে করি লুপব্যাক সংযোগের জন্য সিস্টেম শর্টকাট নিতে পারে (সাধারণ কনজেশন এড়ানো এ্যালগোরিদম বাস্তবায়নের মতো নয়) তবে এখনও আমার পরীক্ষায় আমি টিসিপি সকেট সকেট পরীক্ষার চেয়ে সাধারণ ইউনিক্স-ডোমেন সকেটের দ্বিগুণ থ্রুপুট পাই।
স্টাফেন চেজেলাস

14

আপনি যদি মূলত এক্স 11 প্রোটোকলটিতে আগ্রহী হন এবং অন্তর্নিহিত টিসিপি / আইপি এবং ইথারনেট স্টাফ না করে এবং আপনি ক্লায়েন্ট বা সার্ভার সেটিংস সামঞ্জস্য করতে সক্ষম হন তবে আপনি এক্স 11 এর মধ্যে ট্র্যাফিক ক্যাপচার এবং ডিকোড করার জন্য বিশেষভাবে পরিকল্পিত একটি সরঞ্জাম ব্যবহার করতে পারেন ক্লায়েন্ট এবং একটি এক্স 11 সার্ভার। wiresharkএক্স 11 ডিসেক্টর থেকে ভিন্ন , এই সরঞ্জামগুলি পুরোপুরি এর সাথে জড়িত থাকার কারণে ট্র্যাফিক দ্বারা বিভ্রান্ত হওয়ার সম্ভাবনা কম।

প্রধানটি হ'ল এক্সস্কোপ যা কিছু ইউনিক্স বা লিনাক্স বিতরণের জন্য বাইনারি হিসাবে উপস্থিত না হওয়া সত্ত্বেও উত্স থেকে সহজেই তৈরি করা যায় ।

বিকল্পভাবে, এছাড়াও xtruss এবং xtrace আছে তবে তাদের সাথে আমার কোনও অভিজ্ঞতা নেই।

এই সমস্ত সরঞ্জাম রিভার্স-প্রক্সিগুলির সাথে বাস্তব এক্স 11 সার্ভারে সংযোগ রিলে করার মতো কাজ করে। প্রক্সিটির সাথে সংযোগ স্থাপন করতে ক্লায়েন্টরা কেবল একটি পৃথক 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) শোনার জন্য কনফিগার করতে পারবেন।


আমি এক্সস্কোপ সংকলনের চেষ্টা করেছি ... "কোনও প্যাকেজ 'এক্সপ্রোটো' পাওয়া যায় নি"। আপনি কি এখানে প্রথম প্যাকেটের ডাম্প (12 বাইট) লিখতে পারেন?
ম্যাসিমো

@ মাসিমো আপনি কি অনুপস্থিত প্যাকেজটি ইনস্টল করেছেন?
jlliagre

আমি অ্যামাজনে একটি লিনাক্স আইটেম ব্যবহার করছি, এবং আপনি এক্সপ্রোটো জানেন না। আপনি কি প্রথম প্যাকেটের ডাম্প পোস্ট করতে পারবেন? আমার কেবল এটি দরকার ks
ম্যাসিমো

সাধারণ প্রথম প্যাকেটটি বিকেস করুন
ম্যাসিমো

1
সবেমাত্র চেষ্টা করা xtrace - এটিও ঠিক কাজ করে তা নিশ্চিত করতে পারে; এর আউটপুট আরও কমপ্যাক্ট, প্রতি বার্তা প্রতি এক লাইন - তাই সহজেই গ্রেপযোগ্য। যেমন চালানো। xtrace -D:1 -d:0 -k। (বা এক্স 11 ট্রেস, যেমন এক্সিকিউটেবলের নাম কিছু ডিস্ট্রোতে রাখা হয়েছে)
আলেক্সি তোড়হামো

4

এক্স 11 টিসিপিটিকে তার পরিবহন প্রোটোকল হিসাবে ব্যবহার করে। টিসিপি পোর্টের পরিসীমাটি এক্স 11 এর জন্য সাধারণত 6000-6063 হয় তবে সম্ভবত আপনি দেখতে পাবেন টিসিপি পোর্ট 6000 ব্যবহৃত হচ্ছে।

সুতরাং, আপনার এই বন্দর পরিসীমা এবং প্রশ্নে থাকা হোস্টের জন্য ফিল্টারিং করে ট্র্যাফিক পর্যবেক্ষণ করতে আপনার পছন্দসই কোনও নেটওয়ার্ক মনিটর ব্যবহার করতে সক্ষম হওয়া উচিত। আমি আরও জানি, wiresharkউদাহরণস্বরূপ, ইতিমধ্যে x11আপনার আগ্রহী ট্র্যাফিক নিরীক্ষণের জন্য একটি ফিল্টার প্রিসেট রয়েছে ।

উদাহরণস্বরূপ, স্থানীয় মেশিনে সমস্ত এক্স 11 ট্র্যাফিক নিরীক্ষণের জন্য (যদি টিসিপি ব্যবহার করে; @ স্টাফেন চ্যাজেলাসের উত্তরটি দেখুন) নীচের ফিল্টারটি ব্যবহার করুন:

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

স্থানীয় ক্লায়েন্ট-সার্ভার বার্তাগুলি একটি ইউনিক্স ডোমেন সকেটের মাধ্যমে পাস করা হয় lsof -U | grep '^X'
স্বর্ণিলোক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.