Вот функция, используемая для получения информации о порте. В этом случае я призываю операцию snmpoperation.getportinfo :
Код: Выделить всё
private ISnmpMessage SNMP_Operation(IPEndPoint iPEndPoint, SnmpOperation operation, string port = "", List Mac_address = null)
{
// Create discovery
var discovery = Messenger.GetNextDiscovery(SnmpType.GetRequestPdu);
// Create report
var report = discovery.GetResponse(60000, iPEndPoint);
// Instantiate the variable list
List variables = [];
// Fill the variable list
switch (operation)
{
case SnmpOperation.GetDeviceStillConnected:
// Interface Operational Status
variables = [new Variable(new ObjectIdentifier($"{_PortOperationalStatus_OID}.{port}"))];
break;
case SnmpOperation.GetPortInfo:
// Setup OID variables to get port information
variables =
[
// Port Description
new Variable(new ObjectIdentifier($"{ _PortDescTable_OID }.{ port }")), // 1.3.6.1.2.1.31.1.1.1.18
// Port PVID
new Variable(new ObjectIdentifier($"{ _PortVLAN_OID }.{ port }")), // 1.3.6.1.2.1.17.7.1.4.5.1.1
// Voice VLAN
new Variable(new ObjectIdentifier($"1.3.6.1.4.1.674.10895.5000.2.6132.1.1.1.2.13.1.28.{ port }")),
// Interface Name
new Variable(new ObjectIdentifier($"{ _PortInterfaceTable_OID }.{ port }")), // 1.3.6.1.2.1.31.1.1.1.1
];
foreach (var mac in Mac_address)
{
// Get the VLAN description from the associated mac address
variables.Add(new Variable(new ObjectIdentifier($"{_VLANDescription_OID}.{mac[3]}"))); // 1.3.6.1.2.1.17.7.1.4.3.1.1
}
break;
case SnmpOperation.GetSwitchInfo:
// Switch Name
variables = [new Variable(new ObjectIdentifier($"1.3.6.1.4.1.674.10895.3000.1.2.100.7.0"))];
break;
case SnmpOperation.GetVLANDescription:
variables = [new Variable(new ObjectIdentifier($"{_VLANDescription_OID}.{port}"))];
break;
case SnmpOperation.SetVlanPurgatory:
variables =
[
new Variable(new ObjectIdentifier($"{ _PortVLAN_OID }.{ port }"), new OctetString(_PurgatoryInfo[0].ToString())),
new Variable(new ObjectIdentifier($"{ _VLANDescription_OID }.{ port }"), new OctetString(_PurgatoryInfo[1].ToString())),
];
break;
}
// Send the Request
switch (operation)
{
case SnmpOperation.GetDeviceStillConnected:
case SnmpOperation.GetPortInfo:
case SnmpOperation.GetSwitchInfo:
case SnmpOperation.GetVLANDescription:
// Create SNMP request
var getRequest = new GetRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, _SNMPUserName, new OctetString("GetVLANDescription"), variables, _Priv, Messenger.MaxMessageSize, report);
// Send request and get reply
var reply = getRequest.GetResponse(60000, iPEndPoint);
if (reply is ReportMessage)
{
// according to RFC 3414, send a second request to sync time.
getRequest = new GetRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, _SNMPUserName, new OctetString("GetVLANDescription"), variables, _Priv, Messenger.MaxMessageSize, reply);
return getRequest.GetResponse(60000, iPEndPoint);
}
else
return getRequest.GetResponse(60000, iPEndPoint);
case SnmpOperation.SetVlanPurgatory:
var setRequest = new SetRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, _SNMPUserName, new OctetString("SetVlanPurgatory"), variables, _Priv, Messenger.MaxMessageSize, report);
// Send request and get reply
return setRequest.GetResponse(60000, iPEndPoint);
}
return null;
}
Однако я получаю только следующее:
Код: Выделить всё
{Variable: Id: 1.3.6.1.6.3.12.1.5.0; Data: 41}
Код: Выделить всё
{Variable: Id: 1.3.6.1.2.1.31.1.1.1.18.95; Data: Port 1-113 [1st Floor - 1.101 - South]}
Код: Выделить всё
{Variable: Id: 1.3.6.1.2.1.2.2.1.8.157; Data: Null}
имеет изменение getRequestmessage или использую неправильный метод?
Подробнее здесь: https://stackoverflow.com/questions/797 ... e-to-net-8
Мобильная версия