Возвращение значения на sharpsnmp getRequestmessage неожиданно после обновления до .NET 8C#

Место общения программистов C#
Ответить
Anonymous
 Возвращение значения на sharpsnmp getRequestmessage неожиданно после обновления до .NET 8

Сообщение Anonymous »

После подключения устройства слушатель получает сообщение о ловушке, запрос отправляется на переключатель, который отправил ловушку, чтобы получить информацию о порте и устройстве, которое инициировало первоначальное сообщение ловушки. Возвращенные значения больше не то, что ожидается. Ранее эти действия выполнялись в рамках .NET Framework 4.7 до обновления до .NET 8 и обновления NUGET для SHARPSNMP. < /P>
Вот функция, используемая для получения информации о порте. В этом случае я призываю операцию 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;
}
Я ожидаю (и раньше получал) возврат ISnmpMessage, где сообщение Scope.Pdu.Variables содержит список как минимум из 4 переменных после вызова операции.
Однако я получаю только следующее:

Код: Выделить всё

{Variable: Id: 1.3.6.1.6.3.12.1.5.0;  Data: 41}
Я ожидаю, что первым элементом в списке будет (из переменной _PortDescTable_OID):

Код: Выделить всё

{Variable: Id: 1.3.6.1.2.1.31.1.1.1.18.95; Data: Port 1-113 [1st Floor - 1.101 - South]}
Еще одна вещь, которую я заметил, это то, что переменные свойств были переданы с 4 элементами в списке, и после вызова метода GetRequestMessage это свойство имеет только один элемент и содержит

Код: Выделить всё

{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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»