15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby
За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.
На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.
Запись на курс до 25 апреля. Получить промодоступ ...
Если не через stream, то как (в каком виде) Вы хотели бы получить файл?
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
//Получаем документ
Database db = session.getDatabase("server", "DB.NSF");
Agent agent = agentContext.getCurrentAgent();
Document doc = db.getDocumentByID(agent.getParameterDocID());
Document doc = db.getDocumentByID("B7DA");
String URL = "<тут путь с логином и паролем>";
//Получаем имена аттачай
String ATTACH_NAME = "";
String ATTACH_BIN = "";
Vector items = doc.getItems();
for (int j = 0; j < items.size(); j++) {
Item item = (Item) items.elementAt(j);
switch (item.getType()) {
case Item.ATTACHMENT:
EmbeddedObject obj = doc.getAttachment(item.getValueString());
ATTACH_NAME = ATTACH_NAME + "Attachment: " + obj.getName() + "\n";
ATTACH_BIN = ATTACH_BIN + Как сюда засунуть бинрник аттача????
break;
}
}
//Формируем текст запроса
String CONTENT = "content=id: ticket/new";
CONTENT = CONTENT + "\nQueue: " + "server";
CONTENT = CONTENT + "\nSubject: " + "SUBJ";
CONTENT = CONTENT + "\nRequestor: " + "FROM MAIL";
CONTENT = CONTENT + "\nText: " + "TEST";
CONTENT = CONTENT + "\n" + ATTACH_NAME;
CONTENT = CONTENT + "\n" + ATTACH_BIN;
//Отправляем запрос в RT
String REQUEST = doPost(URL, CONTENT);
//Парсим ответ сервера
...
}
catch(Exception e) {
e.printStackTrace();
}
}
public String doPost(String urlString, String query) {
String line;
URLConnection urlConnection;
try {
String charset = "UTF-8";
URL url = new URL(urlString);
urlConnection = url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setRequestProperty("Accept-Charset", charset);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
OutputStream output = urlConnection.getOutputStream();
output.write(query.getBytes(charset));
output.close();
StringBuffer response = new StringBuffer();
BufferedReader input = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
while ((line = input.readLine()) != null)
response.append(line + "\n");
input.close();
return response.toString();
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
ну на LS нужно предварительно выгрузить файл из документа в какую либо директорию, чтобы потом взять бинарник через stream.не понятны "претензии" к стриму
ващето - нет...ну на LS нужно предварительно выгрузить файл из документа в какую либо директорию, чтобы потом взять бинарник через stream.
ответ -Не понятно, зачем тут LS?
и мой -может на Java не так, не силен)
накладные расходы по памяти, кот. жвм выделено мало, в нотусне, и ежели не поменять нотес.ини - память могет скончаться
Позволю себе провести небольшой ликбез:Код:String ATTACH_BIN = ""; ATTACH_BIN = ATTACH_BIN + Как сюда засунуть бинрник аттача???? }
Слаб я в Java)По сути вопроса:
Для получения содержимого файла проще всего воспользоваться EmbeddedObject.getInputStream().
Строку из файла делать не надо - это мучительная и затратная по памяти операция, тем более что в итоге вы будете его писать его в OutputStream.
Читайте данные из EmbeddedObject.getInputStream(), конвертируйте в нужный формат ( url-encoded в вашем случае ) и пишите в сonnection.getOutputStream(). В результате - затраты по памяти будут околонулевые.
Vector items = doc.getItems();
for (int j = 0; j < items.size(); j++) {
Item item = (Item)items.elementAt(j);
switch (item.getType()) {
case Item.ATTACHMENT:
EmbeddedObject obj = doc.getAttachment(item.getValueString());
obj.getInputStream() // что дальше с этим делать?
break;
}
}
// Отправляем запрос
OutputStream output = null;
output = urlConnection.getOutputStream();
output.write(query.getBytes(charset));
output.close();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
String bullshit = new String( buffer, "UTF-8" ); // собираем строку. Для бинарных файлов получится какая-то фигня.
String encoded = URLEncoder.encode( bullshit, "UTF-8" ); // енкодим в url-encoded
byte[] bytes = encoded.getBytes(); // и вот этот byte[] пишем в открытый поток
оно уже типа инпут стрим, т.е. его можно подавать на вход "любоой" ф-ции кот. принимает такой базовый класс или юзазать read...obj.getInputStream() - что дальше с этим делать?
byte encoded[] = new sun.misc.BASE64Encoder().encodeBuffer(in);
out.write(encoded);
И как его заиметь для аттача лотусового?)Имея inputStream с контентом файла - просто пишем его в oututStream открытого соединения...
И как его заиметь для аттача лотусового?)
EmbeddedObject eo = doc.getAttachment(...)
InputStream input = eo.getInputStream()
Поэтому вам для начала надо определиться со способом кодировки...
Судя по всему - вы собираетесь гнать его в x-www-form-urlencoded, что не совсем разумно.Ссылка скрыта от гостейThe encoding type application/x-www-form-urlencoded is inefficient for sending large quantities of binary data or text containing non-ASCII characters. Thus, a new media type, multipart/form-data, is proposed as a way of efficiently sending the values associated with a filled-out form from client to server.
Обучение наступательной кибербезопасности в игровой форме. Начать игру!