ওয়্যারশার্ক ইউএসবি স্পষ্ট ব্যাখ্যা


10

আমি কোনও ইউএসবি (এইচআইডি) ডিভাইসটিকে বিপরীত করার চেষ্টা করছি এবং আমি কীভাবে ওয়্যারশার্কের (লিনাক্সের উইন্ডোজ, উইন্ডোজ বা উইন্ডোজ) ইউএসবি প্রোটোকলের সাথে সম্পর্কিত তা বুঝতে পারি না? আমি www.usb.org থেকে ইউএসবি প্রোটোকলটি দেখেছি।

ওয়্যারশার্ক কী দেখায়?

1) প্যাকেট প্রতি এক লাইন? (টোকেন, ডেটা, হ্যান্ডশেক)

2) লেনদেন প্রতি এক লাইন? (টোকেন + [ডেটা] + হ্যান্ডশেক) (আমার অনুমান)

3) নিয়ন্ত্রণ প্রতিস্থাপন এক লাইন?

লেনদেনের দিকটিও খুব অদ্ভুত (ক্ষেত্রগুলিতে / থেকে)। কমপক্ষে, এটি আমার প্রত্যাশার সাথে মেলে না :-) ... এবং গণনার ডেটা অংশ, লুকানো প্রতিবেদন ইত্যাদি ... কখনও কখনও সেটআপ ডেটা (8 বাইট) দিয়ে প্রদর্শিত হবে বলে মনে হয় এবং আমি কখনও না ... ইউআরবি আসলে কী তা আমি জানি না ... ইউএসবি প্রোটোকলে যতদূর আমি দেখতে পেলাম তার কোনও উল্লেখ নেই ... এটি আমার কাছে মনে হয় যে ওয়্যারশার্ক / ইউএসবোন একটি উচ্চ স্তরের স্তরে সন্ধান করে এবং কী হবে তা অনুমান করার চেষ্টা করে তার থেকে ...

আমি যা দেখতে পাচ্ছি তার উদাহরণ নীচে দেওয়া হল, এখানে আমরা কী দেখতে পাচ্ছি?

ক) এমনকি আমি চশমাগুলিতে bmtype = 0x20 (সেটআপের, ফ্রেম নং = 599) সন্ধান করতে পারি না।

খ) আমার একটি HID ডিভাইস থাকার কারণে, আমি ধরে নিয়েছি এটি একটি প্রতিবেদন / বৈশিষ্ট্য কনফিগার হতে পারে (গণনাটি এই পর্যায়ে পাস হয়েছে)। সুতরাং আমি দিকনির্দেশ (হোস্ট-> ডিভাইস) এর সাথে একমত হতে পারি। কিন্তু তথ্য কোথায়? নাকি এখানে কোন ডেটা ফেজ নেই? ফ্রেম 600 তারপর কি?

গ) ফ্রেম 600 কি? তথ্যটি?

ঘ) ফ্রেম 601 কি? একটি স্ট্যাটাস ACK? ... কিন্তু তারপরে ডেটা এবং ACK এর একই উত্স আছে?

No.     Time        Source                Destination           Protocol Length Info
    599 67.996889   host                  2.0                   USB      36     URB_CONTROL out

Frame 599: 36 bytes on wire (288 bits), 36 bytes captured (288 bits)
USB URB
    USBPcap pseudoheader length: 28
    IRP ID: 0xfffffa800a1e2610
    IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
    URB Function: URB_FUNCTION_CLASS_DEVICE (0x001a)
    IRP information: 0x00, Direction: FDO -> PDO
    URB bus id: 1
    Device address: 2
    Endpoint: 0x00, Direction: OUT
    URB transfer type: URB_CONTROL (0x02)
    Packet Data Length: 8
    Control transfer stage: Setup (0)
    [Response in: 601]
    [bInterfaceClass: Unknown (0xffff)]
URB setup
    bmRequestType: 0x20
        0... .... = Direction: Host-to-device
        .01. .... = Type: Class (0x01)
        ...0 0000 = Recipient: Device (0x00)
    bRequest: 0
    wValue: 0x0000
    wIndex: 0
    wLength: 16

0000  1c 00 10 26 1e 0a 80 fa ff ff 00 00 00 00 1a 00   ...&............
0010  00 01 00 02 00 00 02 08 00 00 00 00 20 00 00 00   ............ ...
0020  00 00 10 00                                       ....

No.     Time        Source                Destination           Protocol Length Info
    600 67.997889   2.0                   host                  USB      44     URB_CONTROL out

Frame 600: 44 bytes on wire (352 bits), 44 bytes captured (352 bits)
USB URB
    USBPcap pseudoheader length: 28
    IRP ID: 0xfffffa800a1e2610
    IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
    URB Function: URB_FUNCTION_CONTROL_TRANSFER (0x0008)
    IRP information: 0x01, Direction: PDO -> FDO
    URB bus id: 1
    Device address: 2
    Endpoint: 0x00, Direction: OUT
    URB transfer type: URB_CONTROL (0x02)
    Packet Data Length: 16
    Control transfer stage: Data (1)
    [Request in: 599]
    [Time from request: 0.001000000 seconds]
    [bInterfaceClass: Unknown (0xffff)]
CONTROL response data

0000  1c 00 10 26 1e 0a 80 fa ff ff 00 00 00 00 08 00   ...&............
0010  01 01 00 02 00 00 02 10 00 00 00 01 05 04 0d 56   ...............V
0020  fb 82 c0 1d 10 18 cc 02 00 00 00 01               ............

No.     Time        Source                Destination           Protocol Length Info
    601 67.997889   2.0                   host                  USB      28     GET STATUS Status

Frame 601: 28 bytes on wire (224 bits), 28 bytes captured (224 bits)
USB URB
    USBPcap pseudoheader length: 28
    IRP ID: 0xfffffa800a1e2610
    IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
    URB Function: URB_FUNCTION_CONTROL_TRANSFER (0x0008)
    IRP information: 0x01, Direction: PDO -> FDO
    URB bus id: 1
    Device address: 2
    Endpoint: 0x00, Direction: OUT
    URB transfer type: URB_CONTROL (0x02)
    Packet Data Length: 0
    Control transfer stage: Status (2)
    [Request in: 599]
    [Time from request: 0.001000000 seconds]

0000  1c 00 10 26 1e 0a 80 fa ff ff 00 00 00 00 08 00   ...&............
0010  01 01 00 02 00 00 02 00 00 00 00 02               ............

অবশ্যই আমি কিছু মিস করছি। ওয়্যারশার্ক প্রদর্শন প্রোটোকলের সাথে কীভাবে সম্পর্কিত এবং এর উপর একটি সাধারণ ব্যাখ্যা, (এর উপর ভিত্তি করে) উপরের ট্রেসটির অর্থ স্বাগত জানানো হয়!

আমি মৌলিকভাবে এটি স্ট্যাক ওভারফ্লোতে পোস্ট করেছি তবে আমাকে বলা হয়েছিল যে এটি সরাসরি কোনও প্রোগ্রামিং প্রশ্ন নয়। আশা করি এটি এখানে আরও ভাল ফিট করে।

উত্তর:


11

একটি ইউএসবি ইউআরবি আইপি প্যাকেটের মতো এবং একটি ইউএসবি শেষ পয়েন্ট আইপি পোর্টের মতো। ইউএসবি এন্ডপয়েন্টস 0x00-0x7F হোস্টে রয়েছে এবং শেষ পয়েন্ট 0x80-0xFF ডিভাইসে রয়েছে (আমার মনে হয়)। অতএব, সমাপ্তি স্থানান্তরটির দিকটি এনকোড করে। lsusbকোন শেষ নির্দেশক এবং কোন স্থানান্তর কোনও ডিভাইস সমর্থন করে তা আপনাকে দেখাবে।

আমি ওয়্যারশার্ক ক্যাপচারের ক্রিয়াকলাপের একক বোঝাতে উদ্ধৃতিগুলিতে "প্যাকেট" ব্যবহার করব। এগুলি কেবল তারে পাঠানো হচ্ছে না। উদাহরণস্বরূপ, "প্যাকেটগুলি" স্থানান্তর শুরু হওয়ার জন্য টাইমস্ট্যাম্প থাকবে, যদিও এটি ইউএসবি বাসের মাধ্যমে সঞ্চারিত হয়নি।

আমি মনে করি ইউএসবি প্রোটোকলকে স্নিগ্ধ করার সবচেয়ে বিভ্রান্তিকর দিকটি হল আপনি প্রতিটি ইউএসবি ইউআরবির জন্য দুটি ওয়্যারশার্ক "প্যাকেট" দেখতে পান see হোস্ট যখন কিছু স্থানান্তর শুরু করে, এটি হ'ল URB_SUBMIT(ওয়্যারশার্ক প্রদর্শন ফিল্টার usb.urb_type == URB_SUBMIT)। স্থানান্তর সম্পূর্ণ হলে, এটি একটি URB_COMPLETE(ওয়্যারশার্ক প্রদর্শন ফিল্টার usb.urb_type == URB_COMPLETE)

আমি যা বলতে পারি তা থেকে, হোস্ট থেকে ডিভাইসে স্থানান্তরিত হওয়ার পরে, SUBMIT"প্যাকেট "টিতে প্রকৃত ইউএসবি ডেটা প্রেরণ করা থাকে। যখন ডিভাইস থেকে হোস্টে স্থানান্তর হয় (সর্বদা হিসাবে হোস্ট দ্বারা শুরু করা হয়), COMPLETE"প্যাকেট "টিতে প্রকৃত ইউএসবি ডেটা প্রেরণ করা থাকে।

প্রোটোকল বিশ্লেষণের দৃষ্টিকোণ থেকে, অন্যান্য সমস্ত "প্যাকেট" হ'ল একটি বিভ্রান্তি বা একটি ইউআরবি ত্রুটি। বিক্ষিপ্ততাগুলি ফিল্টার করতে, আমি নিম্নলিখিত প্রদর্শন ফিল্টারটি ব্যবহার করি !(usb.urb_type == URB_SUBMIT && usb.endpoint_number.direction == IN) && !(usb.urb_type == URB_COMPLETE && usb.endpoint_number.direction == OUT)

আমি বিশ্বাস করি যে ইউএসবি প্রোটোকলটিতে কিছু হ্যান্ডশেকিং এবং এসিকে এবং retransmitted জড়িত থাকে তবে এটি সমস্ত হোস্ট নিয়ন্ত্রক দ্বারা পরিচালিত হয় এবং ওএস এতে জড়িত নয়। আমি মনে করি না, উদাহরণস্বরূপ, ওএস স্বীকৃতি বা পুনঃস্থাপনের উপর নজর রাখে।

যাইহোক, আমি একটি প্রোটোকল বিশ্লেষণ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করছি। উপরের ফিল্টারিংয়ের পাশাপাশি এটি কেবল শেষ পয়েন্ট নম্বর (দশমিক হিসাবে) এবং ইউএসবি ডেটা প্রদর্শন করে। এটি একটি জিএনইউ / লিনাক্স মেশিনে ইউএসবিমন 1 ডিভাইসটি শুঁকতে ব্যবহার করে এবং ধরে নেওয়া হচ্ছে যে আমি যে ইউএসবি ডিভাইসটি পর্যবেক্ষণ করতে চাই তা বাস 1 এ রয়েছে এবং তার ঠিকানা 11 রয়েছে।

tshark -i usbmon1 -Y "usb.device_address == 11 && !(usb.urb_type == URB_SUBMIT && usb.endpoint_address.direction == IN) && !(usb.urb_type == URB_COMPLETE && usb.endpoint_address.direction == OUT)" -Tfields -e usb.endpoint_address -e usb.capdata


তোমার উত্তরের জন্য ধন্যবাদ, গাস আসলে এটি আমার সমস্ত প্রশ্নের উত্তর দেয় না, তবে আপনি সেরা (অনন্য) উত্তর দিয়েছেন! আমি উদাহরণ হিসাবে অন্তর্ভুক্ত করা ক্যাপচার মন্তব্য (আপনি কি এইচআইডি ডিভাইস থেকে নেওয়া) মন্তব্য করতে আপত্তি করতে চান? এটা আমরা কী দেখছি? ট্রেস কি ক্ষেত্রগুলি কি বলে? আবার ধন্যবাদ!
ব্যবহারকারী415772

3

ওয়্যারশার্ক ইউএসবি লগগুলি ওএস স্তরে সম্পন্ন হয়। লিনাক্সের সাথে ইউএসবমন তৈরি করা ডেটার উপর ভিত্তি করে যা এখানে বর্ণিত লিনাক্সের অভ্যন্তরীণ ইউআরবি কাঠামোর উপর ভিত্তি করে । সুতরাং, কার্নেল এবং ওয়্যারশার্কের মন্তব্য এবং ডক্সের দিকে তাকানো এটি কী তা সম্পর্কে সর্বোত্তম অন্তর্দৃষ্টি সরবরাহ করে।

কার্নেল ডক্স থেকে আমি যা পেয়েছি তা হ'ল প্যাকেটগুলি ইউএসবমন স্ট্রাক্ট এবং তারপরে ডেটা প্রেরিত এবং প্রাপ্ত করা হয়। এটি স্ট্রাক্ট ( এখান থেকে অনুলিপি করা ):

struct usbmon_packet {
    u64 id;         /*  0: URB ID - from submission to callback */
    unsigned char type; /*  8: Same as text; extensible. */
    unsigned char xfer_type; /*    ISO (0), Intr, Control, Bulk (3) */
    unsigned char epnum;    /*     Endpoint number and transfer direction */
    unsigned char devnum;   /*     Device address */
    u16 busnum;     /* 12: Bus number */
    char flag_setup;    /* 14: Same as text */
    char flag_data;     /* 15: Same as text; Binary zero is OK. */
    s64 ts_sec;     /* 16: gettimeofday */
    s32 ts_usec;        /* 24: gettimeofday */
    int status;     /* 28: */
    unsigned int length;    /* 32: Length of data (submitted or actual) */
    unsigned int len_cap;   /* 36: Delivered length */
    union {         /* 40: */
        unsigned char setup[SETUP_LEN]; /* Only for Control S-type */
        struct iso_rec {        /* Only for ISO */
            int error_count;
            int numdesc;
        } iso;
    } s;
    int interval;       /* 48: Only for Interrupt and ISO */
    int start_frame;    /* 52: For ISO */
    unsigned int xfer_flags; /* 56: copy of URB's transfer_flags */
    unsigned int ndesc; /* 60: Actual number of ISO descriptors */
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.