{"id":485250,"date":"2026-06-27T10:08:24","date_gmt":"2026-06-27T10:08:24","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=485250"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=485250","title":{"rendered":"\u041a\u0430\u043a \u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b GoPro Hero 13 \u043a \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0443 \u2014 \u0430 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u043b KDE"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0435 \u0441\u0442\u043e\u043b\u044c \u0434\u0430\u0432\u043d\u043e \u0441\u0443\u043f\u0440\u0443\u0433\u0430 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0430 \u043c\u0435\u043d\u044f \u043f\u0435\u0440\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 GoPro \u043d\u0430 \u043c\u043e\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a. \u041a\u043e\u0433\u0434\u0430-\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u0431\u044b\u043b\u0438 \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 USB-\u0444\u043b\u0435\u0448\u043a\u0430\u043c\u0438 \u0441 FAT \u044d\u0442\u043e \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0430 \u0432\u043e\u0442 \u0441 MTP-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0431\u044b\u0432\u0430\u0435\u0442 \u0438 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b4\/79\/e5\/b479e5e1e84b7d735b488217e8d944e7.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/b4\/79\/e5\/b479e5e1e84b7d735b488217e8d944e7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/b4\/79\/e5\/b479e5e1e84b7d735b488217e8d944e7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u044f\u0442\u044c <a href=\"https:\/\/github.com\/whoozle\/android-file-transfer-linux\" rel=\"noopener noreferrer nofollow\">Android File Transfer for Linux<\/a> \u0438 \u043f\u0435\u0440\u0435\u043b\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e &#8212; \u043d\u043e \u044f \u0443\u043f\u0435\u0440\u0442\u044b\u0439, \u0438 \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u0427\u0438\u0442\u0430\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/h3>\n<p>\u0425\u043e\u0440\u043e\u0448\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0437\u043d\u0430\u0435\u043c \u043f\u0430\u0440\u0443 vid\/pid \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e:<\/p>\n<pre><code>$ lsusb|grep -i goproBus 001 Device 045: ID 2672:0059 GoPro HERO13 Black$ lsusb -d2672:0059 -vvv &gt;descriptor.txt<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0435\u043a\u0441\u0442\u0430 \u043c\u043d\u043e\u0433\u043e &#8212; \u0443\u0431\u0438\u0440\u0430\u044e \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440):<\/p>\n<details class=\"spoiler\">\n<summary>descriptor.txt<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>Bus 001 Device 008: ID 2672:0059 GoPro HERO13 BlackDevice Descriptor:  bLength                18  bDescriptorType         1  bcdUSB               2.10  bDeviceClass            0 [unknown]  bDeviceSubClass         0 [unknown]  bDeviceProtocol         0   bMaxPacketSize0        64  idVendor           0x2672 GoPro  idProduct          0x0059 HERO13 Black  bcdDevice            0.01  iManufacturer           1 GoPro  iProduct                2 HERO13 Black  iSerial                 3 C3534250246817  bNumConfigurations      1  Configuration Descriptor:    bLength                 9    bDescriptorType         2    wTotalLength       0x007c    bNumInterfaces          3    bConfigurationValue     1    iConfiguration          4 Generic Config    bmAttributes         0xc0      Self Powered    MaxPower              100mA    Interface Association:      bLength                 8      bDescriptorType        11      bFirstInterface         0      bInterfaceCount         2      bFunctionClass          2 Communications      bFunctionSubClass      13 [unknown]      bFunctionProtocol       0       iFunction               8 CDC NCM    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        0      bAlternateSetting       0      bNumEndpoints           1      bInterfaceClass         2 Communications      bInterfaceSubClass     13 [unknown]      bInterfaceProtocol      0       iInterface              5 CDC Network Control Model (NCM)      CDC Header:        bcdCDC               1.10      CDC Union:        bMasterInterface        0        bSlaveInterface         1       CDC Ethernet:        iMacAddress                      6 0457474BB944        bmEthernetStatistics    0x00000000        wMaxSegmentSize               1514        wNumberMCFilters            0x0000        bNumberPowerFilters              0      CDC NCM:        bcdNcmVersion        1.00        bmNetworkCapabilities 0x11          crc mode          packet filter      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x82  EP 2 IN        bmAttributes            3          Transfer Type            Interrupt          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0010  1x 16 bytes        bInterval               9    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        1      bAlternateSetting       0      bNumEndpoints           0      bInterfaceClass        10 CDC Data      bInterfaceSubClass      0 [unknown]      bInterfaceProtocol      1       iInterface              7 CDC Network Data    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        1      bAlternateSetting       1      bNumEndpoints           2      bInterfaceClass        10 CDC Data      bInterfaceSubClass      0 [unknown]      bInterfaceProtocol      1       iInterface              7 CDC Network Data      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x81  EP 1 IN        bmAttributes            2          Transfer Type            Bulk          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0200  1x 512 bytes        bInterval               0      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x01  EP 1 OUT        bmAttributes            2          Transfer Type            Bulk          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0200  1x 512 bytes        bInterval               0    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        2      bAlternateSetting       0      bNumEndpoints           3      bInterfaceClass         6 Imaging      bInterfaceSubClass      1 Still Image Capture      bInterfaceProtocol      1 Picture Transfer Protocol (PIMA 15470)      iInterface             10 MTP      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x83  EP 3 IN        bmAttributes            2          Transfer Type            Bulk          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0200  1x 512 bytes        bInterval               0      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x02  EP 2 OUT        bmAttributes            2          Transfer Type            Bulk          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0200  1x 512 bytes        bInterval               0      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x84  EP 4 IN        bmAttributes            3          Transfer Type            Interrupt          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x001c  1x 28 bytes        bInterval               6Binary Object Store Descriptor:  bLength                 5  bDescriptorType        15  wTotalLength       0x0016  bNumDeviceCaps          2  USB 2.0 Extension Device Capability:    bLength                 7    bDescriptorType        16    bDevCapabilityType      2    bmAttributes   0x0000010e      BESL Link Power Management (LPM) Supported    BESL value      256 us   SuperSpeed USB Device Capability:    bLength                10    bDescriptorType        16    bDevCapabilityType      3    bmAttributes         0x00    wSpeedsSupported   0x000f      Device can operate at Low Speed (1Mbps)      Device can operate at Full Speed (12Mbps)      Device can operate at High Speed (480Mbps)      Device can operate at SuperSpeed (5Gbps)    bFunctionalitySupport   1      Lowest fully-functional device speed is Full Speed (12Mbps)    bU1DevExitLat          10 micro seconds    bU2DevExitLat         511 micro secondsDevice Status:     0x0001  Self Powered<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u043a\u0438\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:<\/p>\n<ul>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b 0 \u0438 1 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b CDC Network \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0438\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u043c\u0435\u0440\u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e USB.<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 2 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b PTP (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 &#8212; \u0435\u0433\u043e MTP-\u043d\u0430\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e) \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 0x83 (EP 3 IN \/ Bulk), 0x02 (EP 2 OUT \/ Bulk) \u0438 0x84 (EP 4 IN \/ Interrupt)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0435\u0441\u0442\u044c \u0442\u043e\u0447\u043a\u0430 \u0441 \u0442\u0438\u043f\u043e\u043c interrupt in, \u043c\u043e\u0436\u043d\u043e \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u043b\u0435\u0439 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0435\u043a\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u201c\u0441\u043e\u0431\u044b\u0442\u0438\u0439\u201d, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u0435 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u043e\u0447\u0435\u043a \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u0438\u043c\u0438 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 PTP\/MTP \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0438 \u0441\u0430\u043c\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0442\u0438\u043f\u0430 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440\u0430 &#8212; \u043a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 USB \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Wireshark<\/h3>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u201c\u043d\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u0435\u201d &#8212; \u0432 \u0447\u0435\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0441\u0440\u0435\u0434\u0438 \u0445\u0430\u0431\u0440\u0430\u0436\u0438\u0442\u0435\u043b\u0435\u0439 \u0441\u043d\u0438\u0444\u0444\u0435\u0440. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u044f\u0434\u0440\u0430 \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 \u0440\u0443\u0442\u0430:<\/p>\n<pre><code>$ sudo modprobe usbmon$ sudo chgrp wireshark \/dev\/usbmon*$ sudo chmod g+r \/dev\/usbmon*$ wireshark<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 usbmon0. \u041d\u0443 \u0430 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0435 \u0437\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 &#8212; \u0430 \u0442\u0430\u043a \u0436\u0435 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e GoPro \u043f\u043e \u0431\u0435\u0437\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 CDC Network, \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 URB-\u044b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043d\u043e\u043c\u0435\u0440\u0430\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a:<\/p>\n<pre><code>usb.device_address==30 &amp;&amp; usb.endpoint_address in {0x83, 0x02, 0x84}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430: <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/a1\/a8\/51\/a1a8513f7325df1d226091538cceb8d7.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/a1\/a8\/51\/a1a8513f7325df1d226091538cceb8d7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/a1\/a8\/51\/a1a8513f7325df1d226091538cceb8d7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u043d\u0438\u043a\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0431\u0435\u0437 \u0434\u0438\u0441\u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0434\u043e\u0440\u043e\u0432\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e AI-\u043c\u0430\u0433\u0438\u0438.<\/p>\n<h3>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u0438\u0441\u0441\u0435\u043a\u0442\u043e\u0440<\/h3>\n<p>\u042f \u0437\u0430\u043a\u0438\u043d\u0443\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0432 Claude Code \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c. \u0427\u0442\u043e\u0431\u044b \u041a\u043b\u043e\u0434 \u043c\u043e\u0433 \u0441\u0430\u043c\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u0442\u0430\u0432\u0438\u043c tshark \u0438 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0434\u0430\u043c\u043f. (\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b MCP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f wireshark, \u043d\u043e \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442).<\/p>\n<blockquote>\n<p>Examine the docs and implement an MTP over USB protocol dissector for Wireshark 4.2.2 in Lua. You\u2019re free to use tshark for the testing purposes. I uploaded an example of MTP communication in pcapng format for your reference &#8212; but keep in mind that it also contains CDC Network class communication that should be ignored.<\/p>\n<\/blockquote>\n<p>\u0417\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f <a href=\"https:\/\/gist.github.com\/vdudouyt\/67e506b64b60cc6a859abbabdccc8e8c\" rel=\"noopener noreferrer nofollow\">mtp.lua<\/a> \u0432 \/usr\/lib\/x86_64-linux-gnu\/wireshark\/plugins\/ \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043c\u043f \u043f\u043e \u043d\u043e\u0432\u043e\u0439:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/2c\/d2\/20\/2cd220a15f828786325fbaf23cb2cdb0.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/2c\/d2\/20\/2cd220a15f828786325fbaf23cb2cdb0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/2c\/d2\/20\/2cd220a15f828786325fbaf23cb2cdb0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 &#8212; \u0442\u0430\u043a \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u0414\u0430\u043b\u0435\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0445\u043e\u0441\u0442\u043e\u043c \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430.<\/p>\n<h3>\u041a\u0430\u043a \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443<\/h3>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 URB. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0445\u043e\u0441\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 Storage &#8212; \u0430 \u0432 \u043e\u0442\u0432\u0435\u0442 \u0435\u043c\u0443 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a: <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/73\/76\/68\/737668e92768177e6bcf00f115023626.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/73\/76\/68\/737668e92768177e6bcf00f115023626.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/73\/76\/68\/737668e92768177e6bcf00f115023626.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0435\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0434\u0430\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0442\u043e\u0440\u0435\u0434\u0436\u0443 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e USB, \u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0435\u0440\u0435\u0437 1-2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0425\u043e\u0442\u044f \u0432 \u043c\u0438\u0440\u0435 MTP \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u0435\u0434\u0436\u0435\u0439 \u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u201c\u043d\u0430 \u043b\u0435\u0442\u0443\u201d \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u044f\u043c \u0447\u0430\u0441\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0435\u0439 &#8212; \u043d\u043e \u0438 \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e: \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043a\u0438\u043d\u0443\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 PTP_EC_StoreAdded \u0438\u043b\u0438 PTP_EC_StoreRemoved, \u043e\u0442\u0432\u0435\u0442\u0438\u0432 \u043d\u0430 \u201c\u0432\u0438\u0441\u044f\u0449\u0438\u0439\u201d \u043d\u0430 \u0445\u043e\u0441\u0442-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 interrupt-\u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0432 \u0442\u0440\u0430\u0444\u0438\u043a \u043f\u043e 0x84-\u0439 \u0442\u043e\u0447\u043a\u0435 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e kiod \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430: \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u201c\u0432\u0438\u0441\u044f\u0449\u0438\u0439\u201d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 interrupt transfer &#8212; \u0430 \u0435\u0433\u043e \u043d\u0435\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e flow control \u0432 USB \u0438 &#171;\u0432\u0438\u0441\u044f\u0449\u0438\u0435&#187; \u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p> \u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u043c \u0434\u043b\u044f \u041e\u0421 (transfer) \u0443\u0440\u043e\u0432\u043d\u0435: <\/p>\n<ul>\n<li>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0440\u0430\u0439\u0432\u0435\u0440 HID \u0438\u043b\u0438 libusb-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435) \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 interrupt in \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440, \u0438 \u0447\u0435\u0440\u0435\u0437 USB-\u0441\u0442\u0435\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u043d \u043f\u0440\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0445\u043e\u0441\u0442-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>\u0425\u043e\u0441\u0442-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0442\u043e\u043a\u0435\u043d IN \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043e\u0442 \u043d\u0435\u0433\u043e \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u043e\u043c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u043e \u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043b\u0438\u0431\u043e NAK \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0441\u0442-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u043b NAK, \u0442\u043e \u043e\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f &#8212; \u0430 \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u201c\u0432\u0438\u0441\u0435\u0442\u044c\u201d<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u043b\u043e \u0433\u043e\u0442\u043e\u0432\u043e \u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u0432\u0438\u043d\u0443\u043b \u043c\u044b\u0448\u043a\u043e\u0439 \u0438\u043b\u0438 \u043d\u0430\u0436\u0430\u043b \u043a\u043b\u0430\u0432\u0438\u0448\u0443 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435 \u0438 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c HID-\u0440\u0435\u043f\u043e\u0440\u0442) \u0442\u043e \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0441 \u0445\u043e\u0441\u0442-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043e\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u043e\u043c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442 &#8212; \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0442\u043e\u0442\u0447\u0430\u0441 \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0432\u0435\u0440\u0435\u043d \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440\u043e\u0432 \u043a\u0440\u043e\u043c\u0435 isochronous. \u041e\u0434\u043d\u0430\u043a\u043e, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u043f\u0440\u043e\u0441\u0430 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 interrupt \u0438 \u0440\u0430\u0432\u0435\u043d bInterval, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u0442\u043e\u0447\u043a\u0438.<\/p>\n<p>\u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u043d\u0438 \u041e\u0421, \u043d\u0438 wireshark \u0432\u0441\u0435 \u044d\u0442\u0438 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u043f\u0440\u0438\u0441\u0435\u0434\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043d\u0435 \u0432\u0438\u0434\u044f\u0442. \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0438\u0436\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043b\u0438\u043d\u0438\u044f\u043c USB.<\/p>\n<\/div>\n<\/details>\n<h3>\u041f\u0430\u0442\u0447\u0438\u043c KDE<\/h3>\n<p> \u0421\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 PTP_EC_StoreAdded \u0438 \u043a\u0430\u043a-\u0442\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0440\u0435\u0434\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0432 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 kiod \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e. <\/p>\n<p>\u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u0430\u043a\u0435\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f kf5\/kiod\/kmtpd.so \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438:<\/p>\n<pre><code>$ apt-file search kf5\/kiod\/kmtpd.sokio-extras: \/usr\/lib\/x86_64-linux-gnu\/qt5\/plugins\/kf5\/kiod\/kmtpd.so$ apt-get source kio-extrasdpkg-source: info: unpacking kio-extras_23.08.5.orig.tar.xzdpkg-source: info: unpacking kio-extras_23.08.5-0ubuntu5.debian.tar.xz<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0411\u0435\u0433\u043b\u043e\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 kio-extras\/mtp\/ \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430, \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0440\u0435\u0434\u044b \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u0430. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0432\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435\u043a\u0438\u0439 dirty flag, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0440\u0435\u0434\u0443:<\/p>\n<pre><code class=\"cpp\">device-&gt;setDevicesUpdatedStatus(true);org::kde::KDirNotify::emitFilesAdded(device-&gt;url());<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u044d\u0442\u0438\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f &#8212; \u043e\u0434\u043d\u0430\u043a\u043e, \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u043e\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0442\u0440\u0435\u0434\u0435. \u0427\u0442\u043e \u0436, Qt way &#8212; \u0442\u0430\u043a Qt way: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 MTPEventWorker \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u043a\u0438\u0434\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u044b storageAdded \u0438 storageRemoved \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<pre><code class=\"cpp\">void MTPEventWorker::run(){    qCDebug(LOG_KIOD_KMTPD) &lt;&lt; \"MTPEventWorker: starting event loop\";    while (!m_stop) {        LIBMTP_event_t event;        uint32_t storage_id = 0;        const int ret = LIBMTP_Read_Event(m_device, &amp;event, &amp;storage_id);        if (ret != 0) {            qCDebug(LOG_KIOD_KMTPD) &lt;&lt; \"MTPEventWorker: LIBMTP_Read_Event returned\" &lt;&lt; ret &lt;&lt; \"\u2014 stopping\";            break;        }        switch (event) {        case LIBMTP_EVENT_STORE_ADDED:            qCDebug(LOG_KIOD_KMTPD) &lt;&lt; \"MTPEventWorker: storageAdded storageId=\" &lt;&lt; storage_id;            Q_EMIT storageAdded(storage_id);            break;        case LIBMTP_EVENT_STORE_REMOVED:            qCDebug(LOG_KIOD_KMTPD) &lt;&lt; \"MTPEventWorker: storageRemoved storageId=\" &lt;&lt; storage_id;            Q_EMIT storageRemoved(storage_id);            break;        default:            break;        }    }    Q_EMIT finished();}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 MTPDevice:<\/p>\n<pre><code class=\"cpp\">m_eventThread = new QThread(this);m_eventWorker = new MTPEventWorker(m_mtpdevice);m_eventWorker-&gt;moveToThread(m_eventThread);connect(m_eventThread, &amp;QThread::started,  m_eventWorker, &amp;MTPEventWorker::run);connect(m_eventWorker, &amp;MTPEventWorker::finished, m_eventThread, &amp;QThread::quit);connect(m_eventThread, &amp;QThread::finished, m_eventWorker, &amp;QObject::deleteLater);connect(m_eventWorker, &amp;MTPEventWorker::storageAdded,   this, &amp;MTPDevice::onStorageAdded);connect(m_eventWorker, &amp;MTPEventWorker::storageRemoved, this, &amp;MTPDevice::onStorageRemoved);m_eventThread-&gt;start();<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u043e\u0442 MTPDevice::storageAdded() &#8212; \u0432 \u043d\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u043e\u0440\u0435\u0434\u0436 \u0432 m_storages \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"cpp\">void MTPDevice::onStorageAdded(quint32 storageId){    LIBMTP_Get_Storage(m_mtpdevice, LIBMTP_STORAGE_SORTBY_NOTSORTED);    for (const MTPStorage *s : qAsConst(m_storages)) {        if (s-&gt;storageId() == storageId)            return;    }    for (LIBMTP_devicestorage_t *storage = m_mtpdevice-&gt;storage;         storage != nullptr; storage = storage-&gt;next) {        if (storage-&gt;id == storageId) {            int index = m_storages.size();            auto *s = new MTPStorage(                QStringLiteral(\"%1\/storage%2\").arg(m_dbusObjectName).arg(index),                storage, this);            m_storages.append(s);            qCDebug(LOG_KIOD_KMTPD) &lt;&lt; \"StorageAdded: registered storage\" &lt;&lt; storageId;            break;        }    }    this-&gt;setDevicesUpdatedStatus(true);    org::kde::KDirNotify::emitFilesAdded(this-&gt;url());}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>MTPDevice::onStorageRemoved &#8212; \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">void MTPDevice::onStorageRemoved(quint32 storageId){    for (int i = 0; i &lt; m_storages.size(); ++i) {        if (m_storages[i]-&gt;storageId() == storageId) {            qCDebug(LOG_KIOD_KMTPD) &lt;&lt; \"StorageRemoved: unregistering storage\" &lt;&lt; storageId;            QUrl storageUrl = url();            storageUrl.setPath(storageUrl.path() + QLatin1Char('\/') + m_storages[i]-&gt;description());            delete m_storages.takeAt(i);            this-&gt;setDevicesUpdatedStatus(true);            org::kde::KDirNotify::emitFilesRemoved({storageUrl});            break;        }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0432 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 MTPDevice:<\/p>\n<pre><code class=\"cpp\">if (m_eventThread &amp;&amp; m_eventThread-&gt;isRunning()) {    m_eventWorker-&gt;stop();    if (!m_eventThread-&gt;wait(2000)) {        m_eventThread-&gt;terminate();        m_eventThread-&gt;wait();    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u044f \u043e\u043f\u0443\u0441\u043a\u0430\u044e \u0432\u0441\u044f\u043a\u0443\u044e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u0449\u0438\u043d\u0443 \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0430\u0442\u0447\u0430 &#8212; \u043e\u043d \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c, \u0432 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e, \u0432\u0441\u0435 &#8212; \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442:<\/p>\n<pre><code>$ dch -v 4:23.08.5-0vdudouyt # \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u043d\u0435\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439$ fakeroot dpkg-buildpackage -nc$ sudo dpkg -i kio-extras_23.08.5-0vdudouyt_amd64.deb kio-extras-data_23.08.5-0vdudouyt_all.deb$ killall -9 kiod5<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c GoPro \u043e\u043f\u044f\u0442\u044c. \u0418 &#8212; \u0443\u0440\u0430, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u0447\u0435\u0437\u043b\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/78\/5a\/08\/785a08248c1e33aedc5e84e587ee1b2b.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/78\/5a\/08\/785a08248c1e33aedc5e84e587ee1b2b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/78\/5a\/08\/785a08248c1e33aedc5e84e587ee1b2b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>\u0410 \u0447\u0442\u043e \u0441 \u0430\u043d\u0434\u0440\u043e\u0438\u0434\u0430\u043c\u0438?<\/h3>\n<p> \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e GoPro \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0438\u043c\u0435\u044e\u0449\u0438\u043c \u0441\u043a\u043b\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 GetStorageId. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 Android-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u0438\u0430\u043b\u043e\u0433 &#171;\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435&#187;. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 PTP_EC_StoreAdded \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c device address \u0434\u0435\u0440\u043d\u0443\u0432 pull-up \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 &#8212; \u0438 \u044d\u0442\u0443 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e KDE \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443 \u0443\u043c\u0435\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. <\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043d\u044b\u043d\u0435 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b USB \u0438 MTP, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u043c\u0438 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043b\u0443\u0447\u0430\u044f\u043c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u0433\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0430\u0442\u0447\u0430, \u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c <a href=\"https:\/\/gist.github.com\/vdudouyt\/feaea05d2ce4f846545fcd4d319b0a30\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1052604\/\">https:\/\/habr.com\/ru\/articles\/1052604\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041d\u0435 \u0441\u0442\u043e\u043b\u044c \u0434\u0430\u0432\u043d\u043e \u0441\u0443\u043f\u0440\u0443\u0433\u0430 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0430 \u043c\u0435\u043d\u044f \u043f\u0435\u0440\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 GoPro \u043d\u0430 \u043c\u043e\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a. \u041a\u043e\u0433\u0434\u0430-\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u0431\u044b\u043b\u0438 \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 USB-\u0444\u043b\u0435\u0448\u043a\u0430\u043c\u0438 \u0441 FAT \u044d\u0442\u043e \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0430 \u0432\u043e\u0442 \u0441 MTP-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0431\u044b\u0432\u0430\u0435\u0442 \u0438 \u0442\u0430\u043a:\u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u044f\u0442\u044c Android File Transfer for Linux \u0438 \u043f\u0435\u0440\u0435\u043b\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e &#8212; \u043d\u043e \u044f \u0443\u043f\u0435\u0440\u0442\u044b\u0439, \u0438 \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.\u0427\u0438\u0442\u0430\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0425\u043e\u0440\u043e\u0448\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0437\u043d\u0430\u0435\u043c \u043f\u0430\u0440\u0443 vid\/pid \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e:$ lsusb|grep -i goproBus 001 Device 045: ID 2672:0059 GoPro HERO13 Black$ lsusb -d2672:0059 -vvv &gt;descriptor.txt\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0435\u043a\u0441\u0442\u0430 \u043c\u043d\u043e\u0433\u043e &#8212; \u0443\u0431\u0438\u0440\u0430\u044e \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440):descriptor.txtBus 001 Device 008: ID 2672:0059 GoPro HERO13 BlackDevice Descriptor:  bLength                18  bDescriptorType         1  bcdUSB               2.10  bDeviceClass            0 [unknown]  bDeviceSubClass         0 [unknown]  bDeviceProtocol         0   bMaxPacketSize0        64  idVendor           0x2672 GoPro  idProduct          0x0059 HERO13 Black  bcdDevice            0.01  iManufacturer           1 GoPro  iProduct                2 HERO13 Black  iSerial                 3 C3534250246817  bNumConfigurations      1  Configuration Descriptor:    bLength                 9    bDescriptorType         2    wTotalLength       0x007c    bNumInterfaces          3    bConfigurationValue     1    iConfiguration          4 Generic Config    bmAttributes         0xc0      Self Powered    MaxPower              100mA    Interface Association:      bLength                 8      bDescriptorType        11      bFirstInterface         0      bInterfaceCount         2      bFunctionClass          2 Communications      bFunctionSubClass      13 [unknown]      bFunctionProtocol       0       iFunction               8 CDC NCM    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        0      bAlternateSetting       0      bNumEndpoints           1      bInterfaceClass         2 Communications      bInterfaceSubClass     13 [unknown]      bInterfaceProtocol      0       iInterface              5 CDC Network Control Model (NCM)      CDC Header:        bcdCDC               1.10      CDC Union:        bMasterInterface        0        bSlaveInterface         1       CDC Ethernet:        iMacAddress                      6 0457474BB944        bmEthernetStatistics    0x00000000        wMaxSegmentSize               1514        wNumberMCFilters            0x0000        bNumberPowerFilters              0      CDC NCM:        bcdNcmVersion        1.00        bmNetworkCapabilities 0x11          crc mode          packet filter      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x82  EP 2 IN        bmAttributes            3          Transfer Type            Interrupt          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0010  1x 16 bytes        bInterval               9    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        1      bAlternateSetting       0      bNumEndpoints           0      bInterfaceClass        10 CDC Data      bInterfaceSubClass      0 [unknown]      bInterfaceProtocol      1       iInterface              7 CDC Network Data    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        1      bAlternateSetting       1      bNumEndpoints           2      bInterfaceClass        10 CDC Data      bInterfaceSubClass      0 [unknown]      bInterfaceProtocol      1       iInterface              7 CDC Network Data      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x81  EP 1 IN        bmAttributes            2          Transfer Type            Bulk          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0200  1x 512 bytes        bInterval               0      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x01  EP 1 OUT        bmAttributes            2          Transfer Type            Bulk          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0200  1x 512 bytes        bInterval               0    Interface Descriptor:      bLength                 9      bDescriptorType         4      bInterfaceNumber        2      bAlternateSetting       0      bNumEndpoints           3      bInterfaceClass         6 Imaging      bInterfaceSubClass      1 Still Image Capture      bInterfaceProtocol      1 Picture Transfer Protocol (PIMA 15470)      iInterface             10 MTP      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x83  EP 3 IN        bmAttributes            2          Transfer Type            Bulk          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0200  1x 512 bytes        bInterval               0      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x02  EP 2 OUT        bmAttributes            2          Transfer Type            Bulk          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x0200  1x 512 bytes        bInterval               0      Endpoint Descriptor:        bLength                 7        bDescriptorType         5        bEndpointAddress     0x84  EP 4 IN        bmAttributes            3          Transfer Type            Interrupt          Synch Type               None          Usage Type               Data        wMaxPacketSize     0x001c  1x 28 bytes        bInterval               6Binary Object Store Descriptor:  bLength                 5  bDescriptorType        15  wTotalLength       0x0016  bNumDeviceCaps          2  USB 2.0 Extension Device Capability:    bLength                 7    bDescriptorType        16    bDevCapabilityType      2    bmAttributes   0x0000010e      BESL Link Power Management (LPM) Supported    BESL value      256 us   SuperSpeed USB Device Capability:    bLength                10    bDescriptorType        16    bDevCapabilityType      3    bmAttributes         0x00    wSpeedsSupported   0x000f      Device can operate at Low Speed (1Mbps)      Device can operate at Full Speed (12Mbps)      Device can operate at High Speed (480Mbps)      Device can operate at SuperSpeed (5Gbps)    bFunctionalitySupport   1      Lowest fully-functional device speed is Full Speed (12Mbps)    bU1DevExitLat          10 micro seconds    bU2DevExitLat         511 micro secondsDevice Status:     0x0001  Self Powered\u041a\u0430\u043a\u0438\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b:\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b 0 \u0438 1 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b CDC Network \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0438\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0430\u043c\u0435\u0440\u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e USB.\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 2 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b PTP (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 &#8212; \u0435\u0433\u043e MTP-\u043d\u0430\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e) \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 0x83 (EP 3 IN \/ Bulk), 0x02 (EP 2 OUT \/ Bulk) \u0438 0x84 (EP 4 IN \/ Interrupt)\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0435\u0441\u0442\u044c \u0442\u043e\u0447\u043a\u0430 \u0441 \u0442\u0438\u043f\u043e\u043c interrupt in, \u043c\u043e\u0436\u043d\u043e \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u043b\u0435\u0439 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0435\u043a\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u201c\u0441\u043e\u0431\u044b\u0442\u0438\u0439\u201d, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u0435 \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u043e\u0447\u0435\u043a \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u0438\u043c\u0438 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 PTP\/MTP \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0438 \u0441\u0430\u043c\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0442\u0438\u043f\u0430 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440\u0430 &#8212; \u043a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 USB \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432.\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Wireshark\u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u201c\u043d\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u0435\u201d &#8212; \u0432 \u0447\u0435\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0441\u0440\u0435\u0434\u0438 \u0445\u0430\u0431\u0440\u0430\u0436\u0438\u0442\u0435\u043b\u0435\u0439 \u0441\u043d\u0438\u0444\u0444\u0435\u0440. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u044f\u0434\u0440\u0430 \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 \u0440\u0443\u0442\u0430:$ sudo modprobe usbmon$ sudo chgrp wireshark \/dev\/usbmon*$ sudo chmod g+r \/dev\/usbmon*$ wireshark\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 usbmon0. \u041d\u0443 \u0430 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0435 \u0437\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 USB-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 &#8212; \u0430 \u0442\u0430\u043a \u0436\u0435 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e GoPro \u043f\u043e \u0431\u0435\u0437\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 CDC Network, \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 URB-\u044b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043d\u043e\u043c\u0435\u0440\u0430\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a:usb.device_address==30 &amp;&amp; usb.endpoint_address in {0x83, 0x02, 0x84}\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430: \u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u043d\u0438\u043a\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0431\u0435\u0437 \u0434\u0438\u0441\u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0434\u043e\u0440\u043e\u0432\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e AI-\u043c\u0430\u0433\u0438\u0438.\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u0438\u0441\u0441\u0435\u043a\u0442\u043e\u0440\u042f \u0437\u0430\u043a\u0438\u043d\u0443\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0432 Claude Code \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u043e\u043c. \u0427\u0442\u043e\u0431\u044b \u041a\u043b\u043e\u0434 \u043c\u043e\u0433 \u0441\u0430\u043c\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u0442\u0430\u0432\u0438\u043c tshark \u0438 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0434\u0430\u043c\u043f. (\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b MCP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f wireshark, \u043d\u043e \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442).Examine the docs and implement an MTP over USB protocol dissector for Wireshark 4.2.2 in Lua. You\u2019re free to use tshark for the testing purposes. I uploaded an example of MTP communication in pcapng format for your reference &#8212; but keep in mind that it also contains CDC Network class communication that should be ignored.\u0417\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f mtp.lua \u0432 \/usr\/lib\/x86_64-linux-gnu\/wireshark\/plugins\/ \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043c\u043f \u043f\u043e \u043d\u043e\u0432\u043e\u0439:\u041a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 &#8212; \u0442\u0430\u043a \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u0414\u0430\u043b\u0435\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0445\u043e\u0441\u0442\u043e\u043c \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430.\u041a\u0430\u043a \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 URB. \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0445\u043e\u0441\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 Storage &#8212; \u0430 \u0432 \u043e\u0442\u0432\u0435\u0442 \u0435\u043c\u0443 \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a: \u041d\u0435\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0434\u0430\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0442\u043e\u0440\u0435\u0434\u0436\u0443 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e USB, \u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0435\u0440\u0435\u0437 1-2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-485250","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485250"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485250\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}