Taming USB/IP

Il-kompitu tal-konnessjoni ta 'apparat USB ma' PC remot permezz ta 'netwerk lokali jqum regolarment. Taħt il-qatgħa hemm l-istorja tat-tfittxijiet tiegħi f'din id-direzzjoni, u t-triq għal soluzzjoni lesta bbażata fuq proġett open-source USB/IP b'deskrizzjoni tal-ostakli installati bir-reqqa minn diversi nies tul din it-triq, kif ukoll modi kif jiġu evitati.

L-ewwel parti, storika

Jekk il-magna hija virtwali, dan kollu huwa faċli. Il-funzjonalità tal-USB forwarding mill-host għall-magna virtwali dehret f'VMWare 4.1. Iżda fil-każ tiegħi, iċ-ċavetta tas-sigurtà, identifikata bħala WIBU-KEY, kellha tkun imqabbda ma 'magni differenti f'ħinijiet differenti, u mhux biss dawk virtwali.
L-ewwel rawnd ta 'tfittxija lura fl-2009 wasslitni għal biċċa hardware imsejħa TrendNet TU2-NU4
Pros:

  • kultant anke jaħdem

Cons:

  • mhux dejjem jaħdem. Ejja ngħidu li ċ-ċavetta tal-protezzjoni Guardant Stealth II ma tibdax minnha, u taħlef bl-iżball "l-apparat ma jistax jinbeda."
  • Is-softwer għall-ġestjoni (aqra: immuntar u żarmament ta 'tagħmir USB) huwa estremament fqir. Swiċċijiet tal-linja tal-kmand, awtomazzjoni - le, ma smajnax. Kollox isir b'idejk. Ħmar il-lejl.
  • Is-softwer tal-kontroll ifittex il-ħardwer innifsu fuq in-netwerk billi jxandar, għalhekk jaħdem biss f'segment wieħed tax-xandir tan-netwerk. Ma tistax tispeċifika l-indirizz IP tal-biċċa tal-ħardwer manwalment. Il-biċċa tal-ħardwer tinsab fuq subnet differenti? Imbagħad għandek problema.
  • L-iżviluppaturi rrinunzjaw fuq l-apparat, li tibgħat rapporti ta 'bug hija inutli.

It-tieni rawnd ġara fi żmien mhux daqshekk imbiegħed, u wassalni għas-suġġett tal-artikolu - Proġett USB/IP. Jattira bil-ftuħ tiegħu, speċjalment peress li l-guys minn ReactOS Huma ffirmaw sewwieq għall-Windows, għalhekk issa anke fuq x64 kollox jaħdem mingħajr krozzi bħall-mod tat-test. Għalihom grazzi ħafna lit-tim ReactOS! Kollox ħsejjes sabiħ, ejja nippruvaw inħossuh, hu tassew hekk? Sfortunatament, il-proġett innifsu huwa wkoll abbandunat, u ma tistax toqgħod fuq l-appoġġ - imma fejn tagħna ma sparixxax, il-kodiċi tas-sors hemm, aħna ser insemmu!

It-tieni parti, server-Linux

Server USB/IP li jaqsam apparati USB fuq netwerk jista 'jiġi installat biss f'OS ibbażat fuq Linux. Ukoll, Linux huwa Linux, installa Debian 8 fuq il-magna virtwali f'konfigurazzjoni minima, moviment standard tal-idejn:

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

Stabbilit. Imbagħad l-Internet jissuġġerixxi li għandek bżonn tniżżel il-modulu usbip, iżda - bonjour, l-ewwel rake. M'hemm l-ebda modulu bħal dan. Dan minħabba li ħafna mill-manwali fuq in-netwerk jirreferu għall-fergħa l-antika 0.1.x, u fl-aħħar 0.2.0 il-moduli usbip għandhom ismijiet differenti.

Għalhekk:

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

Ukoll, ejja nżidu l-linji li ġejjin ma '/etc/modules biex tgħabbihom awtomatikament meta tibda s-sistema:

usbip-core
usbip-host
vhci-hcd

Ejja nibdew is-server usbip:

sudo usbipd -D

Barra minn hekk, l-għerf universali jgħidilna li l-usbip jiġi bi skripts li jippermettulna namministraw is-server - uri liema apparat se jaqsam man-netwerk, ara l-istatus, eċċ. Hawnhekk tistenniena għodda oħra tal-ġnien - dawn l-iskripts fil-fergħa 0.2.x, għal darb'oħra, ġew isimhom mill-ġdid. Tista 'tikseb lista ta' kmandi bl-użu

sudo usbip

Wara li taqra d-deskrizzjoni tal-kmandi, jidher ċar li sabiex taqsam l-apparat USB meħtieġ, usbip trid issir taf l-ID tal-Bus tagħha. Għeżież telespettaturi, rake numru tlieta fl-arena: il-Bus ID li se tagħtina lsusb (jidher l-aktar mod ovvju) - ma jixirqilha! Il-fatt hu li l-usbip jinjora l-ħardwer bħal USB hubs. Għalhekk, se nużaw il-kmand inkorporat:

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

Nota: hawn u aktar fil-listi ser niddeskrivi kollox billi tuża l-eżempju taċ-ċavetta USB speċifika tiegħi. L-isem tal-ħardwer tiegħek u l-par VID:PID jistgħu u se jkunu differenti. Mini jissejjaħ Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Issa nistgħu naqsmu l-apparat tagħna:

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

Ħura, sħabi!

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)

Tliet cheers, sħabi! Is-server qasam il-ħardwer fuq in-netwerk, u nistgħu nqabbduh! Kulma jibqa' huwa li żżid l-awtostart tad-daemon usbip f'/etc/rc.local

usbipd -D

It-tielet parti, min-naħa tal-klijent u konfuża

Immedjatament ippruvajt nikkonnettja l-apparat kondiviż fuq in-netwerk ma' magna li taħdem Debian fuq l-istess server, u kollox konness perfettament:

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

Ejja ngħaddu għall-Windows. Fil-każ tiegħi kien Windows Server 2008R2 Standard Edition. Il-manwal uffiċjali jgħidlek biex tinstalla s-sewwieq l-ewwel. Il-proċedura hija deskritta perfettament fil-readme inkluż mal-klijent Windows, nagħmlu kollox kif miktub, kollox jaħdem. Taħdem ukoll fuq XP mingħajr ebda diffikultajiet.

Wara li żppakkjaw il-klijent, nippruvaw inarmaw iċ-ċavetta tagħna:

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. Xi ħaġa marret ħażin. Ejja nużaw il-ħila tal-Google. Hemm isemmi frammentari li xi ħaġa ħażina mal-kostanti fil-parti tas-server, l-iżviluppaturi bidlu l-verżjoni tal-protokoll meta ċċaqilqu għall-verżjoni 0.2.0, iżda fil-klijent Win insew jagħmlu dan. Is-soluzzjoni proposta hija li tinbidel il-kostanti fil-kodiċi tas-sors u terġa 'tinbena l-klijent.

Imma verament ma rridx inniżżel Visual Studio għal din il-proċedura. Imma għandi l-qadim Hiew tajjeb. Fil-kodiċi tas-sors, il-kostanti hija ddikjarata bħala kelma doppja. Ejja nfittxu 0x00000106 fil-fajl, tibdilha b'0x00000111. Tinsiex, l-ordni tal-byte hija inversa. Ir-riżultat huwa żewġ logħbiet, aħna garża:

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

Aaaand... iva!

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

Dan seta’ kien it-tmiem tal-istorja, iżda l-mużika ma dametx għal żmien twil. Wara li rebooting is-server, skoprejt li l-apparat fuq il-klijent ma kienx immuntat!

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

Dak kollox. Anki l-Google li jaf kollox ma setax iwieġeb dan għalija. U fl-istess ħin, il-kmand biex jintwerew l-apparati disponibbli fuq is-server juri b'mod pjuttost korrett - hawnhekk hija, iċ-ċavetta, tista 'timmontaha. Nipprova mmunta mill-Linux - jaħdem! X'jiġri jekk nippruvaw issa mill-Windows? Oh orrur - taħdem!

L-aħħar rake: xi ħaġa ma kinitx miktuba fil-kodiċi tas-server. Meta taqsam apparat, ma jaqrax in-numru ta 'deskritturi USB minnu. U meta twaħħal apparat minn Linux, dan il-qasam jimtela. Sfortunatament, jien familjari mal-iżvilupp tal-Linux fil-livell "make && make install". Għalhekk, il-problema ġiet solvuta bl-użu ta 'hack pjuttost maħmuġ - li żżid ma' /etc/rc.local

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

Parti finali

Wara xi prova, taħdem. Inkiseb dak mixtieq, issa ċ-ċavetta tista 'tiġi mmuntata fuq kwalunkwe PC (u mhux immuntata, ovvjament, ukoll), inkluż barra s-segment tax-xandir tan-netwerk. Jekk trid, tista 'tagħmel dan billi tuża script tal-qoxra tal-kmand. X'inhu sabiħ huwa li l-pjaċir huwa assolutament b'xejn.
Nittama li l-esperjenza tiegħi tgħin lill-hackers jduru r-rake li huwa stampat fuq forehead tiegħi. Grazzi tal-attenzjoni tiegħek!

Sors: www.habr.com

Żid kumment