USB/IP-ni sozlash

Mahalliy tarmoq orqali uzoq kompyuterga USB qurilmasini ulash vazifasi muntazam ravishda paydo bo'ladi. Kesim ostida mening ushbu yo'nalishdagi qidiruvlarim tarixi va ochiq manbali loyihaga asoslangan tayyor echimga yo'l bor. USB/IP bu yo'lda turli odamlar tomonidan ehtiyotkorlik bilan o'rnatilgan to'siqlar, shuningdek ularni chetlab o'tish yo'llari tavsifi bilan.

Birinchi qism, tarixiy

Agar mashina virtual bo'lsa, bularning barchasi oson. Xostdan virtual mashinaga USB-ni yo'naltirish funksiyasi VMWare 4.1 da paydo bo'ldi. Lekin mening holatimda, WIBU-KEY sifatida belgilangan xavfsizlik kaliti nafaqat virtual emas, balki turli vaqtlarda turli xil mashinalarga ulanishi kerak edi.
2009 yilda qidiruvning birinchi bosqichi meni qo'shimcha qurilmaga olib keldi TrendNet TU2-NU4
Taroziga soling:

  • ba'zan hatto ishlaydi

Kamchiliklari:

  • har doim ham ishlamaydi. Aytaylik, Guardant Stealth II himoya kaliti u orqali boshlamaydi va "qurilmani ishga tushirib bo'lmaydi" degan xato bilan qasam ichadi.
  • Boshqarish uchun dasturiy ta'minot (o'qing: USB qurilmalarini o'rnatish va o'chirish) juda yomon. Buyruqlar qatori kalitlari, avtomatlashtirish - yo'q, biz eshitmadik. Hamma narsa sizning qo'llaringiz bilan amalga oshiriladi. Kabus.
  • Boshqaruv dasturi translyatsiya orqali tarmoqdagi uskunaning o'zini qidiradi, shuning uchun u tarmoqning faqat bitta translyatsiya segmentida ishlaydi. Uskunaning IP manzilini qo'lda ko'rsata olmaysiz. Uskuna boshqa ichki tarmoqdami? Keyin sizda muammo bor.
  • Ishlab chiquvchilar qurilmadan voz kechishdi, xato hisobotlarini yuborish foydasiz.

Ikkinchi tur unchalik uzoq bo'lmagan vaqt ichida sodir bo'ldi va meni maqola mavzusiga olib keldi - USB/IP loyihasi. O'zining ochiqligi bilan o'ziga jalb qiladi, ayniqsa, yigitlar ReactOS Ular Windows uchun drayverni imzoladilar, shuning uchun endi x64 da hamma narsa sinov rejimi kabi hech qanday qo'ltiqsiz ishlaydi. Buning uchun ReactOS jamoasiga katta rahmat! Hamma narsa go'zal eshitiladi, keling buni his qilishga harakat qilaylik, haqiqatan ham shundaymi? Afsuski, loyihaning o'zi ham tashlab qo'yilgan va siz qo'llab-quvvatlashga umid qila olmaysiz - lekin bizniki yo'qolmagan joyda manba kodi mavjud, biz buni aniqlaymiz!

Ikkinchi qism, server-Linux

USB qurilmalarini tarmoq orqali ulashgan USB/IP-server faqat Linux-ga asoslangan operatsion tizimda o'rnatilishi mumkin. Xo'sh, Linux bu Linux, Debian 8 ni virtual mashinaga minimal konfiguratsiyada, standart qo'l harakatida o'rnating:

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

Tashkil etilgan. Keyin Internet sizga usbip modulini yuklab olishingiz kerakligini taklif qiladi, lekin - salom, birinchi rake. Bunday modul yo'q. Buning sababi shundaki, tarmoqdagi qo'llanmalarning aksariyati eski 0.1.x filialiga murojaat qiladi va oxirgi 0.2.0 da usbip modullari turli nomlarga ega.

Shuning uchun:

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

Keling, tizim ishga tushganda ularni avtomatik ravishda yuklash uchun /etc/modules ga quyidagi qatorlarni qo'shamiz:

usbip-core
usbip-host
vhci-hcd

usbip serverini ishga tushiramiz:

sudo usbipd -D

Bundan tashqari, universal donolik bizga aytadiki, usbip serverni boshqarishga imkon beruvchi skriptlar bilan birga keladi - u qaysi qurilmani tarmoq orqali ulashishini ko'rsatish, holatni ko'rish va hokazo. Bu erda bizni yana bir bog 'vositasi kutmoqda - 0.2.x filialidagi bu skriptlar yana qayta nomlandi. Foydalanish orqali buyruqlar ro'yxatini olishingiz mumkin

sudo usbip

Buyruqlar tavsifini o'qib chiqqandan so'ng, kerakli USB qurilmasini almashish uchun usbip o'zining Bus ID ni bilib olishni xohlayotgani ayon bo'ladi. Hurmatli tomoshabinlar, arenada uchinchi rake: bizga beradigan avtobus identifikatori lsusb (bu eng aniq yo'l bo'lib tuyuladi) - unga mos kelmaydi! Gap shundaki, usbip USB hublari kabi uskunani e'tiborsiz qoldiradi. Shuning uchun biz o'rnatilgan buyruqdan foydalanamiz:

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

Eslatma: bu erda va keyingi ro'yxatlarda men o'zimning maxsus USB kalitim misolida hamma narsani tasvirlab beraman. Uskuna nomi va VID:PID juftligi boshqacha bo'lishi mumkin va bo'ladi. Mening nomim Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Endi biz qurilmamizni baham ko'rishimiz mumkin:

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

Xayr, oΚ»rtoqlar!

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)

Uchta salom, o'rtoqlar! Server uskunani tarmoq orqali ulashdi va biz uni ulashimiz mumkin! Faqat /etc/rc.local-da usbip demonining avtomatik ishga tushirilishini qo'shish qoladi

usbipd -D

Uchinchi qism, mijoz tomoni va chalkash

Men darhol tarmoq orqali umumiy qurilmani bir xil serverda Debian ishlaydigan mashinaga ulashga harakat qildim va hamma narsa a'lo darajada ulangan:

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

Keling, Windows-ga o'tamiz. Mening holimda bu Windows Server 2008R2 Standard Edition edi. Rasmiy qo'llanma birinchi navbatda drayverni o'rnatishingizni so'raydi. Jarayon Windows mijoziga kiritilgan readme-da juda yaxshi tasvirlangan, biz hamma narsani yozilganidek qilamiz, hammasi yaxshi bo'ladi. Bundan tashqari, XP da hech qanday qiyinchiliksiz ishlaydi.

Mijozni ochib, biz kalitimizni o'rnatishga harakat qilamiz:

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

Oh oh. Nimadir noto'g'ri bajarildi. Keling, Google mahoratidan foydalanaylik. Konstantalarda biror narsa noto'g'ri ekanligi haqida parcha-parcha eslatmalar mavjud, server qismida ishlab chiquvchilar 0.2.0 versiyasiga o'tishda protokol versiyasini o'zgartirdilar, ammo Win mijozida buni unutishdi. Taklif etilayotgan yechim manba kodidagi konstantani o'zgartirish va mijozni qayta qurishdir.

Ammo men ushbu protsedura uchun Visual Studio dasturini yuklab olishni xohlamayman. Lekin menda yaxshi eski Xyu bor. Manba kodida doimiy qo'sh so'z sifatida e'lon qilinadi. Keling, faylda 0x00000106 ni qidiramiz, uni 0x00000111 bilan almashtiramiz. Shuni unutmangki, bayt tartibi teskari. Natijada ikkita o'yin bo'ldi, biz tuzatamiz:

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

Aaaa... ha!

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

Bu hikoyaning oxiri bo'lishi mumkin edi, lekin musiqa uzoq davom etmadi. Serverni qayta ishga tushirgandan so'ng, men mijozdagi qurilma o'rnatilmaganligini aniqladim!

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

Va tamom. Hatto hamma narsani biladigan Google men uchun javob bera olmadi. Va shu bilan birga, serverda mavjud bo'lgan qurilmalarni ko'rsatish buyrug'i juda to'g'ri ko'rsatiladi - bu erda kalit, siz uni o'rnatishingiz mumkin. Men Linuxdan o'rnatishga harakat qilaman - u ishlaydi! Endi Windows-dan sinab ko'rsak nima bo'ladi? Oh, dahshat - bu ishlaydi!

Oxirgi rake: server kodida biror narsa yozilmagan. Qurilmani ulashganda, u USB deskriptorlari sonini o'qimaydi. Va Linux-dan qurilmani o'rnatishda ushbu maydon to'ldiriladi. Afsuski, men Linuxni β€œmake && make install” darajasida ishlab chiqish bilan tanishman. Shuning uchun muammo juda iflos hack yordamida hal qilindi - /etc/rc.local ga qo'shildi

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

Yakuniy qism

Biroz sinovdan so'ng, u ishlaydi. Istalgan narsaga erishildi, endi kalitni istalgan shaxsiy kompyuterga o'rnatish mumkin (va, albatta, o'chirilgan ham), shu jumladan tarmoqning translyatsiya segmentidan tashqarida ham. Agar xohlasangiz, buni buyruq qobig'i skripti yordamida qilishingiz mumkin. Qizig'i shundaki, zavq mutlaqo bepul.
Umid qilamanki, mening tajribam xakerlarga peshonamga muhrlangan rakeni aylanib o'tishga yordam beradi. E'tiboringiz uchun rahmat!

Manba: www.habr.com

a Izoh qo'shish