Introduction
This is a tool to display and modify IP-to-Physical address translation tables used by ARP (Address Resolution Protocol), like the Windows command-line arp.exe. This tool will do two things: it displays ARP table entries and it adds/modifies/removes ARP entries. These are done by requesting the SNMP (Simple Network Management Protocol) extension library.
Access IP and MAC addresses through SNMP
You can read and modify ARP tables through SNMP, by requesting SNMP to get/set object information. SNMP requests and responses through MIB (Management Information Base). MIB is like a tree, and has all the manageable objects we will use. For more information, check the RFC1213. Also check the files at %SystemRoot%\system32\*.mib. The file that has entries we will use is %SystemRoot%\system32\mib_ii.mib. You can open and see it using Notepad.
Here is an MIB ipNetToMediaEntry
entry:
ipNetToMediaEntry OBJECT-TYPE
SYNTAX IpNetToMediaEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"Each entry contains one IpAddress to 'physical'
address equivalence."
INDEX { ipNetToMediaIfIndex,
ipNetToMediaNetAddress }
::= { ipNetToMediaTable 1 }
MIB accesses objects by the OID (Object Identifier) number. Every object has a number, and child objects have the both parent object number and their own number. The numbers are separated by a dot ".". For example, if the parent object has the number "1" and the child object has the number "3", then the child object OID number will be "1.3", and a child of the child may be "1.3.6", … "1.3.6.1.2.1", and so on.
Here is a simple sketch of the objects tree:
Initialize the class
I used the function SnmpExtensionQuery
to resolve the SNMP requests, but before using it, you must call the SnmpExtensionInit
function to initialize the SNMP extension agent DLL. The two functions exist in the Microsoft library inetmib1.dll, so at the class construction, I load this library and get the addresses of these functions, and then call SnmpExtensionInit
to initialize the SNMP extension agent DLL.
Here is the construction of the CARP
class:
CARP::CARP()
{
hMIBLibrary = LoadLibrary(TEXT("inetmib1.dll"));
if (hMIBLibrary)
{
pfnSnmpExtensionInit = (PFNSNMPEXTENSIONINIT) GetProcAddress(hMIBLibrary,
"SnmpExtensionInit");
pfnSnmpExtensionQuery = (PFNSNMPEXTENSIONQUERY) GetProcAddress(hMIBLibrary,
"SnmpExtensionQuery");
if (pfnSnmpExtensionInit && pfnSnmpExtensionQuery)
{
HANDLE hPollForTrapEvent;
AsnObjectIdentifier aoiSupportedView;
bInitialized = pfnSnmpExtensionInit(0, &hPollForTrapEvent,
&aoiSupportedView);
}
}
else
{
bInitialized = FALSE;
AfxMessageBox(_T("Load library fail"));
}
}
Get ARP entries
The function GetEntries
gets the ARP entries like arp.exe -a. It takes three parameters: pTable
, the pointer to an array of arpTable
structs that will be filled by the IP and MAC addresses; TableLength
, the length of the array; AdapterIndex
, the NIC adapter index number. I've used three OIDs to get the ARP table entries. OID[0] = "1.3.6.1.2.1.4.22.1.1"
to get the interface index of the entry and compare it with the AdapterIndex parameter; OID[1] = "1.3.6.1.2.1.4.22.1.2"
to get the IP and MAC addresses; OID[2] = "1.3.6.1.2.1.4.22.1.4"
to get the entry type (static or dynamic).
int CARP::GetEntries(arpTable* pTable, int TableLength, int AdapterIndex)
{
if (!bInitialized)
return 0;
SnmpVarBindList SVBList[3];
SnmpVarBind SVBVars[3];
UINT OID[3][10];
AsnInteger32 aiErrorStatus[3], aiErrorIndex[3];
AsnObjectIdentifier AsnOID0 = {sizeof(OID[0])/sizeof(UINT), OID[0]};
AsnObjectIdentifier AsnOID1 = {sizeof(OID[1])/sizeof(UINT), OID[1]};
AsnObjectIdentifier AsnOID2 = {sizeof(OID[2])/sizeof(UINT), OID[2]};
unsigned long pIPAddress;
unsigned long pMACAddress;
int iEntries;
for (int count=0; count<3; count++)
{
OID[count][0] = 1;
OID[count][1] = 3;
OID[count][2] = 6;
OID[count][3] = 1;
OID[count][4] = 2;
OID[count][5] = 1;
OID[count][6] = 4;
OID[count][7] = 22;
OID[count][8] = 1;
switch(count)
{
case 0:
OID[count][9] = 1;
break;
case 1:
OID[count][9] = 2;
break;
case 2:
OID[count][9] = 4;
break;
}
}
ZeroMemory(pTable, sizeof(arpTable)*TableLength);
SVBList[0].len = 1;
SVBList[0].list = &SVBVars[0];
SnmpUtilOidCpy(&SVBVars[0].name, &AsnOID0);
SVBList[1].len = 1;
SVBList[1].list = &SVBVars[1];
SnmpUtilOidCpy(&SVBVars[1].name, &AsnOID1);
SVBList[2].len = 1;
SVBList[2].list = &SVBVars[2];
SnmpUtilOidCpy(&SVBVars[2].name, &AsnOID2);
iEntries = 0;
do
{
aiErrorStatus[0] = 0;
aiErrorIndex[0] = 0;
aiErrorStatus[1] = 0;
aiErrorIndex[1] = 0;
aiErrorStatus[2] = 0;
aiErrorIndex[2] = 0;
if (pfnSnmpExtensionQuery(SNMP_PDU_GETNEXT, &SVBList[0],
&aiErrorStatus[0], &aiErrorIndex[0]))
if (pfnSnmpExtensionQuery(SNMP_PDU_GETNEXT, &SVBList[1],
&aiErrorStatus[1], &aiErrorIndex[1]))
if (pfnSnmpExtensionQuery(SNMP_PDU_GETNEXT, &SVBList[2],
&aiErrorStatus[2], &aiErrorIndex[2]))
if (aiErrorStatus[0] == SNMP_ERRORSTATUS_NOERROR &&
aiErrorStatus[1] == SNMP_ERRORSTATUS_NOERROR &&
aiErrorStatus[2] == SNMP_ERRORSTATUS_NOERROR)
{
if(SnmpUtilOidNCmp(&SVBVars[0].name,
&AsnOID0, AsnOID0.idLength))
break;
if(SnmpUtilOidNCmp(&SVBVars[1].name,
&AsnOID1, AsnOID1.idLength))
break;
if(SnmpUtilOidNCmp(&SVBVars[2].name,
&AsnOID2, AsnOID2.idLength))
break;
if (AdapterIndex == SVBList[0].list->value.asnValue.number)
{
pIPAddress = (unsigned long)SVBList[1].list->name.ids;
pTable[iEntries].IPAddress[0] =
*(unsigned char *)(pIPAddress + 44);
pTable[iEntries].IPAddress[1] =
*(unsigned char *)(pIPAddress + 48);
pTable[iEntries].IPAddress[2] =
*(unsigned char *)(pIPAddress + 52);
pTable[iEntries].IPAddress[3] =
*(unsigned char *)(pIPAddress + 56);
pMACAddress =
(unsigned long)SVBList[1].list->value.asnValue.string.stream;
if (pMACAddress)
{
pTable[iEntries].MACAddress[0] =
*(unsigned char *)(pMACAddress + 0);
pTable[iEntries].MACAddress[1] =
*(unsigned char *)(pMACAddress + 1);
pTable[iEntries].MACAddress[2] =
*(unsigned char *)(pMACAddress + 2);
pTable[iEntries].MACAddress[3] =
*(unsigned char *)(pMACAddress + 3);
pTable[iEntries].MACAddress[4] =
*(unsigned char *)(pMACAddress + 4);
pTable[iEntries].MACAddress[5] =
*(unsigned char *)(pMACAddress + 5);
}
pTable[iEntries].Type =
(unsigned long)SVBList[2].list->value.asnValue.number;
if (pTable[iEntries].Type>=1 && pTable[iEntries].Type<=4)
iEntries++; }
}
else
break; }
while(iEntries < TableLength);
SnmpUtilOidFree(&SVBVars[2].name);
SnmpUtilOidFree(&SVBVars[1].name);
SnmpUtilOidFree(&SVBVars[0].name);
return iEntries; }
Edit ARP entries
The function EditEntry
adds/modifies/removes ARP entries. It adds dynamic entries like arp.exe 1.2.3.4 11-22-33-44-55-66
, static entries like arp.exe –s 1.2.3.4 11-22-33-44-55-66
, or removes entry like arp.exe –d 1.2.3.4
. When you add a new entry, if the entry IP address does not exist in the ARP table, the entry will be added to the table. Else, if the entry IP address already exists in the ARP table, the entry will be updated. To remove an entry, you need only the IP address to identify the entry on the NIC interface. The MAC address is not needed in the remove operation. The function takes four parameters: the IPAddress
array of 4 BYTE
s, 4 octs of IP Address, MACAddress
array of 4 BYTE
s, 6 octs of the MAC Address Type Entry type (2:Remove, 3:Dynamic, 4:Static) AdapterIndex
- NIC Adapter index number. I've used four OIDs to set the ARP table entries: OID[0] = "1.3.6.1.2.1.4.22.1.1"
, to set the interface index of the entry OID[1] = "1.3.6.1.2.1.4.22.1.2"
, to set MAC address OID[3] = "1.3.6.1.2.1.4.22.1.3"
, to set IP address OID[2] = "1.3.6.1.2.1.4.22.1.4"
, to set the entry type (Static or Dynamic), or Remove entry.
BOOL CARP::EditEntry(unsigned char IPAddress[4], unsigned char MACAddress[6],
unsigned long Type, int AdapterIndex)
{
if (!bInitialized)
return 0;
SnmpVarBindList SVBList;
SnmpVarBind SVBVars[4];
UINT OID[4][10];
AsnInteger32 aiErrorStatus, aiErrorIndex;
BOOL bReturn = FALSE;
for (int count=0; count<4; count++)
{
OID[count][0] = 1;
OID[count][1] = 3;
OID[count][2] = 6;
OID[count][3] = 1;
OID[count][4] = 2;
OID[count][5] = 1;
OID[count][6] = 4;
OID[count][7] = 22;
OID[count][8] = 1;
OID[count][9] = 1 + count;
switch(count)
{
case 0:
SVBVars[count].value.asnType = ASN_INTEGER;
SVBVars[count].value.asnValue.number = AdapterIndex;
break;
case 1:
SVBVars[count].value.asnType = ASN_OCTETSTRING;
SVBVars[count].value.asnValue.string.stream = MACAddress;
SVBVars[count].value.asnValue.string.length = 6; SVBVars[count].value.asnValue.string.dynamic= FALSE;
break;
case 2:
SVBVars[count].value.asnType = ASN_IPADDRESS;
SVBVars[count].value.asnValue.string.stream = IPAddress;
SVBVars[count].value.asnValue.string.length = 4; SVBVars[count].value.asnValue.string.dynamic= FALSE;
break;
case 3:
SVBVars[count].value.asnType = ASN_INTEGER;
SVBVars[count].value.asnValue.number = Type;
break;
}
AsnObjectIdentifier AsnOID = {sizeof(OID[count])/sizeof(UINT), OID[count]};
SnmpUtilOidCpy(&SVBVars[count].name, &AsnOID);
}
SVBList.len = 4;
SVBList.list = SVBVars;
aiErrorStatus = 0;
aiErrorIndex = 0;
if (pfnSnmpExtensionQuery(SNMP_PDU_SET, &SVBList, &aiErrorStatus, &aiErrorIndex))
if (aiErrorStatus == SNMP_ERRORSTATUS_NOERROR)
bReturn = TRUE;
SnmpUtilOidFree(&SVBVars[3].name);
SnmpUtilOidFree(&SVBVars[2].name);
SnmpUtilOidFree(&SVBVars[1].name);
SnmpUtilOidFree(&SVBVars[0].name);
return bReturn; }
Also, you can use the same way with suitable OIDs to add/modify/remove route table information, see some of the RFC1213 identifiers:
mib-2 node 1.3.6.1.2.1
system node 1.3.6.1.2.1.1
sysDescr scalar 1.3.6.1.2.1.1.1
sysObjectID scalar 1.3.6.1.2.1.1.2
sysUpTime scalar 1.3.6.1.2.1.1.3
sysContact scalar 1.3.6.1.2.1.1.4
sysName scalar 1.3.6.1.2.1.1.5
sysLocation scalar 1.3.6.1.2.1.1.6
sysServices scalar 1.3.6.1.2.1.1.7
interfaces node 1.3.6.1.2.1.2
ifNumber scalar 1.3.6.1.2.1.2.1
ifTable table 1.3.6.1.2.1.2.2
ifEntry row 1.3.6.1.2.1.2.2.1
ifIndex column 1.3.6.1.2.1.2.2.1.1
ifDescr column 1.3.6.1.2.1.2.2.1.2
ifType column 1.3.6.1.2.1.2.2.1.3
ifMtu column 1.3.6.1.2.1.2.2.1.4
ifSpeed column 1.3.6.1.2.1.2.2.1.5
ifPhysAddress column 1.3.6.1.2.1.2.2.1.6
ifAdminStatus column 1.3.6.1.2.1.2.2.1.7
ifOperStatus column 1.3.6.1.2.1.2.2.1.8
ifLastChange column 1.3.6.1.2.1.2.2.1.9
ifInOctets column 1.3.6.1.2.1.2.2.1.10
ifInUcastPkts column 1.3.6.1.2.1.2.2.1.11
ifInNUcastPkts column 1.3.6.1.2.1.2.2.1.12
ifInDiscards column 1.3.6.1.2.1.2.2.1.13
ifInErrors column 1.3.6.1.2.1.2.2.1.14
ifInUnknownProtos column 1.3.6.1.2.1.2.2.1.15
ifOutOctets column 1.3.6.1.2.1.2.2.1.16
ifOutUcastPkts column 1.3.6.1.2.1.2.2.1.17
ifOutNUcastPkts column 1.3.6.1.2.1.2.2.1.18
ifOutDiscards column 1.3.6.1.2.1.2.2.1.19
ifOutErrors column 1.3.6.1.2.1.2.2.1.20
ifOutQLen column 1.3.6.1.2.1.2.2.1.21
ifSpecific column 1.3.6.1.2.1.2.2.1.22
at node 1.3.6.1.2.1.3
atTable table 1.3.6.1.2.1.3.1
atEntry row 1.3.6.1.2.1.3.1.1
atIfIndex column 1.3.6.1.2.1.3.1.1.1
atPhysAddress column 1.3.6.1.2.1.3.1.1.2
atNetAddress column 1.3.6.1.2.1.3.1.1.3
ip node 1.3.6.1.2.1.4
ipForwarding scalar 1.3.6.1.2.1.4.1
ipDefaultTTL scalar 1.3.6.1.2.1.4.2
ipInReceives scalar 1.3.6.1.2.1.4.3
ipInHdrErrors scalar 1.3.6.1.2.1.4.4
ipInAddrErrors scalar 1.3.6.1.2.1.4.5
ipForwDatagrams scalar 1.3.6.1.2.1.4.6
ipInUnknownProtos scalar 1.3.6.1.2.1.4.7
ipInDiscards scalar 1.3.6.1.2.1.4.8
ipInDelivers scalar 1.3.6.1.2.1.4.9
ipOutRequests scalar 1.3.6.1.2.1.4.10
ipOutDiscards scalar 1.3.6.1.2.1.4.11
ipOutNoRoutes scalar 1.3.6.1.2.1.4.12
ipReasmTimeout scalar 1.3.6.1.2.1.4.13
ipReasmReqds scalar 1.3.6.1.2.1.4.14
ipReasmOKs scalar 1.3.6.1.2.1.4.15
ipReasmFails scalar 1.3.6.1.2.1.4.16
ipFragOKs scalar 1.3.6.1.2.1.4.17
ipFragFails scalar 1.3.6.1.2.1.4.18
ipFragCreates scalar 1.3.6.1.2.1.4.19
ipAddrTable table 1.3.6.1.2.1.4.20
ipAddrEntry row 1.3.6.1.2.1.4.20.1
ipAdEntAddr column 1.3.6.1.2.1.4.20.1.1
ipAdEntIfIndex column 1.3.6.1.2.1.4.20.1.2
ipAdEntNetMask column 1.3.6.1.2.1.4.20.1.3
ipAdEntBcastAddr column 1.3.6.1.2.1.4.20.1.4
ipAdEntReasmMaxSize column 1.3.6.1.2.1.4.20.1.5
ipRouteTable table 1.3.6.1.2.1.4.21
ipRouteEntry row 1.3.6.1.2.1.4.21.1
ipRouteDest column 1.3.6.1.2.1.4.21.1.1
ipRouteIfIndex column 1.3.6.1.2.1.4.21.1.2
ipRouteMetric1 column 1.3.6.1.2.1.4.21.1.3
ipRouteMetric2 column 1.3.6.1.2.1.4.21.1.4
ipRouteMetric3 column 1.3.6.1.2.1.4.21.1.5
ipRouteMetric4 column 1.3.6.1.2.1.4.21.1.6
ipRouteNextHop column 1.3.6.1.2.1.4.21.1.7
ipRouteType column 1.3.6.1.2.1.4.21.1.8
ipRouteProto column 1.3.6.1.2.1.4.21.1.9
ipRouteAge column 1.3.6.1.2.1.4.21.1.10
ipRouteMask column 1.3.6.1.2.1.4.21.1.11
ipRouteMetric5 column 1.3.6.1.2.1.4.21.1.12
ipRouteInfo column 1.3.6.1.2.1.4.21.1.13
ipNetToMediaTable table 1.3.6.1.2.1.4.22
ipNetToMediaEntry row 1.3.6.1.2.1.4.22.1
ipNetToMediaIfIndex column 1.3.6.1.2.1.4.22.1.1
ipNetToMediaPhysAddress column 1.3.6.1.2.1.4.22.1.2
ipNetToMediaNetAddress column 1.3.6.1.2.1.4.22.1.3
ipNetToMediaType column 1.3.6.1.2.1.4.22.1.4
ipRoutingDiscards scalar 1.3.6.1.2.1.4.23
icmp node 1.3.6.1.2.1.5
icmpInMsgs scalar 1.3.6.1.2.1.5.1
icmpInErrors scalar 1.3.6.1.2.1.5.2
icmpInDestUnreachs scalar 1.3.6.1.2.1.5.3
icmpInTimeExcds scalar 1.3.6.1.2.1.5.4
icmpInParmProbs scalar 1.3.6.1.2.1.5.5
icmpInSrcQuenchs scalar 1.3.6.1.2.1.5.6
icmpInRedirects scalar 1.3.6.1.2.1.5.7
icmpInEchos scalar 1.3.6.1.2.1.5.8
icmpInEchoReps scalar 1.3.6.1.2.1.5.9
icmpInTimestamps scalar 1.3.6.1.2.1.5.10
icmpInTimestampReps scalar 1.3.6.1.2.1.5.11
icmpInAddrMasks scalar 1.3.6.1.2.1.5.12
icmpInAddrMaskReps scalar 1.3.6.1.2.1.5.13
icmpOutMsgs scalar 1.3.6.1.2.1.5.14
icmpOutErrors scalar 1.3.6.1.2.1.5.15
icmpOutDestUnreachs scalar 1.3.6.1.2.1.5.16
icmpOutTimeExcds scalar 1.3.6.1.2.1.5.17
icmpOutParmProbs scalar 1.3.6.1.2.1.5.18
icmpOutSrcQuenchs scalar 1.3.6.1.2.1.5.19
icmpOutRedirects scalar 1.3.6.1.2.1.5.20
icmpOutEchos scalar 1.3.6.1.2.1.5.21
icmpOutEchoReps scalar 1.3.6.1.2.1.5.22
icmpOutTimestamps scalar 1.3.6.1.2.1.5.23
icmpOutTimestampReps scalar 1.3.6.1.2.1.5.24
icmpOutAddrMasks scalar 1.3.6.1.2.1.5.25
icmpOutAddrMaskReps scalar 1.3.6.1.2.1.5.26
tcp node 1.3.6.1.2.1.6
tcpRtoAlgorithm scalar 1.3.6.1.2.1.6.1
tcpRtoMin scalar 1.3.6.1.2.1.6.2
tcpRtoMax scalar 1.3.6.1.2.1.6.3
tcpMaxConn scalar 1.3.6.1.2.1.6.4
tcpActiveOpens scalar 1.3.6.1.2.1.6.5
tcpPassiveOpens scalar 1.3.6.1.2.1.6.6
tcpAttemptFails scalar 1.3.6.1.2.1.6.7
tcpEstabResets scalar 1.3.6.1.2.1.6.8
tcpCurrEstab scalar 1.3.6.1.2.1.6.9
tcpInSegs scalar 1.3.6.1.2.1.6.10
tcpOutSegs scalar 1.3.6.1.2.1.6.11
tcpRetransSegs scalar 1.3.6.1.2.1.6.12
tcpConnTable table 1.3.6.1.2.1.6.13
tcpConnEntry row 1.3.6.1.2.1.6.13.1
tcpConnState column 1.3.6.1.2.1.6.13.1.1
tcpConnLocalAddress column 1.3.6.1.2.1.6.13.1.2
tcpConnLocalPort column 1.3.6.1.2.1.6.13.1.3
tcpConnRemAddress column 1.3.6.1.2.1.6.13.1.4
tcpConnRemPort column 1.3.6.1.2.1.6.13.1.5
tcpInErrs scalar 1.3.6.1.2.1.6.14
tcpOutRsts scalar 1.3.6.1.2.1.6.15
udp node 1.3.6.1.2.1.7
udpInDatagrams scalar 1.3.6.1.2.1.7.1
udpNoPorts scalar 1.3.6.1.2.1.7.2
udpInErrors scalar 1.3.6.1.2.1.7.3
udpOutDatagrams scalar 1.3.6.1.2.1.7.4
udpTable table 1.3.6.1.2.1.7.5
udpEntry row 1.3.6.1.2.1.7.5.1
udpLocalAddress column 1.3.6.1.2.1.7.5.1.1
udpLocalPort column 1.3.6.1.2.1.7.5.1.2
egp node 1.3.6.1.2.1.8
egpInMsgs scalar 1.3.6.1.2.1.8.1
egpInErrors scalar 1.3.6.1.2.1.8.2
egpOutMsgs scalar 1.3.6.1.2.1.8.3
egpOutErrors scalar 1.3.6.1.2.1.8.4
egpNeighTable table 1.3.6.1.2.1.8.5
egpNeighEntry row 1.3.6.1.2.1.8.5.1
egpNeighState column 1.3.6.1.2.1.8.5.1.1
egpNeighAddr column 1.3.6.1.2.1.8.5.1.2
egpNeighAs column 1.3.6.1.2.1.8.5.1.3
egpNeighInMsgs column 1.3.6.1.2.1.8.5.1.4
egpNeighInErrs column 1.3.6.1.2.1.8.5.1.5
egpNeighOutMsgs column 1.3.6.1.2.1.8.5.1.6
egpNeighOutErrs column 1.3.6.1.2.1.8.5.1.7
egpNeighInErrMsgs column 1.3.6.1.2.1.8.5.1.8
egpNeighOutErrMsgs column 1.3.6.1.2.1.8.5.1.9
egpNeighStateUps column 1.3.6.1.2.1.8.5.1.10
egpNeighStateDowns column 1.3.6.1.2.1.8.5.1.11
egpNeighIntervalHello column 1.3.6.1.2.1.8.5.1.12
egpNeighIntervalPoll column 1.3.6.1.2.1.8.5.1.13
egpNeighMode column 1.3.6.1.2.1.8.5.1.14
egpNeighEventTrigger column 1.3.6.1.2.1.8.5.1.15
egpAs scalar 1.3.6.1.2.1.8.6
transmission node 1.3.6.1.2.1.10
snmp node 1.3.6.1.2.1.11
snmpInPkts scalar 1.3.6.1.2.1.11.1
snmpOutPkts scalar 1.3.6.1.2.1.11.2
snmpInBadVersions scalar 1.3.6.1.2.1.11.3
snmpInBadCommunityNames scalar 1.3.6.1.2.1.11.4
snmpInBadCommunityUses scalar 1.3.6.1.2.1.11.5
snmpInASNParseErrs scalar 1.3.6.1.2.1.11.6
snmpInTooBigs scalar 1.3.6.1.2.1.11.8
snmpInNoSuchNames scalar 1.3.6.1.2.1.11.9
snmpInBadValues scalar 1.3.6.1.2.1.11.10
snmpInReadOnlys scalar 1.3.6.1.2.1.11.11
snmpInGenErrs scalar 1.3.6.1.2.1.11.12
snmpInTotalReqVars scalar 1.3.6.1.2.1.11.13
snmpInTotalSetVars scalar 1.3.6.1.2.1.11.14
snmpInGetRequests scalar 1.3.6.1.2.1.11.15
snmpInGetNexts scalar 1.3.6.1.2.1.11.16
snmpInSetRequests scalar 1.3.6.1.2.1.11.17
snmpInGetResponses scalar 1.3.6.1.2.1.11.18
snmpInTraps scalar 1.3.6.1.2.1.11.19
snmpOutTooBigs scalar 1.3.6.1.2.1.11.20
snmpOutNoSuchNames scalar 1.3.6.1.2.1.11.21
snmpOutBadValues scalar 1.3.6.1.2.1.11.22
snmpOutGenErrs scalar 1.3.6.1.2.1.11.24
snmpOutGetRequests scalar 1.3.6.1.2.1.11.25
snmpOutGetNexts scalar 1.3.6.1.2.1.11.26
snmpOutSetRequests scalar 1.3.6.1.2.1.11.27
snmpOutGetResponses scalar 1.3.6.1.2.1.11.28
snmpOutTraps scalar 1.3.6.1.2.1.11.29
snmpEnableAuthenTraps scalar 1.3.6.1.2.1.11.30