- do {
-
- /* Submit the query. Responses will be loaded into varBindList.
- We can expect this call to succeed a # of times corresponding
- to the # of adapters reported to be in the system */
- ret =
- m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus,
- &errorIndex); if (!ret) ret = 1;
-
- else
- /* Confirm that the proper type has been returned */
- ret =
- SNMP_oidncmp(&varBind[0].name, &MIB_ifEntryType,
- MIB_ifEntryType.idLength); if (!ret) {
- j++;
- dtmp = varBind[0].value.asnValue.number;
- //printf("Interface #%i type : %i\n", j, dtmp);
-
- /* Type 6 describes ethernet interfaces */
- if (dtmp == 6) {
-
- /* Confirm that we have an address here */
- ret =
- SNMP_oidncmp(&varBind[1].name, &MIB_ifMACEntAddr,
- MIB_ifMACEntAddr.idLength);
- if ((!ret)
- && (varBind[1].value.asnValue.address.stream != NULL)) {
- if (
- (varBind[1].value.asnValue.address.stream[0] ==
- 0x44)
- && (varBind[1].value.asnValue.address.stream[1] ==
- 0x45)
- && (varBind[1].value.asnValue.address.stream[2] ==
- 0x53)
- && (varBind[1].value.asnValue.address.stream[3] ==
- 0x54)
- && (varBind[1].value.asnValue.address.stream[4] ==
- 0x00)) {
-
- /* Ignore all dial-up networking adapters */
- //printf("Interface #%i is a DUN adapter\n", j);
- continue;
- }
- if (
- (varBind[1].value.asnValue.address.stream[0] ==
- 0x00)
- && (varBind[1].value.asnValue.address.stream[1] ==
- 0x00)
- && (varBind[1].value.asnValue.address.stream[2] ==
- 0x00)
- && (varBind[1].value.asnValue.address.stream[3] ==
- 0x00)
- && (varBind[1].value.asnValue.address.stream[4] ==
- 0x00)
- && (varBind[1].value.asnValue.address.stream[5] ==
- 0x00)) {
-
- /* Ignore NULL addresses returned by other network
- interfaces */
- //printf("Interface #%i is a NULL address\n", j);
- continue;
- }
- sprintf(addr, "%02x%02x%02x%02x%02x%02x",
- varBind[1].value.asnValue.address.stream[0],
- varBind[1].value.asnValue.address.stream[1],
- varBind[1].value.asnValue.address.stream[2],
- varBind[1].value.asnValue.address.stream[3],
- varBind[1].value.asnValue.address.stream[4],
- varBind[1].value.asnValue.address.stream[5]);
- //printf("MAC Address of interface #%i: %s\n", j, TempEthernet);
- }
- }
- }
- } while (!ret); /* Stop only on an error. An error will occur
- when we go exhaust the list of interfaces to
- be examined */
- //getch();
-
- /* Free the bindings */
+ do
+ {
+ // Submit the query. Responses will be loaded into varBindList.
+ // We can expect this call to succeed a # of times corresponding
+ // to the # of adapters reported to be in the system
+ ret = m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus,
+ &errorIndex);
+ if (!ret)
+ {
+ ret = 1;
+ }
+ else
+ {
+ // Confirm that the proper type has been returned
+ ret = SNMP_oidncmp(&varBind[0].name, &MIB_ifEntryType,
+ MIB_ifEntryType.idLength);
+ }
+ if (!ret)
+ {
+ j++;
+ dtmp = varBind[0].value.asnValue.number;
+
+ // Type 6 describes ethernet interfaces
+ if (dtmp == 6)
+ {
+ // Confirm that we have an address here
+ ret = SNMP_oidncmp(&varBind[1].name, &MIB_ifMACEntAddr,
+ MIB_ifMACEntAddr.idLength);
+ if ( !ret && varBind[1].value.asnValue.address.stream != NULL )
+ {
+ if ( (varBind[1].value.asnValue.address.stream[0] == 0x44)
+ && (varBind[1].value.asnValue.address.stream[1] == 0x45)
+ && (varBind[1].value.asnValue.address.stream[2] == 0x53)
+ && (varBind[1].value.asnValue.address.stream[3] == 0x54)
+ && (varBind[1].value.asnValue.address.stream[4] == 0x00) )
+ {
+ // Ignore all dial-up networking adapters
+ std::cerr << "Interface #" << j << " is a DUN adapter\n";
+ continue;
+ }
+ if ( (varBind[1].value.asnValue.address.stream[0] == 0x00)
+ && (varBind[1].value.asnValue.address.stream[1] == 0x00)
+ && (varBind[1].value.asnValue.address.stream[2] == 0x00)
+ && (varBind[1].value.asnValue.address.stream[3] == 0x00)
+ && (varBind[1].value.asnValue.address.stream[4] == 0x00)
+ && (varBind[1].value.asnValue.address.stream[5] == 0x00) )
+ {
+ // Ignore NULL addresses returned by other network
+ // interfaces
+ std::cerr << "Interface #" << j << " is a NULL address\n";
+ continue;
+ }
+ memcpy( addr, varBind[1].value.asnValue.address.stream, 6);
+ }
+ }
+ }
+ } while (!ret);
+
+ // Free the bindings