স্নিফ ইউনিক্স ডোমেন সকেট


9

আমি জানি যে কিছু প্রক্রিয়া একটি নির্দিষ্ট ইউনিক্স ডোমেন সকেটে লিখছে ( /var/run/asterisk/asterisk.ctl), তবে আমি প্রেরকের পিডটি জানি না। সকেটে কে লিখছে তা আমি কীভাবে জানতে পারি? আমি চেষ্টা করেছি:

sudo lsof /var/run/asterisk/asterisk.ctl

তবে এটি কেবল সকেটের মালিককে তালিকাবদ্ধ করে। আমি এই সকেটে কে লিখছেন / পড়ছেন তা জানতে চাই এবং আমি ডেটা স্নিগ্ধ করতেও চাই। এটা কি সম্ভব?

উত্তর:


4

সংক্ষিপ্ত উত্তরগুলি হ'ল এবং সহজেই নয়।

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

স্নিগ্ধ প্রশ্নটি আরও কিছু আকর্ষণীয় তবে হতাশার চেয়ে কম নয়। "সহজেই নয়" বলতে আমি যা বোঝাতে চেয়েছি তা হ'ল তথ্যটি গোপন করার এবং আঁকড়ে ধরার কোনও হুকের অস্তিত্ব নেই। নিকটতম অ্যানালগ টিসিপিডম্প বা ওয়্যারশার্ক ব্যবহার করছে, উভয়ই লাইবপ্যাক্যাপ ব্যবহার করে প্রকৃতপক্ষে ভারী উত্তোলন করতে। নেটওয়ার্ক (এএএনপিএনইটিইটি) এবং ইউএনআইএক্স ডোমেন (AF_UNIX) উভয়ই socket()ফাংশন কল ব্যবহার করে তৈরি করা হয়েছিল , উভয়ই connect()সংযোগ করতে, ব্যবহার উভয়ই ব্যবহার করতে read()এবং write()প্রক্রিয়া করার জন্য ব্যবহার করে, এগুলি বিভিন্ন কার্নেল সাব-সিস্টেম দ্বারা পরিচালিত হয়। এটির দুর্ভাগ্যজনক পার্শ্ব প্রতিক্রিয়া রয়েছে যে ইউআইআইএক্স ডোমেন সকেটের সাথে কাজ করার জন্য libpcap ডিজাইন করা হয়নি।

সমস্যার কিছুটা কম ম্লান দিক রয়েছে। ম্যান পেজটির জন্য একবার দেখুন recv(2)। এটি নিম্ন স্তরের সিস্টেম কল যা read()ব্যবহার করে। একটি পতাকা জন্য বিদ্যমান recv()নামক MSG_PEEK। এটি আপনাকে ইউনিক্স ডোমেন সকেটের মধ্য দিয়ে যাওয়া ট্র্যাফিককে স্নিগ্ধ করার অনুমতি দেবে। সুতরাং এটি উজ্জ্বল দিক, অন্ধকার দিকটি আমার জ্ঞানের সেরা দিক থেকে এটি করার জন্য ডিজাইন করা কোনও বর্তমান অ্যাপ্লিকেশন উপস্থিত নেই। সুতরাং আপনি কিছু উন্নয়নের প্রচেষ্টা তাকান।

আমি সত্যিই ইচ্ছুক সেখানে ছিল আপনার প্রশ্নের উভয় অংশে F'YEAH একটি চমৎকার সহজ উত্তর।


11

হ্যাঁ, আপনি এটা করতে পারেন। আপনার যা দরকার তা হ'ল সিস্টেমট্যাপ।

সিস্টেমট্যাপ স্ক্রিপ্টগুলির একটি উদাহরণ বিবেচনা করুন যা নির্দিষ্ট ইনডটি পড়তে বা লিখতে পারে এমন কোনও প্রোগ্রামের পিআইডি এবং প্রসেসের নাম প্রিন্ট করবে (এবং আপনার ইউনিক্স ডোমেন সকেটটি কেবল এটিই।

আপনি পড়া / লিখিত আসল তথ্য মুদ্রণের জন্য এই স্ক্রিপ্টটি তুচ্ছভাবে সংশোধন করতে পারেন; আমি পাঠকের অনুশীলন হিসাবে এটি করা ছেড়ে দেব।


4

আমি জানি এটি মূল প্রশ্নের উত্তর দিচ্ছে না, তবে আমি এখানেই এসে শেষ করেছি, সকেটে কেবল স্নিগিং যোগাযোগের সন্ধান করছি। আমি আমার মতো অন্যদের জন্য পোস্ট করার সিদ্ধান্ত নিয়েছি। আমি এটি কীভাবে করেছি তা এখানে:

su> সুডো সোস্যাট -t100 -x -v ইউনিক্স-তালিকা: /var/run/php5-fpm.sock.socat,mode=777,reuseaddr,fork ইউনিক্স-সংযোগ: /var/run/php5-fpm.sock

আপনি -x অপসারণ করতে পারেন এবং এসিআই যোগাযোগের জন্য -v ছেড়ে যেতে পারেন। আশা করি যে কাউকে সাহায্য করবে।


পুরোপুরি কাজ করে
JSmyth

-1

সাকট -t100 ইউনিক্স-তালিকা: /tmp/file.sock,mode=777, রিউস্যাড্ডার, ফোর্স STDOUT

আউটপুটটির সদৃশতা নেই, চক্রীয় আউটপুট নেই। পূর্ববর্তী মন্তব্যের ত্রুটি ".sock.socat"


2
যদিও এটি একটি কার্যকর আদেশ হতে পারে, দয়া করে কিছু ব্যাখ্যা / ব্যাখ্যা যুক্ত করুন (এবং এটি কীভাবে এই উত্তর থেকে আলাদা ?)
এইচবি ব্রাইজন

আমি দুঃখিত. আউটপুটটির সদৃশতা নেই, চক্রীয় আউটপুট নেই। পূর্ববর্তী মন্তব্যের ত্রুটি ".sock.socat"
srvf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.