Прослушиватель ловушек snmp не получает сообщенийC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Прослушиватель ловушек snmp не получает сообщений

Сообщение Anonymous »

Итак, я создаю приемник ловушек snmp для получения сообщений ловушек snmp.
Я использую пакет Sharpsnmp-net от lexstudios, а также sample.engine с конвейером из github.
Я' Я создаю простое приложение wpf, которое будет просто показывать сообщения на экране для тестирования всего в .net 4.7.1.
Поэтому для части прослушивания я примерно использовал образец snmpd.

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

public partial class MainWindow : Window
{
private SnmpEngine _engine;
private const string StrAllUnassigned = "All Unassigned";

public MainWindow()
{
var store = new ObjectStore();
store.Add(new SysDescr());
store.Add(new SysObjectId());
store.Add(new SysUpTime());
store.Add(new SysContact());
store.Add(new SysName());
store.Add(new SysLocation());
store.Add(new SysServices());
store.Add(new SysORLastChange());
store.Add(new SysORTable());
store.Add(new IfNumber());
store.Add(new IfTable());

var users = new UserRegistry();
users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair);
users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication"))));
if (DESPrivacyProvider.IsSupported)
{
users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"),
new MD5AuthenticationProvider(new OctetString("authentication"))));
}

if (AESPrivacyProviderBase.IsSupported)
{
users.Add(new OctetString("aes"), new AESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
users.Add(new OctetString("aes192"), new AES192PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
users.Add(new OctetString("aes256"), new AES256PrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))));
}

var getv1 = new GetV1MessageHandler();
var getv1Mapping = new HandlerMapping("v1", "GET", getv1);

var setv1 = new SetV1MessageHandler();
var setv1Mapping = new HandlerMapping("v1", "SET", setv1);

var getnextv1 = new GetNextV1MessageHandler();
var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1);

var v1 = new Version1MembershipProvider(new OctetString("public"), new OctetString("public"));

var membership = new ComposedMembershipProvider(new IMembershipProvider[] { v1 });
var handlerFactory = new MessageHandlerFactory(new[]
{
getv1Mapping,
setv1Mapping,
getnextv1Mapping
});

var pipelineFactory = new SnmpApplicationFactory(new RollingLogger(), store, membership, handlerFactory);
_engine = new SnmpEngine(pipelineFactory, new Listener { Users = users }, new EngineGroup());
_engine.ExceptionRaised += (sender, e) => MessageBox.Show(e.Exception.ToString());

InitializeComponent();

txtIp.Text = @"162"; //port to receive snmp trap
cmbIp.Items.Add(StrAllUnassigned);
foreach (IPAddress address in Dns.GetHostEntry(string.Empty).AddressList.Where(address =>  !address.IsIPv6LinkLocal))
{
cmbIp.Items.Add(address);
}
cmbIp.SelectedIndex = 0;

}

public void StartListeners()
{
try
{
_engine.Listener.ClearBindings();
int port = int.Parse(txtIp.Text, CultureInfo.InvariantCulture);
/*
if (cmbIp.Text == StrAllUnassigned)
{
if (Socket.OSSupportsIPv4)
{
_engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, port));
}

if (Socket.OSSupportsIPv6)
{
_engine.Listener.AddBinding(new IPEndPoint(IPAddress.IPv6Any, port));
}

_engine.Start();
if (_engine.Active)
{
MessageBox.Show("Engine activated");
}
return;
}
*/
IPAddress address = IPAddress.Parse(cmbIp.Text);
if (address.AddressFamily == AddressFamily.InterNetwork)
{
if (!Socket.OSSupportsIPv4)
{
MessageBox.Show(Listener.ErrorIPv4NotSupported);
return;
}

_engine.Listener.AddBinding(new IPEndPoint(address, port));
_engine.Listener.MessageReceived += Listener_MessageReceived;
_engine.Start();
if (_engine.Active)
{
MessageBox.Show("Engine activated");
}
return;
}

if (!Socket.OSSupportsIPv6)
{
MessageBox.Show(Listener.ErrorIPv6NotSupported);
return;
}

_engine.Listener.AddBinding(new IPEndPoint(address, port));
_engine.Start();

}
catch (Exception ex)
{
MessageBox.Show("Exception has been thrown in start: " + ex);
}
}

private void Listener_MessageReceived(object sender, MessageReceivedEventArgs e)
{
MessageBox.Show("message received");
}

private void StopListeners()
{
_engine.Stop();
_engine.Dispose();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
//send trap
IPAddress ip = IPAddress.Parse("127.0.0.1");
Messenger.SendTrapV1(
new IPEndPoint(ip, 162),
IPAddress.Loopback, // here should be IP of the current machine.
new OctetString("public"),
new ObjectIdentifier(new uint[] { 1, 3, 6 }),
GenericCode.ColdStart,
0,
0,
new List());

}

private void Start_Click(object sender, RoutedEventArgs e)
{
try
{
StartListeners();
}
catch (PortInUseException ex)
{
MessageBox.Show(@"Port is already in use: " + ex.Endpoint, @"Error");
}
}

private void stop_Click(object sender, RoutedEventArgs e)
{
if (_engine.Active)
{
try
{
_engine.Listener.MessageReceived -= Listener_MessageReceived;
StopListeners();
}
catch (Exception ex)
{
MessageBox.Show("exception in stop: "  + ex);
}
}
}
}
Таким образом, чтобы получать сообщения-ловушки snmp, вам также нужно отправить одно из них.
У меня есть текстовое поле со списком номера порта и IP-адресом.
кнопка отправки ловушки и Кнопка запуска и остановки.
Отправка ловушки работает отлично, я могу проверить в Wireshark, у меня есть пакет snmp, однако ответ ICMP с портом недоступен, что означает, что никто не слушает.-> проблема 1< /p>
При активации движка у меня нет никаких ошибок, но что касается icmp, я проверил cmd с помощью команды: netstat -an, чтобы проверить, прослушивается ли что-то через порт 162, но не повезло.
При активации движка у меня нет никаких ошибок. p>
Как я могу убедиться, что движок работает и/или что-то прослушивает?
Я подписался на событие message_received, но не получаю ничего, что могло бы привести к тому, что никто не получает прослушивание.
И последнее, но не менее важное: когда я нажимаю кнопку остановки, я получаю исключение сокета, но не получаю никаких собственных сообщений от циклов try catch -> Должен ли я предположить это есть в упаковке?
Как решить эту проблему. Я хочу просто получать сообщения-ловушки snmpv1 и сохранять их в таблице данных.

Подробнее здесь: https://stackoverflow.com/questions/639 ... -receiving
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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