ٹیمنگ USB/IP

مقامی نیٹ ورک کے ذریعے USB ڈیوائس کو ریموٹ پی سی سے منسلک کرنے کا کام باقاعدگی سے ہوتا ہے۔ کٹ کے نیچے اس سمت میں میری تلاشوں کی تاریخ ہے، اور اوپن سورس پروجیکٹ پر مبنی ایک ریڈی میڈ حل کا راستہ USB/IP اس راستے میں مختلف لوگوں کی طرف سے احتیاط سے نصب کی گئی رکاوٹوں کی تفصیل کے ساتھ ساتھ ان کو روکنے کے طریقے۔

پہلا حصہ، تاریخی

اگر مشین ورچوئل ہے تو یہ سب آسان ہے۔ میزبان سے ورچوئل مشین میں USB فارورڈنگ کی فعالیت VMWare 4.1 میں ظاہر ہوئی۔ لیکن میرے معاملے میں، حفاظتی کلید، جس کی شناخت WIBU-KEY کے نام سے کی گئی ہے، کو مختلف مشینوں سے مختلف اوقات میں منسلک ہونا پڑتا ہے، نہ کہ صرف ورچوئل سے۔
2009 میں تلاش کا پہلا دور مجھے ہارڈ ویئر کے ایک ٹکڑے کی طرف لے گیا۔ TrendNet TU2-NU4
پیشہ:

  • کبھی کبھی یہ بھی کام کرتا ہے

Cons:

  • ہمیشہ کام نہیں کرتا. آئیے کہتے ہیں کہ گارڈنٹ اسٹیلتھ II کی حفاظتی کلید اس کے ذریعے شروع نہیں ہوتی ہے، "آلہ کو شروع نہیں کیا جا سکتا" کی خامی کے ساتھ قسم کھا کر۔
  • انتظام کرنے کے لیے سافٹ ویئر (پڑھیں: USB ڈیوائسز کو ماؤنٹ کرنا اور ان ماؤنٹ کرنا) انتہائی ناقص ہے۔ کمانڈ لائن سوئچز، آٹومیشن - نہیں، ہم نے نہیں سنا۔ سب کچھ آپ کے ہاتھوں سے ہوتا ہے۔ ڈراؤنا خواب.
  • کنٹرول سافٹ ویئر براڈکاسٹنگ کے ذریعے نیٹ ورک پر ہی ہارڈویئر کو تلاش کرتا ہے، اس لیے یہ نیٹ ورک کے صرف ایک براڈکاسٹ سیگمنٹ میں کام کرتا ہے۔ آپ ہارڈ ویئر کے ٹکڑے کا IP پتہ دستی طور پر نہیں بتا سکتے۔ کیا ہارڈ ویئر کا ٹکڑا مختلف سب نیٹ پر ہے؟ پھر آپ کو ایک مسئلہ ہے.
  • ڈویلپرز نے ڈیوائس کو چھوڑ دیا ہے، بگ رپورٹس بھیجنا بیکار ہے۔

دوسرا دور ایسے وقت میں ہوا جو اتنا دور نہیں تھا، اور مجھے مضمون کے موضوع کی طرف لے گیا۔ USB/IP پروجیکٹ. اس کی کشادگی کے ساتھ اپنی طرف متوجہ کرتا ہے، خاص طور پر جب سے لڑکوں سے ReactOS انہوں نے ونڈوز کے لیے ایک ڈرائیور پر دستخط کیے، لہذا اب x64 پر بھی ہر چیز بغیر کسی بیساکھی کے کام کرتی ہے جیسے ٹیسٹ موڈ۔ جس کے لیے ReactOS ٹیم کا بہت شکریہ! ہر چیز خوبصورت لگتی ہے، آئیے اسے محسوس کرنے کی کوشش کریں، کیا واقعی ایسا ہے؟ بدقسمتی سے، پروجیکٹ خود بھی ترک کر دیا گیا ہے، اور آپ سپورٹ پر بھروسہ نہیں کر سکتے ہیں - لیکن جہاں ہمارا غائب نہیں ہوا ہے، وہاں سورس کوڈ موجود ہے، ہم اس کا پتہ لگائیں گے!

حصہ دو، سرور-لینکس

ایک USB/IP سرور جو USB آلات کو نیٹ ورک پر شیئر کرتا ہے صرف لینکس پر مبنی OS میں انسٹال کیا جا سکتا ہے۔ ٹھیک ہے، لینکس لینکس ہے، ڈیبیان 8 کو ورچوئل مشین پر کم سے کم کنفیگریشن، معیاری ہاتھ کی حرکت میں انسٹال کریں:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbip

قائم کیا. پھر انٹرنیٹ تجویز کرتا ہے کہ آپ کو usbip ماڈیول ڈاؤن لوڈ کرنے کی ضرورت ہے، لیکن - ہیلو، پہلے ریک۔ ایسا کوئی ماڈیول نہیں ہے۔ اس کی وجہ یہ ہے کہ نیٹ ورک پر زیادہ تر مینوئلز پرانی برانچ 0.1.x کا حوالہ دیتے ہیں، اور تازہ ترین 0.2.0 میں usbip ماڈیولز کے مختلف نام ہیں۔

لہذا:

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbip

ٹھیک ہے، آئیے مندرجہ ذیل لائنوں کو /etc/modules میں شامل کریں تاکہ سسٹم شروع ہونے پر انہیں خود بخود لوڈ کیا جا سکے۔

usbip-core
usbip-host
vhci-hcd

آئیے یو ایس بی آئی پی سرور شروع کریں:

sudo usbipd -D

مزید، عالمگیر حکمت ہمیں بتاتی ہے کہ usbip اسکرپٹ کے ساتھ آتا ہے جو ہمیں سرور کا انتظام کرنے کی اجازت دیتا ہے - دکھائیں کہ یہ نیٹ ورک پر کس ڈیوائس کا اشتراک کرے گا، اسٹیٹس دیکھیں، وغیرہ۔ یہاں ایک اور باغیچے کا آلہ ہمارا انتظار کر رہا ہے - 0.2.x برانچ میں ان اسکرپٹس کا دوبارہ نام تبدیل کر دیا گیا ہے۔ آپ استعمال کرتے ہوئے کمانڈز کی فہرست حاصل کر سکتے ہیں۔

sudo usbip

کمانڈز کی تفصیل پڑھنے کے بعد، یہ واضح ہو جاتا ہے کہ مطلوبہ USB ڈیوائس کو شیئر کرنے کے لیے، usbip اپنی بس آئی ڈی معلوم کرنا چاہتا ہے۔ پیارے ناظرین، میدان میں ریک نمبر تین: بس آئی ڈی جو ہمیں دے گی۔ lsusb (یہ سب سے واضح طریقہ لگتا ہے) - اس کے مطابق نہیں ہے! حقیقت یہ ہے کہ یو ایس بی آئی پی یو ایس بی حبس جیسے ہارڈ ویئر کو نظر انداز کرتا ہے۔ لہذا، ہم بلٹ ان کمانڈ استعمال کریں گے:

user@usb-server:~$ sudo usbip list -l
 - busid 1-1 (064f:0bd7)
   WIBU-Systems AG : BOX/U (064f:0bd7)

نوٹ: یہاں اور مزید فہرستوں میں میں اپنی مخصوص USB کلید کی مثال استعمال کرتے ہوئے سب کچھ بیان کروں گا۔ آپ کے ہارڈ ویئر کا نام اور VID:PID جوڑا مختلف ہوسکتا ہے اور ہوگا۔ میرا کو Wibu-Systems AG کہا جاتا ہے: BOX/U, VID 064F, PID 0BD7۔

اب ہم اپنے آلے کا اشتراک کر سکتے ہیں:

user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: complete

ہیرے، ساتھیو!

user@usb-server:~$ sudo usbip list -r localhost
Exportable USB devices
======================
 - localhost
        1-1: WIBU-Systems AG : BOX/U (064f:0bd7)
           : /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-1
           : Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)

تھری چیئرز، کامریڈز! سرور نے نیٹ ورک پر ہارڈ ویئر کا اشتراک کیا ہے، اور ہم اسے جوڑ سکتے ہیں! جو کچھ باقی ہے وہ /etc/rc.local میں usbip ڈیمون کے آٹو اسٹارٹ کو شامل کرنا ہے۔

usbipd -D

تیسرا حصہ، کلائنٹ سائڈ اور مبہم

میں نے فوری طور پر نیٹ ورک پر مشترکہ ڈیوائس کو اسی سرور پر ڈیبیان چلانے والی مشین سے مربوط کرنے کی کوشش کی، اور ہر چیز بالکل مربوط ہے:

sudo usbip attach --remote=localhost --busid=1-1

آئیے ونڈوز پر چلتے ہیں۔ میرے معاملے میں یہ ونڈوز سرور 2008R2 معیاری ایڈیشن تھا۔ آفیشل مینول آپ سے پہلے ڈرائیور کو انسٹال کرنے کو کہتا ہے۔ ونڈوز کلائنٹ کے ساتھ شامل ریڈمی میں طریقہ کار کو بالکل ٹھیک بیان کیا گیا ہے، ہم سب کچھ تحریری طور پر کرتے ہیں، سب کچھ کام کرتا ہے۔ یہ XP پر بھی بغیر کسی دقت کے کام کرتا ہے۔

کلائنٹ کو کھولنے کے بعد، ہم اپنی کلید کو نصب کرنے کی کوشش کرتے ہیں:

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip_windows.c: 756 (query_interface0) recv op_common
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

اوہ اوہ۔ کچھ غلط ہو گیا. آئیے گوگل کی مہارت کا استعمال کریں۔ ٹکڑوں کا ذکر ہے کہ مستقل میں کچھ غلط ہے؛ سرور کے حصے میں، ورژن 0.2.0 پر جاتے وقت ڈویلپرز نے پروٹوکول ورژن کو تبدیل کیا، لیکن Win کلائنٹ میں وہ ایسا کرنا بھول گئے۔ مجوزہ حل یہ ہے کہ سورس کوڈ میں مستقل کو تبدیل کیا جائے اور کلائنٹ کو دوبارہ بنایا جائے۔

لیکن میں واقعی میں اس طریقہ کار کے لیے ویژول اسٹوڈیو ڈاؤن لوڈ نہیں کرنا چاہتا۔ لیکن میرے پاس اچھا پرانا ہیو ہے۔ سورس کوڈ میں، مستقل کو دوہرا لفظ قرار دیا جاتا ہے۔ آئیے فائل میں 0x00000106 تلاش کرتے ہیں، اسے 0x00000111 سے تبدیل کرتے ہیں۔ مت بھولنا، بائٹ آرڈر ریورس ہے. نتیجہ دو میچ ہے، ہم پیچ کرتے ہیں:

[usbip.exe]
00000CBC: 06 11
00000E0A: 06 11

آؤ... ہاں!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
new usb device attached to usbvbus port 1

یہ کہانی کا اختتام ہو سکتا تھا، لیکن موسیقی زیادہ دیر تک نہیں چل سکی۔ سرور کو ریبوٹ کرنے کے بعد، میں نے دریافت کیا کہ کلائنٹ پر ڈیوائس نصب نہیں ہے!

C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device

بس۔ یہاں تک کہ سب جاننے والا گوگل بھی میرے لئے اس کا جواب نہیں دے سکا۔ اور ایک ہی وقت میں، سرور پر دستیاب آلات کو ظاہر کرنے کا حکم بالکل صحیح طور پر دکھاتا ہے - یہاں یہ ہے، کلید، آپ اسے ماؤنٹ کر سکتے ہیں۔ میں لینکس سے ماؤنٹ کرنے کی کوشش کرتا ہوں - یہ کام کرتا ہے! اگر ہم ابھی ونڈوز سے کوشش کریں تو کیا ہوگا؟ اوہ خوفناک - یہ کام کرتا ہے!

آخری ریک: سرور کوڈ میں کچھ نہیں لکھا گیا تھا۔ کسی ڈیوائس کو شیئر کرتے وقت، یہ اس سے USB ڈسکرپٹرز کی تعداد نہیں پڑھتا ہے۔ اور جب لینکس سے ڈیوائس لگاتے ہیں تو یہ فیلڈ بھر جاتی ہے۔ بدقسمتی سے، میں "make &&make install" کی سطح پر لینکس کی ترقی سے واقف ہوں۔ لہذا، مسئلہ کو ایک گندے ہیک کا استعمال کرتے ہوئے حل کیا گیا تھا - /etc/rc.local میں شامل کرنا

usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00

آخری حصہ

کچھ آزمائش کے بعد، یہ کام کرتا ہے. مطلوبہ حاصل کر لیا گیا ہے، اب کلید کو کسی بھی پی سی پر نصب کیا جا سکتا ہے (اور بلاشبہ ان ماؤنٹ بھی)، بشمول نیٹ ورک کے براڈکاسٹ سیگمنٹ سے باہر۔ اگر آپ چاہیں تو، آپ کمانڈ شیل اسکرپٹ کا استعمال کرتے ہوئے یہ کر سکتے ہیں۔ اچھی بات یہ ہے کہ خوشی بالکل مفت ہے۔
مجھے امید ہے کہ میرا تجربہ ہیکرز کو اس ریک کے ارد گرد حاصل کرنے میں مدد کرے گا جو میرے ماتھے پر نقش ہے۔ آپکی توجہ کا شکریہ!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں