Как я получаю ловушки SNMP на OS X? - PullRequest
0 голосов
/ 16 июля 2009

Мне нужно получить и проанализировать некоторые SNMP-ловушки (сообщения), и я был бы признателен за любые советы по получению кода, который у меня работает на моей машине с OS X. Мне дали немного кода Java, который работает на Windows с net-snmp. Я хотел бы либо запустить Java-код на моей машине для разработки, либо добавить немного кода Python, чтобы сделать то же самое.

Мне удалось получить код Java для компиляции на моей машине с OS X, и он работает без каких-либо жалоб, включая ни одно из исключений, которые я бы ожидал, если бы он не смог привязаться к сокету 8255. Однако он никогда сообщает о получении каких-либо SNMP-ловушек, что заставляет меня задуматься, действительно ли он способен читать в сокете. Вот что я собираю, чтобы быть кодом из Java-программы, которая привязывается к сокету:

DatagramChannel dgChannel1=DatagramChannel.open();
Selector mux=Selector.open();
dgChannel1.socket().bind(new InetSocketAddress(8255));
dgChannel1.configureBlocking(false);
dgChannel1.register(mux,SelectionKey.OP_READ);
while(mux.select()>0) {
    Iterator keyIt = mux.selectedKeys().iterator();
    while (keyIt.hasNext()) {
        SelectionKey key = (SelectionKey) keyIt.next();
        if (key.isReadable()) {
            /* processing */
        }
    }
}

Поскольку я не знаю Java и мне нравится возиться с Python, я установил libsnmp через easy_install и попытался заставить это работать. Примеры программ traplistener.py и trapsender.py без проблем общаются друг с другом, но если я запускаю traplistener.py в ожидании своих собственных сигналов SNMP, я снова ничего не получаю. Я должен отметить, что мне пришлось запускать программы на Python через sudo, чтобы получить разрешение на доступ к сокетам. Запуск java-программы через sudo не дал результатов.

Все это заставляет меня подозревать, что обе программы имеют проблемы с OS X и ее сокетами, возможно, с их разрешениями. Например, мне пришлось изменить разрешения на устройствах /dev/bpf, чтобы Wireshark работал. Другая мысль заключается в том, что это как-то связано с тем, что на моей машине включено несколько сетевых адаптеров, включая eth0 (ethernet, где я вижу сообщения о ловушке благодаря Wireshark) и eth1 (wifi). Может ли это быть проблемой?

Как видите, я очень мало знаю о сокетах или SNMP, поэтому любая помощь очень ценится!

Обновление: При использовании lsof (точнее sudo lsof -i -n -P) моя проблема заключается в том, что java-программа прослушивает IPv6 только тогда, когда отправитель ловушек использует IPv4. Я пытался отключить IPv6 (sudo ip6 -x) и сказать java использовать IPv4 (java -jar bridge.jar -Djava.net.preferIPv4Stack=true), но я продолжаю находить свою программу, используя IPv6. Есть мысли?

java      16444          peter   34u  IPv6 0x12f3ad98      0t0    UDP *:8255

Обновление 2: Хорошо, наверное, у меня неправильный порядок параметров java: java -Djava.net.preferIPv4Stack=true -jar bridge.jar переводит программу в IPv4. Тем не менее, моя программа все еще не показывает никаких признаков получения пакетов, которые, как я знаю, есть.

Ответы [ 2 ]

0 голосов
/ 16 июля 2009

Хорошо, решение для того, чтобы заставить мой код работать, состояло в том, чтобы запустить программу как java -Djava.net.preferIPv4Stack=true -jar bridge.jar и выключить и включить питание SNMP-ловушки. Спасибо за вашу помощь, Брайан.

0 голосов
/ 16 июля 2009

Стандартный номер порта для прерываний SNMP - 162.

Есть ли причина, по которой вы указываете другой номер порта? Обычно вы можете изменить номер порта, на который отправляются / принимаются прерывания, но, очевидно, оба конца должны согласиться. Поэтому мне интересно, если это ваша проблема.

...