Taming USB/IP

Mae'r dasg o gysylltu dyfais USB â PC anghysbell trwy rwydwaith lleol yn codi'n rheolaidd. Islaw'r toriad mae hanes fy chwiliadau i'r cyfeiriad hwn, a'r llwybr i ddatrysiad parod yn seiliedig ar brosiect ffynhonnell agored USB/IP gyda disgrifiad o'r rhwystrau a osodwyd yn ofalus gan wahanol bobl ar hyd y llwybr hwn, yn ogystal â ffyrdd i'w hosgoi.

Rhan un, hanesyddol

Os yw'r peiriant yn rhithwir, mae hyn i gyd yn hawdd. Ymddangosodd ymarferoldeb anfon USB o'r gwesteiwr i'r peiriant rhithwir yn VMWare 4.1. Ond yn fy achos i, roedd yn rhaid cysylltu'r allwedd ddiogelwch, a nodwyd fel WIBU-KEY, â gwahanol beiriannau ar wahanol adegau, ac nid yn unig rhai rhithwir.
Arweiniodd rownd gyntaf y chwilio yn ôl yn 2009 fi at ddarn o galedwedd o'r enw TrendNet TU2-NU4
Manteision:

  • weithiau mae hyd yn oed yn gweithio

Cons:

  • ddim bob amser yn gweithio. Gadewch i ni ddweud nad yw allwedd amddiffyn Guardant Stealth II yn cychwyn drwyddo, gan regi gyda'r gwall “ni ellir cychwyn y ddyfais.”
  • Mae'r meddalwedd ar gyfer rheoli (darllenwch: mowntio a dadosod dyfeisiau USB) yn hynod o wael. Switsys llinell orchymyn, awtomeiddio - na, nid ydym wedi clywed. Gwneir popeth â'ch dwylo. Hunllef.
  • Mae'r meddalwedd rheoli yn chwilio am y caledwedd ei hun ar y rhwydwaith trwy ddarlledu, felly dim ond o fewn un segment darlledu o'r rhwydwaith y mae'n gweithio. Ni allwch nodi cyfeiriad IP y darn o galedwedd â llaw. Ydy'r darn o galedwedd ar is-rwydwaith gwahanol? Yna mae gennych broblem.
  • Mae'r datblygwyr wedi rhoi'r gorau iddi ar y ddyfais, mae anfon adroddiadau nam yn ddiwerth.

Digwyddodd yr ail rownd mewn amser nad oedd mor bell, ac arweiniodd fi at bwnc yr erthygl - Prosiect USB/IP. Denu gyda ei natur agored, yn enwedig ers y guys o ReactOS Fe wnaethant lofnodi gyrrwr ar gyfer Windows, felly nawr hyd yn oed ar x64 mae popeth yn gweithio heb unrhyw faglau fel modd prawf. Am hynny diolch yn fawr i dîm ReactOS! Mae popeth yn swnio'n brydferth, gadewch i ni geisio ei deimlo, a yw hi mewn gwirionedd? Yn anffodus, mae'r prosiect ei hun hefyd wedi'i adael, ac ni allwch ddibynnu ar gefnogaeth - ond lle nad yw ein un ni wedi diflannu, mae'r cod ffynhonnell yno, byddwn yn ei ddarganfod!

Rhan dau, gweinydd-Linux

Dim ond mewn OS sy'n seiliedig ar Linux y gellir gosod gweinydd USB/IP sy'n rhannu dyfeisiau USB dros rwydwaith. Wel, Linux yw Linux, gosodwch Debian 8 ar y peiriant rhithwir mewn cyfluniad lleiaf posibl, symudiad llaw safonol:

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

Sefydledig. Yna mae'r Rhyngrwyd yn awgrymu bod angen i chi lawrlwytho'r modiwl usbip, ond - helo, rhaca yn gyntaf. Nid oes modiwl o'r fath. Mae hyn oherwydd bod y rhan fwyaf o'r llawlyfrau ar y rhwydwaith yn cyfeirio at y gangen hŷn 0.1.x, ac yn y 0.2.0 diweddaraf mae gan y modiwlau usbip enwau gwahanol.

Felly:

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

Wel, gadewch i ni ychwanegu'r llinellau canlynol at /etc/modules i'w llwytho'n awtomatig pan fydd y system yn cychwyn:

usbip-core
usbip-host
vhci-hcd

Gadewch i ni ddechrau'r gweinydd usbip:

sudo usbipd -D

Ymhellach, mae'r doethineb cyffredinol yn dweud wrthym fod usbip yn dod gyda sgriptiau sy'n ein galluogi i reoli'r gweinydd - dangos pa ddyfais y bydd yn ei rannu dros y rhwydwaith, gweler y statws, ac ati. Yma mae teclyn garddio arall yn ein disgwyl - mae'r sgriptiau hyn yn y gangen 0.2.x, unwaith eto, wedi'u hail-enwi. Gallwch gael rhestr o orchmynion gan ddefnyddio

sudo usbip

Ar ôl darllen y disgrifiad o'r gorchmynion, daw'n amlwg, er mwyn rhannu'r ddyfais USB ofynnol, bod usbip eisiau darganfod ei ID Bws. Annwyl wylwyr, cribinio rhif tri yn yr arena: yr ID Bws a fydd yn ei roi i ni lsusb (byddai'n ymddangos fel y ffordd fwyaf amlwg) - nid yw'n addas iddi! Y ffaith yw bod usbip yn anwybyddu caledwedd fel canolbwyntiau USB. Felly, byddwn yn defnyddio'r gorchymyn adeiledig:

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

Sylwch: yma ac ymhellach yn y rhestrau byddaf yn disgrifio popeth gan ddefnyddio enghraifft fy allwedd USB benodol. Gall a bydd eich enw caledwedd a'ch pâr VID:PID yn wahanol. Enw fy un i yw Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Nawr gallwn rannu ein dyfais:

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

Hurray, gymrodyr!

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)

Tair llon, gymrodyr! Mae'r gweinydd wedi rhannu'r caledwedd dros y rhwydwaith, a gallwn ei gysylltu! Y cyfan sydd ar ôl yw ychwanegu autostart o'r daemon usbip yn /etc/rc.local

usbipd -D

Rhan tri, ochr y cleient ac yn ddryslyd

Ceisiais ar unwaith gysylltu'r ddyfais a rennir dros y rhwydwaith i beiriant sy'n rhedeg Debian ar yr un gweinydd, ac roedd popeth wedi'i gysylltu'n berffaith:

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

Gadewch i ni symud ymlaen i Windows. Yn fy achos i, Windows Server 2008R2 Standard Edition ydoedd. Mae'r llawlyfr swyddogol yn gofyn ichi osod y gyrrwr yn gyntaf. Disgrifir y weithdrefn yn berffaith yn y readme a gyflenwir gyda'r cleient Windows, rydym yn gwneud popeth fel y'i hysgrifennwyd, mae popeth yn gweithio allan. Mae hefyd yn gweithio ar XP heb unrhyw anawsterau.

Ar ôl dadbacio'r cleient, rydym yn ceisio gosod ein allwedd:

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

Ystyr geiriau: O och. Aeth rhywbeth o'i le. Gadewch i ni ddefnyddio'r sgil Google. Mae yna grybwylliadau darniog bod rhywbeth o'i le ar y cysonion; yn rhan y gweinydd, newidiodd y datblygwyr fersiwn y protocol wrth symud i fersiwn 0.2.0, ond yn y cleient Win fe wnaethant anghofio gwneud hyn. Yr ateb arfaethedig yw newid y cysonyn yn y cod ffynhonnell ac ailadeiladu'r cleient.

Ond dwi wir ddim eisiau lawrlwytho Visual Studio ar gyfer y weithdrefn hon. Ond mae gen i'r hen Hiew da. Yn y cod ffynhonnell, mae'r cysonyn yn cael ei ddatgan fel gair dwbl. Edrychwn am 0x00000106 yn y ffeil, gan roi 0x00000111 yn ei le. Peidiwch ag anghofio, mae'r gorchymyn beit yn wrthdroi. Y canlyniad yw dwy gêm, rydym yn clytio:

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

Aaaa... ydw!

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

Gallai hyn fod wedi bod yn ddiwedd y stori, ond ni chwaraeodd y gerddoriaeth yn hir. Ar ôl ailgychwyn y gweinydd, darganfyddais nad oedd y ddyfais ar y cleient wedi'i gosod!

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

Dyna i gyd. Ni allai hyd yn oed y Google hollwybodol ateb hyn i mi. Ac ar yr un pryd, mae'r gorchymyn i arddangos y dyfeisiau sydd ar gael ar y gweinydd yn eithaf cywir yn dangos - dyma hi, yr allwedd, gallwch chi ei osod. Rwy'n ceisio mowntio o Linux - mae'n gweithio! Beth os ydym yn ceisio nawr o Windows? O arswyd - mae'n gweithio!

Y rhaca olaf: nid oedd rhywbeth wedi'i ysgrifennu yng nghod y gweinydd. Wrth rannu dyfais, nid yw'n darllen nifer y disgrifyddion USB ohoni. Ac wrth osod dyfais o Linux, mae'r maes hwn wedi'i lenwi. Yn anffodus, rwy'n gyfarwydd â datblygiad Linux ar y lefel "gwneud a gosod". Felly, cafodd y broblem ei datrys gan ddefnyddio hac braidd yn fudr - gan ychwanegu at /etc/rc.local

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

Rhan olaf

Ar ôl rhywfaint o ddioddefaint, mae'n gweithio. Mae'r hyn a ddymunir wedi'i gyflawni, nawr gellir gosod yr allwedd ar unrhyw gyfrifiadur personol (a heb ei osod, wrth gwrs, hefyd), gan gynnwys y tu allan i segment darlledu'r rhwydwaith. Os ydych chi eisiau, gallwch chi wneud hyn gan ddefnyddio sgript cragen gorchymyn. Yr hyn sy'n braf yw bod y pleser yn rhad ac am ddim.
Rwy'n gobeithio y bydd fy mhrofiad yn helpu'r hacwyr i fynd o gwmpas y rhaca sydd wedi'i argraffu ar fy nhalcen. Diolch am eich sylw!

Ffynhonnell: hab.com

Ychwanegu sylw