मैं डेबियन स्क्वीज़ पर शेल के माध्यम से यूनिक्स डोमेन सॉकेट के साथ कैसे संवाद कर सकता हूं?


99

मैं एक डेबियन निचोड़ वेब सर्वर चला रहा हूं। मैंने इस पर मेमेकैच्ड इंस्टॉल किया है, और यूनिक्स डोमेन सॉकेट (एट /tmp/memcached.sock) पर सुनने के लिए मेमेकैच्ड कॉन्फ़िगर किया है , क्योंकि इसमें केवल वेबसाइट से संदेश प्राप्त करने की आवश्यकता होती है, जो एक ही सर्वर पर रहता है।

ऐसा लगता है कि यह ठीक काम कर रहा है, लेकिन मैं शेल के माध्यम से ज्ञापन के साथ संवाद करना चाहूंगा, यह जांचने के लिए कि यह क्या कर रहा है मुझे लगता है कि यह कर रहा है।

एक सामान्य ASCII प्रोटोकॉल के माध्यम से संदेश स्वीकार करता है (यदि मैं सही ढंग से समझता हूं)। अगर यह टीसीपी / आईपी पर सुन रहा था, तो मैं इसके माध्यम से संदेश भेज सकता था nc:

$ echo "stats settings" | nc localhost 11211

लेकिन मैं यह पता नहीं लगा सकता कि उस पाठ को डोमेन सॉकेट में कैसे भेजा जाए।

मेरे लैपटॉप पर (जो ओएस एक्स लायन चलाता है), दोनों ncऔर डोमेन सॉकेट का उपयोग करने के लिए telnet( -Uऔर -uक्रमशः) विकल्प हैं। हालाँकि, मेरे डेबियन स्क्वीज़ वेब सर्वर पर, ये विकल्प मौजूद नहीं हैं।

जवाबों:


72

के साथ netcat-openbsd, एक -Uविकल्प है। यदि आपके पास यह नहीं है, तो आपने संभवतः netcat-traditionalइसके बजाय स्थापित किया है; मैं स्विच करने का सुझाव दूंगा।

उदाहरण आदेश: nc -U /var/run/socket


तो netcat पर एक नई फ़ाइल बनाएगा /var/run/socket? क्या किसी मौजूदा फ़ाइल का पुन: उपयोग करने का कोई तरीका है?
अलेक्जेंडर मिल्स

1
@AlexanderMills यदि आप इसे सुनने के लिए कहते हैं ( -l), तो यह फ़ाइल बना देगा। अन्यथा, यह अपेक्षा करता है कि सॉकेट पहले से मौजूद है (और पहले से ही इस पर कुछ सुनना है)। तो जवाब में उदाहरण कमांड फ़ाइल नहीं बनाता है।
derobert

94

साथ socat( 'एक दो डेटा चैनलों के बीच द्विदिश डेटा रिले') आप इस तरह यूनिक्स डोमेन सॉकेट से कनेक्ट कर सकते हैं:

$ socat - UNIX-CONNECT:/tmp/memcached.sock

19

netcat-openbsdUNIX- डोमेन सॉकेट से कनेक्ट करने का समर्थन करता है। इसके उपयोग से आप UNIX- डोमेन स्ट्रीम सॉकेट या UNIX- डोमेन डेटाग्राम सॉकेट से कनेक्ट हो सकते हैं , और इसलिए आपको सॉकेट के प्रकार को netcat को बताना होगा।

उदाहरण के लिए, /dev/logलिनक्स में फ़ाइल एक यूनिक्स-डोमेन डेटाग्राम सॉकेट सॉकेट है, इस प्रकार nc -U /dev/log काम नहीं करेगा । इसके बजाय उपयोग करें nc -uU /dev/log। -U के साथ -U का उपयोग करना नेटकैट को बताता है कि यह एक यूनिक्स-डोमेन डेटाग्राम सॉकेट है।

nc -U /tmp/socket  #Connect to UNIX-domain stream socket
nc -uU /tmp/socket #Connect to UNIX-domain datagram socket


इसी तरह, उपयोग करते समय socat, UNIX-CLIENT विकल्प का उपयोग करें। इस विकल्प का उपयोग करके आप UNIX- डोमेन स्ट्रीम और UNIX- डोमेन डेटाग्राम सॉकेट्स दोनों से कनेक्ट कर सकते हैं । इसके मैन पेज (मैन सोसाइटी) से , " यह पहली बार कनेक्ट करने की कोशिश करता है और, अगर यह विफल हो जाता है, तो मान लेता है कि यह एक डेटाग्राम सॉकेट है, इस प्रकार दोनों प्रकार का समर्थन करता है "।

socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type

1
यह आश्चर्यजनक रूप से लचीला, अच्छी तरह से पैरामीरिजेबल टूल है।
14:25 बजे user259412

15

आप सोबत का उपयोग डेबियन पर कर सकते हैं । इसे स्थापित करने के लिए:

# apt-get install socat

यह बहुत अच्छा लग रहा है। मैं socatअपने सर्वर पर स्थापित नहीं हुआ , लेकिन यह निश्चित रूप से उपलब्ध है: package.debian.org/squeeze/socat
पॉल डी। वेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.