Menjinakkan USB/IP

Tugas menyambungkan peranti USB ke PC jauh melalui rangkaian tempatan selalu timbul. Di bawah pemotongan, sejarah carian saya ke arah ini ditetapkan, dan laluan ke penyelesaian sedia dibuat berdasarkan projek sumber terbuka USB/IP dengan penerangan tentang halangan yang ditetapkan dengan teliti oleh pelbagai orang di laluan ini, serta cara untuk memintas mereka.

Bahagian pertama, sejarah

Jika mesin itu maya - semua ini mudah. Fungsi pemajuan USB daripada hos kepada mesin maya muncul dalam VMWare 4.1. Tetapi dalam kes saya, kunci keselamatan, yang dikenali sebagai WIBU-KEY, perlu disambungkan pada masa yang berbeza ke mesin yang berbeza, dan bukan sahaja yang maya.
Pusingan pertama pencarian pada tahun 2009 yang jauh membawa saya ke sekeping besi yang dipanggil TrendNet TU2-NU4
Kelebihan:

  • kadang-kadang ia juga berkesan

Cons:

  • tidak selalu berfungsi. Katakan kunci perlindungan Guardant Stealth II tidak bermula melaluinya, bersumpah dengan ralat "peranti tidak boleh dimulakan".
  • Perisian pengurusan (baca - memasang dan menyahlekap peranti USB) amat menyedihkan. Suis baris arahan, automasi - tidak, belum mendengar. Semuanya hanya dengan tangan. Mimpi ngeri.
  • perisian kawalan mencari kepingan besi itu sendiri dalam rangkaian dengan penyiaran, jadi ini hanya berfungsi dalam satu segmen rangkaian penyiaran. Anda tidak boleh menentukan alamat IP kepingan besi dengan tangan. Sekeping besi dalam subnet lain? Kemudian anda mempunyai masalah.
  • pemaju menjaringkan pada peranti, ia adalah sia-sia untuk menghantar laporan pepijat.

Pusingan kedua berlaku pada masa yang tidak begitu jauh, dan membawa saya ke topik artikel - Projek USB/IP. Menarik dengan keterbukaan, terutamanya sejak lelaki dari NT mereka menandatangani pemandu untuk Windows, jadi kini semuanya berfungsi walaupun pada x64 tanpa sebarang tongkat seperti mod ujian. Terima kasih banyak kepada pasukan ReactOS! Semuanya terdengar indah, cuba kita rasai, betul ke? Malangnya, projek itu sendiri juga terbengkalai, dan anda tidak boleh mengharapkan sokongan - tetapi apabila projek kami tidak hilang, sumbernya ada, kami akan memikirkannya!

Bahagian kedua, pelayan-linux

Pelayan USB/IP yang berkongsi peranti USB melalui rangkaian hanya boleh disediakan pada OS berasaskan Linux. Nah, Linux adalah Linux, jadi pasang pada mesin maya Debian 8 dalam konfigurasi minimum, pergerakan tangan standard:

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

Selesai. Selanjutnya, Internet mencadangkan bahawa anda perlu memuat turun modul usbip, tetapi - hello, rake pertama. Tiada modul sedemikian. Dan semuanya kerana kebanyakan manual pada rangkaian merujuk kepada cawangan lama 0.1.x, dan dalam 0.2.0 terkini, modul usbip mempunyai nama yang berbeza.

Oleh itu:

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

Baiklah, mari tambahkan baris berikut pada /etc/modules untuk memuatkannya secara automatik pada permulaan sistem:

usbip-core
usbip-host
vhci-hcd

Mari mulakan pelayan usbip:

sudo usbipd -D

Selanjutnya, minda sejagat memberitahu kami bahawa usbip disertakan dengan skrip yang membolehkan kami mengurus pelayan - tunjukkan peranti mana yang akan dikongsi melalui rangkaian, lihat status dan sebagainya. Di sini alat taman lain menanti kami - skrip ini dalam cawangan 0.2.x, sekali lagi, telah dinamakan semula. Anda boleh mendapatkan senarai arahan dengan

sudo usbip

Selepas membaca huraian arahan, menjadi jelas bahawa untuk berkongsi peranti USB yang diperlukan, usbip ingin mengetahui ID Basnya. Penonton yang dihormati, garu nombor tiga ada di arena: ID Bas yang akan diberikan kepada kami lsusb (ia nampaknya cara yang paling jelas) - ia tidak sesuai dengannya! Hakikatnya ialah usbip mengabaikan perkakasan seperti hab USB. Oleh itu, kami akan menggunakan arahan terbina dalam:

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

Nota: selepas ini dalam penyenaraian saya akan menerangkan segala-galanya menggunakan contoh kunci USB khusus saya. Nama perkakasan anda dan pasangan VID:PID boleh dan akan berbeza. Milik saya dipanggil Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.

Kini kami boleh berkongsi peranti kami:

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

Hurrah, kawan-kawan!

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)

Tiga sorakan, kawan! Pelayan berkongsi kepingan besi melalui rangkaian, dan kami boleh menyambungkannya! Ia kekal hanya untuk menambah autostart daemon usbip ke /etc/rc.local

usbipd -D

Bahagian ketiga, pihak pelanggan dan mengelirukan

Saya cuba menyambungkan peranti yang dikongsi melalui rangkaian ke mesin Debian dengan segera pada pelayan yang sama, dan semuanya bersambung dengan baik:

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

Mari beralih ke Windows. Dalam kes saya ia adalah Windows Server 2008R2 Standard Edition. Panduan rasmi meminta anda memasang pemacu terlebih dahulu. Prosedur ini diterangkan dengan sempurna dalam readme yang dilampirkan pada klien windows, kami melakukan segala-galanya seperti yang tertulis, semuanya berfungsi. Pada XP ia juga berfungsi tanpa sebarang masalah.

Selepas membongkar klien, kami cuba memasang kunci kami:

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. Sesuatu telah berlaku. Kami menggunakan kemahiran Google. Terdapat serpihan menyebut bahawa ada sesuatu yang tidak kena dengan pemalar; di bahagian pelayan, pembangun menukar versi protokol apabila bertukar kepada versi 0.2.0, tetapi mereka terlupa untuk melakukan ini dalam klien Win. Penyelesaian yang dicadangkan ialah menukar pemalar dalam kod sumber dan membina semula klien.

Tetapi saya benar-benar tidak mahu memuat turun Visual Studio demi prosedur ini. Tetapi saya mempunyai Hiew lama yang baik. Dalam kod sumber, pemalar diisytiharkan sebagai kata ganda. Mari lihat dalam fail untuk 0x00000106, menggantikannya dengan 0x00000111. Ingat, susunan bait diterbalikkan. Hasilnya ialah dua perlawanan, tampalan:

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

Eeeee... ya!

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

Ini boleh menamatkan pembentangan, tetapi muzik tidak dimainkan lama. Selepas but semula pelayan, saya mendapati bahawa peranti pada klien tidak dipasang!

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

Dan itu sahaja. Malah Google yang serba tahu tidak dapat menjawab ini untuk saya. Dan pada masa yang sama, arahan untuk memaparkan peranti yang tersedia pada pelayan menunjukkan dengan betul - inilah kuncinya, anda boleh memasangnya. Saya cuba memasang dari bawah Linux - ia berfungsi! Dan jika sekarang cuba dari bawah Windows? Oh sial - ia berkesan!

Rake terakhir: sesuatu tidak ditambahkan dalam kod pelayan. Apabila berkongsi peranti, ia tidak membaca bilangan deskriptor USB daripadanya. Dan apabila memasang peranti dari bawah Linux, medan ini diisi. Malangnya, saya sudah biasa dengan pembangunan di bawah Linux pada peringkat "buat && buat pemasangan". Oleh itu, masalah itu diselesaikan dengan hack yang agak kotor - menambah /etc/rc.local

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

Bahagian akhir

Selepas beberapa kali bermain-main, ia berfungsi. Hasil yang diingini telah diperolehi, kini kunci boleh dipasang ke mana-mana PC (dan tidak dipasang, sudah tentu juga), termasuk yang di luar segmen rangkaian penyiaran. Jika anda mahu, anda boleh melakukannya menggunakan skrip shell. Apa yang bagus - keseronokan adalah percuma.
Saya berharap bahawa pengalaman saya akan membantu habrazhiteli untuk mengelilingi garu yang dicetak di dahi saya. Terima kasih kerana memberi perhatian!

Sumber: www.habr.com

Tambah komen