• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Java-консоль мешает?

magistr

Green Team
03.11.2015
17
1
BIT
0
У меня интересный вопрос.​

Написал java-агента, который выполняет HTTP запрос на сайт (не важно на какой). Так вот, агент отказался в консоль выводить ответ с сервера - с криком
java.lang.NullPointerException
at sun.net.
at sun.net.
at COM.ibm.JEmpower.applet.http.HttpURLConnection.getInputStream(HttpURLConnection.java:411)
at COM.ibm.JEmpower.applet.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:703)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:399)
at JavaAgent.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Я естественно взял бубен и стал в него ритмично бить... И ответ пришёл в виде: "Перезапусти Lotus Notes - запусти агента - открой консоль и увидишь там то что агент отработал правильно! Повторный запуск агента - работает!"
Всё супер, раз всё работает - я решительно запускаю второго агента (точно такого же, это для теста делал) опять в консоль крик об ошибке - NullPointerException её мать!!! Перезагружаю Lotus, по порядку запускаю всех агентов, открываю консоль - и всё работает... Странно, подумал я, и вот прошу помощи у Вас. Что с этим делать? Как исправить работу агента, чтобы его консоль не "убивала"?
Я так понял, что консоль каким-то образом влияет на работу агентов (пока встретил такое только при HTTP запросах). На всякий случай код агента - кому интересно попробуйте у себя.

P.S.
IBM Notes 9 Social Edition
Release 9.0.1
Revision 20131022.1138 (Release 9.0.1)
Standard Configuration

Server build number: Release 9.0.1FP2

База старенькая, с шаблона делал: File format: R85 (51:0) ODS version: 51 соответственно ))

Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import lotus.domino.*;

public class JavaAgent extends AgentBase {
    
    public void NotesMain() {
        
        String query = "https://ya.ru";  // например
        HttpURLConnection connection = null;
        
        try {
            Session session = getSession();
            AgentContext agentContext = session.getAgentContext();
            
            connection = (HttpURLConnection) new URL(query).openConnection();
            connection.setRequestMethod("GET");
            connection.setUseCaches(false);
            connection.setConnectTimeout(250);
            connection.setReadTimeout(250);
            connection.connect();
            StringBuilder sb = new StringBuilder();
            System.out.println(connection.getResponseCode());
            
            if (HttpURLConnection.HTTP_OK == connection.getResponseCode()) {
                BufferedReader in = new BufferedReader (new InputStreamReader(connection.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    sb.append(line);
                    sb.append("\n");
                }
                System.out.println(sb.toString());
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    
}
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 924
608
BIT
129
@magistr в данном коде не много месте - где вылезает ошибка, но всеж - поставьте галочку для включение отладочной информации в код агента
у меня подозрение - не успевает отработать GC на к-то глобальном объекте
попробуйте закрывать стримы вручную и, возможно - закрывать соединение
 
  • Нравится
Реакции: magistr

garrick

Lotus Team
26.10.2009
1 339
150
BIT
101
А закрывать соединения, сессии и контексты Пушкин будет? Ваш агент тупо зависает, при этом блокируя порты, а, следовательно, и возможность повторного запуска.

По воводу бубна. На будущее. Самый первый удар в него это должно было быть ваше действие по включению опции компиляции агента с включением отладочной ининформации. Вы этого не сделали.
 
  • Нравится
Реакции: magistr

magistr

Green Team
03.11.2015
17
1
BIT
0
Да причём тут Пушкин? Сама суть не в сессиях, а в запуске... Запуск не работает - сессия не открыта ))
А по поводу "бубна" - это для увлекательного чтенния, отладка включена - HttpURLConnection.HTTP_OK выскакивает (((
 

garrick

Lotus Team
26.10.2009
1 339
150
BIT
101
1. Сессия не "не открыта", а не закрыта с предыдущего запуска. Вы не закрываете Notes Session, не закрываете AgentContext, не закрываете InputStream, не закрываете InputStreamReader, не закрываете BufferReader - похоже тут без Пушкина никак не справиться.
2. Агент скомпилирован без отладочной информации, это видно по stacktrace
Код:
at JavaAgent.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
в противном случае тут были бы номера строк кода, где возникла ошибка.
 
Последнее редактирование:
  • Нравится
Реакции: magistr

magistr

Green Team
03.11.2015
17
1
BIT
0
Короче всё ясно, первый ответ - ответ! Второй уже троллинг какой-то ((
Тему можно закрыть. Ошибку эту не устранить - это баг в Lotus. В ИБИЭМ посоветовали забить...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 924
608
BIT
129
Короче всё ясно, первый ответ - ответ! Второй уже троллинг какой-то ((
Тему можно закрыть. Ошибку эту не устранить - это баг в Lotus. В ИБИЭМ посоветовали забить...
@garrick прав и я на это тоже указал - объекты надо "закрывать" у нотусевых - recyle, у др. по их докам
и отладка в агенте покажет строку - где имеем пустой объект
[doublepost=1494597554,1494597456][/doublepost]разница работы программы в jvm и агента - "громадна"
и требует вдумчивого написания
 
  • Нравится
Реакции: magistr
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!