rfc1592.txt

来自「RFC 的详细文档!」· 文本 代码 · 共 1,376 行 · 第 1/5 页

TXT
1,376
字号
   implementation.

   For completeness, byte-by-byte descriptions of the packets to be
   generated by an SNMP DPI API routine query_DPI_port() are provided
   below.  This is probably of little interest to most readers and
   reading the source of a query_DPI_port() function provides much of



Wijnen, Carpenter, Curran, Sehgal & Waters                     [Page 10]

RFC 1592                        SNMP-DPI                      March 1994


   the same information.

3.1.1  SNMP PDU TO GET THE AGENT'S DPI PORT

   As noted, before a TCP/UDP connection to the SNMP agent can be made,
   the sub-agent must learn which port that the agent is listening on.
   To do so, it can issue an SNMP GET for the variable dpiPortForTCP.0
   (1.3.6.1.4.1.2.2.1.1.1.0) or variable dpiPortForUDP.0
   (1.3.6.1.4.1.2.2.1.1.2.0).

   The SNMP PDU can be constructed as shown below.  This PDU must be
   sent to UDP port 161 on the host where the agent runs (probably the
   same host where the sub-agent runs).

   The (SNMPv1) packet shown below is for the TCP port.




































Wijnen, Carpenter, Curran, Sehgal & Waters                     [Page 11]

RFC 1592                        SNMP-DPI                      March 1994


     +-----------------------------------------------------------------+
     | Table 1 (Page 1 of 2). SNMP GET PDU for dpiPortForTCP.0         |
     +---------------+----------------+--------------------------------+
     | OFFSET        | VALUE          | FIELD                          |
     +---------------+----------------+--------------------------------+
     | 0             | 0x30           | ASN.1 header                   |
     +---------------+----------------+--------------------------------+
     | 1             | 37 + len       | PDU_length, see formula below  |
     +---------------+----------------+--------------------------------+
     | 2             | 0x02 0x01 0x00 | SNMP version:                  |
     |               |                | (integer,length=1,value=0)     |
     +---------------+----------------+--------------------------------+
     | 5             | 0x04           | community name (string)        |
     +---------------+----------------+--------------------------------+
     | 6             | len            | length of community name       |
     +---------------+----------------+--------------------------------+
     | 7             | community name | varies                         |
     +---------------+----------------+--------------------------------+
     | 7 + len       | 0xa0 0x1c      | SNMP GET request:              |
     |               |                | request_type=0xa0,length=0x1c  |
     +---------------+----------------+--------------------------------+
     | 7 + len + 2   | 0x02 0x01 0x01 | SNMP request ID:               |
     |               |                | integer,length=1,ID=1          |
     +---------------+----------------+--------------------------------+
     | 7 + len + 5   | 0x02 0x01 0x00 | SNMP error status:             |
     |               |                | integer,length=1,error=0       |
     +---------------+----------------+--------------------------------+
     | 7 + len + 8   | 0x02 0x01 0x00 | SNMP index:                    |
     |               |                | integer,length=1,index=0       |
     +---------------+----------------+--------------------------------+
     | 7 + len + 11  | 0x30 0x11      | varBind list, length=0x11      |
     +---------------+----------------+--------------------------------+
     | 7 + len + 13  | 0x30 0x0f      | varBind, length=0x0f           |
     +---------------+----------------+--------------------------------+
     | 7 + len + 15  | 0x06 0x0b      | Object ID, length=0x0b         |
     +---------------+----------------+--------------------------------+















Wijnen, Carpenter, Curran, Sehgal & Waters                     [Page 12]

RFC 1592                        SNMP-DPI                      March 1994


     +-----------------------------------------------------------------+
     | Table 1 (Page 2 of 2). SNMP GET PDU for dpiPortForTCP.0         |
     +---------------+----------------+--------------------------------+
     | OFFSET        | VALUE          | FIELD                          |
     +---------------+----------------+--------------------------------+
     | 7 + len + 17  | 0x2b 0x06 0x01 | Object-ID:                     |
     |               | 0x04 0x01 0x02 | 1.3.6.1.4.1.2.2.1.1.1          |
     |               | 0x02 0x01 0x01 | Object-instance: 0             |
     |               | 0x01 0x00      |                                |
     +---------------+----------------+--------------------------------+
     | 7 + len + 28  | 0x05 0x00      | null value, length=0           |
     +---------------+----------------+--------------------------------+
     | NOTE:  Formula to calculate "PDU_length":                       |
     |                                                                 |
     |   PDU_length =  length of version field and string tag (4 bytes)|
     |              +  length of community length field (1 byte)       |
     |              +  length of community name (depends...)           |
     |              +  length of SNMP GET request (32 bytes)           |
     |                                                                 |
     |              =  37 + length of community name                   |
     +-----------------------------------------------------------------+

3.1.2  SNMP PDU CONTAINING THE RESPONSE TO THE GET

   Assuming that no errors occurred, the port is returned in the last
   few octets of the received packet.  In the simple case, where the
   port number will be between 1024 and 16,385, the format of the packet
   is shown below.

   Note: In practice, the port number can be any positive number in the
   range from 1 through 65,535.  A port number of 0 means that the agent
   does not have a dpiPort defined for the requested protocol.  So the
   actual port value maybe in the last 1, 2 or 3 octets.  The sample
   implementation code shows how to handle the response to cover all
   those cases, including error conditions.

   Note: The (SNMPv1) packet shown below is for the TCP port.

     +-----------------------------------------------------------------+
     | Table 2 (Page 1 of 3). SNMP RESPONSE PDU for dpiPortForTCP.0    |
     +---------------+----------------+--------------------------------+
     | OFFSET        | VALUE          | FIELD                          |
     +---------------+----------------+--------------------------------+
     | 0             | 0x30           | ASN.1 header                   |
     +---------------+----------------+--------------------------------+
     | 1             | 39 + len       | length, see formula below      |
     +---------------+----------------+--------------------------------+




Wijnen, Carpenter, Curran, Sehgal & Waters                     [Page 13]

RFC 1592                        SNMP-DPI                      March 1994


     +-----------------------------------------------------------------+
     | Table 2 (Page 2 of 3). SNMP RESPONSE PDU for dpiPortForTCP.0    |
     +---------------+----------------+--------------------------------+
     | OFFSET        | VALUE          | FIELD                          |
     +---------------+----------------+--------------------------------+
     | 2             | 0x02 0x01 0x00 | version                        |
     |               |                | (integer,length=1,value=0)     |
     +---------------+----------------+--------------------------------+
     | 5             | 0x04           | community name (string)        |
     +---------------+----------------+--------------------------------+
     | 6             | len            | length of community name       |
     +---------------+----------------+--------------------------------+
     | 7             | community name |                                |
     +---------------+----------------+--------------------------------+
     | 7 + len       | 0xa2 0x1e      | SNMP RESPONSE:                 |
     |               |                | request_type=0xa2,length=0x1e  |
     +---------------+----------------+--------------------------------+
     | 7 + len + 2   | 0x02 0x01 0x01 | SNMP request ID:               |
     |               |                | integer,length=1,ID=1          |
     +---------------+----------------+--------------------------------+
     | 7 + len + 5   | 0x02 0x01 0x00 | SNMP error status:             |
     |               |                | integer,length=1,error=0       |
     +---------------+----------------+--------------------------------+
     | 7 + len + 8   | 0x02 0x01 0x00 | SNMP index:                    |
     |               |                | integer,length=1,index=0       |
     +---------------+----------------+--------------------------------+
     | 7 + len + 11  | 0x30 0x13      | varBind list, length=0x13      |
     +---------------+----------------+--------------------------------+
     | 7 + len + 13  | 0x30 0x11      | varBind, length=0x11           |
     +---------------+----------------+--------------------------------+
     | 7 + len + 15  | 0x06 0x0b      | Object ID, length=0x0b         |
     +---------------+----------------+--------------------------------+
     | 7 + len + 17  | 0x2b 0x06 0x01 | Object-ID:                     |
     |               | 0x04 0x01 0x02 | 1.3.6.1.4.1.2.2.1.1.1          |
     |               | 0x02 0x01 0x01 | Object-instance: 0             |
     |               | 0x01 0x00      |                                |
     +---------------+----------------+--------------------------------+
     | 7 + len + 28  | 0x02 0x02      | integer, length=2              |
     +---------------+----------------+--------------------------------+
     | 7 + len + 30  | MSB LSB        | port number (MSB, LSB)         |
     +---------------+----------------+--------------------------------+










Wijnen, Carpenter, Curran, Sehgal & Waters                     [Page 14]

RFC 1592                        SNMP-DPI                      March 1994


     +-----------------------------------------------------------------+
     | Table 2 (Page 3 of 3). SNMP RESPONSE PDU for dpiPortForTCP.0    |
     +---------------+----------------+--------------------------------+
     | NOTE:  Formula to calculate "PDU_length":                       |
     |                                                                 |
     |   PDU_length =  length of version field and string tag (4 bytes)|
     |              +  length of community length field (1 byte)       |
     |              +  length of community name (depends...)           |
     |              +  length of SNMP RESPONSE (34 bytes)              |
     |                                                                 |
     |              =  39 + length of community name                   |
     +-----------------------------------------------------------------+

3.2  SNMP DPI PACKET FORMATS

   Each request to, or response from, the agent or sub-agent is
   constructed as a "packet" and is written to the stream.

   Each packet is prefaced with the length of the data remaining in the
   packet.  The length is stored in network byte order, the most
   significant byte (MSB) first, least significant byte (LSB) last.  If
   we consider a stream connection (like TCP), the receiving side will
   read the packet by doing something similar to:

          unsigned char len_bfr[2];
          unsigned char *bfr;
          int len;

          read(fd,len_bfr,2);
          len = len_bfr[0] * 256 + len_bfr[1];
          bfr = malloc(len);
          read(fd,bfr,len);

   Note: The above example makes no provisions for error handling or a
   read returning less than the requested amount of data,and it is not
   intended to be used literally.

3.2.1  DPI PACKET HEADER

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?