ฉันจะสื่อสารกับซ็อกเก็ตโดเมน Unix ผ่านเชลล์บน Debian Squeeze ได้อย่างไร


99

ฉันใช้งานเว็บเซิร์ฟเวอร์ Debian Squeeze ฉันได้ติดตั้ง memcached ในนั้นและกำหนดค่า memcached เพื่อฟังในซ็อกเก็ตโดเมน Unix (ที่/tmp/memcached.sock) เนื่องจากต้องการเพียงรับข้อความจากเว็บไซต์ซึ่งอยู่บนเซิร์ฟเวอร์เดียวกัน

ดูเหมือนว่าจะทำงานได้ดี แต่ฉันต้องการสื่อสารกับ memcached ผ่านเชลล์เพื่อตรวจสอบว่ามันทำในสิ่งที่ฉันคิดว่าทำอยู่

memcached ยอมรับข้อความผ่านโปรโตคอล ASCII แบบง่าย (ถ้าฉันเข้าใจถูกต้อง) หากกำลังฟังบน TCP / IP ฉันสามารถส่งข้อความถึงมันผ่านเช่นnc:

$ echo "stats settings" | nc localhost 11211

แต่ฉันไม่สามารถหาวิธีส่งข้อความนั้นไปยังซ็อกเก็ตโดเมนแทนได้

บนแล็ปท็อปของฉัน (ซึ่งใช้ OS X Lion) ทั้งคู่ncและtelnetมีตัวเลือก ( -Uและ-uตามลำดับ) เพื่อใช้ซ็อกเก็ตโดเมน อย่างไรก็ตามบนเว็บเซิร์ฟเวอร์ Debian Squeeze ของฉันตัวเลือกเหล่านี้จะไม่ปรากฏ

คำตอบ:


72

ด้วยnetcat-openbsdมี-Uตัวเลือกคือ หากคุณไม่มีคุณอาจnetcat-traditionalติดตั้งแทน ฉันขอแนะนำให้เปลี่ยน

คำสั่งตัวอย่าง: nc -U /var/run/socket


ดังนั้น netcat จะสร้างไฟล์ใหม่ที่/var/run/socket? มีวิธีการใช้ไฟล์ที่มีอยู่ซ้ำหรือไม่?
Alexander Mills

1
@AlexanderMills ถ้าคุณบอกให้ฟัง ( -l) มันจะสร้างไฟล์ มิฉะนั้นจะคาดว่าซ็อกเก็ตจะมีอยู่แล้ว (และมีบางอย่างที่ฟังอยู่) ดังนั้นคำสั่งตัวอย่างในคำตอบจะไม่สร้างไฟล์
Derobert

94

ด้วยsocat('การส่งข้อมูลแบบสองทิศทางระหว่างสองช่องทางข้อมูล') คุณสามารถเชื่อมต่อกับซ็อกเก็ตโดเมน unix ดังนี้:

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

19

netcat-openbsdรองรับการเชื่อมต่อกับซ็อกเก็ต UNIX โดเมน การใช้สิ่งนี้คุณสามารถเชื่อมต่อกับซ็อกเก็ตสตรีม UNIX โดเมนหรือซ็อกเก็ตดาตาแกรม UNIX โดเมนและดังนั้นคุณต้องบอกประเภทของซ็อกเก็ตเพื่อ netcat

ตัวอย่างเช่น/dev/logแฟ้มใน Linux เป็นระบบปฏิบัติการยูนิกซ์โดเมนซ็อกเก็ตเดตาแกรมซ็อกเก็ตจึงจะไม่ทำงานnc -U /dev/log nc -uU /dev/logแทนที่จะใช้ การใช้ -u พร้อมกับ -U บอก netcat ว่าเป็นซ็อกเก็ตดาตาแกรม UNIX โดเมน

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- โดเมนดาตาแกรม จาก man page ของมัน(man socat) " มันพยายามเชื่อมต่อก่อนและหากล้มเหลวให้ถือว่าเป็นซ็อกเก็ตดาตาแกรมดังนั้นจึงรองรับทั้งสองประเภท "

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

1
มันเป็นเครื่องมือที่มีความยืดหยุ่นและน่าประหลาดใจอย่างน่าประหลาดใจ
user259412

15

คุณสามารถใช้socatบนเดเบียน วิธีติดตั้ง:

# apt-get install socat

นั่นดูดีทีเดียว ฉันดูเหมือนจะไม่ได้socatติดตั้งบนเซิร์ฟเวอร์ของฉัน แต่มีให้บริการอย่างแน่นอน: packages.debian.org/squeeze/socat
Paul D. Waite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.