USB/IP тайлах

Дотоод сүлжээгээр дамжуулан USB төхөөрөмжийг алсын компьютерт холбох ажил байнга гарч ирдэг. Тайлбарын дагуу миний энэ чиглэлээр хийсэн хайлтуудын түүх, нээлттэй эхийн төсөл дээр суурилсан бэлэн шийдэлд хүрэх замыг зааж өгсөн болно. USB/IP Энэ замд янз бүрийн хүмүүсийн тавьсан саад тотгорууд, тэдгээрийг даван туулах арга замуудын тайлбартай.

Нэгдүгээр хэсэг, түүхэн

Хэрэв машин виртуал бол - энэ бүхэн амархан. Хостоос виртуал машин руу USB дамжуулах функц VMWare 4.1 дээр гарч ирэв. Гэхдээ миний хувьд WIBU-KEY гэж танигдах аюулгүй байдлын түлхүүр нь зөвхөн виртуаль биш өөр өөр машинуудтай өөр өөр цаг үед холбогдсон байх ёстой байв.
Алс холын 2009 оны эхний эрэл хайгуул намайг төмөр гэж нэрлэдэг хэсэг рүү хөтөлсөн TrendNet TU2-NU4
Нөхцөл:

  • заримдаа бүр ажилладаг

Нөхцөл байдал:

  • үргэлж ажилладаггүй. Guardant Stealth II хамгаалалтын түлхүүр түүгээр эхлэхгүй байна гэж бодъё, "төхөөрөмжийг эхлүүлэх боломжгүй" гэсэн алдаатай тангараглаж байна.
  • Удирдлагын програм хангамж (унших - USB төхөөрөмжүүдийг холбох, салгах) нь туйлын өрөвдмөөр юм. Тушаалын шугамын унтраалга, автоматжуулалт - үгүй, сонсоогүй. Бүх зүйл зөвхөн гараар хийгдсэн байдаг. Хар дарсан зүүд.
  • Хяналтын программ хангамж нь сүлжээн дэх төмрийн хэсгийг өөрөө цацах замаар хайдаг тул энэ нь зөвхөн нэг өргөн нэвтрүүлгийн сүлжээний сегмент дотор ажилладаг. Та төмрийн IP хаягийг гараар зааж өгөх боломжгүй. Өөр дэд сүлжээнд нэг хэсэг төмөр үү? Тэгвэл танд асуудал байна.
  • Хөгжүүлэгчид төхөөрөмж дээр оноо авсан бол алдааны тайланг илгээх нь утгагүй юм.

Хоёрдахь шат нь тийм ч холгүй үед тохиолдсон бөгөөд намайг нийтлэлийн сэдэв рүү хөтөлсөн - USB/IP төсөл. Нээлттэй байдлаар татдаг, ялангуяа залуусаас хойш ReactOS Тэд Windows-д зориулсан драйвер дээр гарын үсэг зурсан тул одоо бүх зүйл x64 дээр туршилтын горим гэх мэт ямар ч таяггүй ажилладаг. Үүний төлөө ReactOS-ийн багт маш их баярлалаа! Бүх зүйл сайхан сонсогдож байна, үүнийг мэдрэхийг хичээцгээе, үнэхээр тийм үү? Харамсалтай нь төсөл өөрөө орхигдсон бөгөөд та дэмжлэгт найдаж болохгүй - гэхдээ биднийх алга болоогүй бол эх сурвалж тэнд байгаа, бид үүнийг олох болно!

Хоёрдугаар хэсэг, server-linux

USB төхөөрөмжүүдийг сүлжээгээр хуваалцдаг USB/IP серверийг зөвхөн Линукс дээр суурилсан үйлдлийн систем дээр тохируулах боломжтой. За, Линукс бол Линукс, бид Debian 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

usbip серверийг эхлүүлцгээе:

sudo usbipd -D

Цаашилбал, бүх нийтийн оюун ухаан бидэнд usbip нь серверийг удирдах боломжийг олгодог скриптүүдтэй ирдэг гэдгийг хэлдэг - энэ нь сүлжээгээр ямар төхөөрөмж хуваалцахыг харуулах, статусыг харах гэх мэт. Энд бас нэг цэцэрлэгийн хэрэгсэл биднийг хүлээж байна - 0.2.x салбар дахь эдгээр скриптүүдийн нэрийг дахин өөрчилсөн. Та тушаалуудын жагсаалтыг авах боломжтой

sudo usbip

Тушаалуудын тайлбарыг уншсаны дараа шаардлагатай USB төхөөрөмжийг хуваалцахын тулд usbip нь автобусны ID-г мэдэхийг хүсч байгаа нь тодорхой болно. Эрхэм үзэгчид ээ, XNUMX-р тармуур талбай дээр байна: Автобусны үнэмлэх нь бидэнд өгөх болно лусб (энэ нь хамгийн ойлгомжтой арга юм шиг санагдаж байна) - энэ нь түүнд тохирохгүй байна! Баримт нь usbip нь USB hub гэх мэт техник хангамжийг үл тоомсорлодог. Тиймээс бид суулгасан тушаалыг ашиглана:

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

Гуравдугаар хэсэг, үйлчлүүлэгч талтай, ойлгомжгүй

Би хуваалцсан төхөөрөмжийг сүлжээгээр шууд ижил сервер дээрх Debian машинтай холбохыг оролдсон бөгөөд бүх зүйл сайн холбогдсон:

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

Windows руу шилжье. Миний хувьд энэ нь Windows Server 2008R2 Standard Edition байсан. Албан ёсны гарын авлага нь эхлээд драйвераа суулгахыг танаас хүсч байна. Процедурыг windows-ийн үйлчлүүлэгчид хавсаргасан Readme дээр маш сайн тайлбарласан байгаа, бид бүх зүйлийг бичсэнээр нь хийдэг, бүх зүйл бүтдэг. 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

Өө өө. Ямар нэгэн зүйл буруугаар эргэсэн. Бид Google-ийн ур чадварыг ашигладаг. Тогтмолуудад ямар нэг зүйл буруу байгаа талаар хэсэгчлэн дурьдсан байдаг; серверийн хэсэгт хөгжүүлэгчид 0.2.0 хувилбар руу шилжихдээ протоколын хувилбарыг өөрчилсөн боловч Win клиент дээр үүнийг хийхээ мартсан байна. Санал болгож буй шийдэл нь эх кодын тогтмолыг өөрчилж, үйлчлүүлэгчийг дахин бүтээх явдал юм.

Гэхдээ би энэ процедурын төлөө Visual Studio-г татаж авахыг үнэхээр хүсэхгүй байна. Гэхдээ надад хуучны сайн Хью бий. Эх кодонд тогтмолыг давхар үг гэж зарласан. 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

Тэгээд л болоо. Үүнийг мэддэг Google хүртэл миний өмнөөс хариулж чадахгүй. Үүний зэрэгцээ сервер дээр байгаа төхөөрөмжүүдийг харуулах команд нь маш зөв харагдаж байна - энэ бол түлхүүр юм, та үүнийг холбож болно. Би Линукс доороос холбохыг хичээдэг - энэ нь ажилладаг! Хэрэв одоо Windows доороос оролдох уу? Өө новш - энэ ажиллаж байна!

Сүүлийн тармуур: серверийн кодонд ямар нэг зүйл нэмээгүй байна. Төхөөрөмжийг хуваалцах үед энэ нь USB тодорхойлогчдын тоог уншихгүй. Төхөөрөмжийг Линукс доороос холбоход энэ талбарыг бөглөнө. Харамсалтай нь, би Линукс дээрх хөгжүүлэлтийн талаар “make && make install” түвшинд мэддэг. Тиймээс /etc/rc.local-д нэмэх нь нэлээд бохир хакердах замаар асуудлыг шийдэж байна

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

Эцсийн хэсэг

Хэсэг хугацааны дараа энэ нь ажилладаг. Хүссэн үр дүнд хүрсэн тул одоо түлхүүрийг ямар ч компьютерт холбож болно (мэдээж салгаж болно), түүний дотор өргөн нэвтрүүлгийн сүлжээний сегментээс гадуур. Хэрэв та хүсвэл бүрхүүлийн скрипт ашиглан үүнийг хийж болно. Ямар сайхан юм бэ - таашаал нь үнэ төлбөргүй байдаг.
Миний туршлага хабразителиг духан дээр минь дарагдсан тармуурыг тойрч гарахад тусална гэж найдаж байна. Анхаарал тавьсанд баярлалаа!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх