Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
import java.io.File;
public class GetDiskSpace {
/**
* This sample source code shows
* how to check the disk space of a partition using java
* Property of teknoscope.com
* All Rights Reserved
* Version 1.0
* 08/25/2012
*/
public static void main(String[] args) {
File f = new File("C:\\");
System.out.println("Printing the total space");
System.out.println(f.getTotalSpace() +" bytes");
System.out.println(f.getTotalSpace()/1000.00 +" Kilobytes");
System.out.println(f.getTotalSpace()/1000000.00 +" Megabytes");
System.out.println(f.getTotalSpace()/1000000000.00 +" Gigabytes");
System.out.println("----------------------------");
System.out.println("Printing the free space");
System.out.println(f.getFreeSpace() +" bytes");
System.out.println(f.getFreeSpace()/1000.00 +" Kilobytes");
System.out.println(f.getFreeSpace()/1000000.00 +" Megabytes");
System.out.println(f.getFreeSpace()/1000000000.00 +" Gigabytes");
}
}
ну почему же?На LS - Нет.
Dim fso As Variant
Dim text, fsp As String
Set fso = CreateObject("Scripting.FileSystemObject")
text = ""
Forall d In fso.Drives
If d.DriveType = 2 Then
If d.IsReady Then
fsp = Round(d.AvailableSpace / 1024 / 1024 / 1024, 2)
text = text & "Drive " & d.DriveLetter & ": - free space " & fsp & " Gb." & Chr(10)
End If
End If
End Forall
If text <> "" Then
Msgbox text
End If
работает! Только мне нужна одна цифра - диска, где находится Дата. Это просто продолжение "архивной темы". Нужно в целом чтобы юзер нажал кнопку, скрипт проверил хватит ли места на диске и создал локальную реплику архива.ну почему же?
и получим отлуп по секьюрити нотусевой жвмSystem.out.println(f.getFreeSpace() +" bytes");
import java.io.File;
import org.apache.commons.io.FileSystemUtils;
import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
File[] paths;
// returns pathnames for files and directory
paths = File.listRoots();
// for each pathname in pathname array
for(File path:paths)
{
// prints file and directory paths
System.out.println("Drive Name: "+path);
System.out.println("FreeSpace: "+FileSystemUtils.freeSpaceKb(path.toString()));
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
Sub Initialize
On Error GoTo ErrH
Dim jsession As New Javasession
Dim FSUTIL As Javaclass
Dim FILE As Javaclass
Set FSUTIL=jsession.Getclass({org/apache/commons/io/FileSystemUtils})
Set FILE=jsession.Getclass({java/io/File})
Dim drives
drives=FILE.listRoots()
ForAll path In drives
Dim st As String
st=path.toString()
Print {Drive Name: } st
Print {FreeSpace: } FSUTIL.freeSpaceKb(st)
End ForAll
Quit:
Exit Sub
ErrH:
Error Err, RaiseError
End Sub
Public Type LargeInt
lngLower As Long
lngUpper As Long
End Type
Declare Function GetDiskFreeSpaceEx Lib "kernel32.dll" Alias "GetDiskFreeSpaceExA" _
(ByVal lpDirectoryName As String, lpFreeBytesAvailableToCaller As LargeInt, _
lpTotalNumberOfBytes As LargeInt, lpTotalNumberofFreeBytes As LargeInt) As Long
Public Function FreeDiskSpace(ByVal sDriveLetter As String) As Double
Dim udtFreeBytesAvail As LargeInt, udtTtlBytes As LargeInt
Dim udtTTlFree As LargeInt
Dim dblFreeSpace As Double
If GetDiskFreeSpaceEx(sDriveLetter, udtFreeBytesAvail, udtTtlBytes, udtTTlFree) Then
If udtFreeBytesAvail.lngLower < 0 Then
dblFreeSpace = udtFreeBytesAvail.lngUpper * 2 ^ 32 + udtFreeBytesAvail.lngLower + 4294967296#
Else
dblFreeSpace = udtFreeBytesAvail.lngUpper * 2 ^ 32 + udtFreeBytesAvail.lngLower
End If
End If
FreeDiskSpace = dblFreeSpace
End Function
Dim FreeSpace As Double
FreeSpace = FreeDiskSpace("C:\")
Print CStr(FreeSpace)
это не лучше КОМыDeclare Function GetDiskFreeSpaceEx Lib "kernel32.dll" Alias "GetDiskFreeSpaceExA" _
Option Public
Option Explicit
%REM
Агент демонстрирует как получить информацию о сервере или рабочей станции
используя вызовы Notes API. Вы получите только часть информации, если
будете вызывать функции на деслтопе, также попробуйте их использовать
на сервере для получения подробной информации.
Недокументированная API функция Cmovmem используется в этом примере
под псевдонимом CopyBufferToString - она копирует содержимое буфера
и возвращает данные в виде строки в Лотус скрипт. Иногда использовать
эту функцию небезопасно, но она хороша для сохранения данных.
%END REM
'** Функция статистики
Declare Function StatQuery Lib "nnotes" (Byval headerString As String, _
Byval namePrefix As String, Byval valuePrefix As String, Byval lineSuffix As String, _
rethStats As Long, retStatsLength As Long) As Integer
'** если хотите получить всю статистическую информацию, используйте значение 0& в качестве statName;
'** иначе, вы можете получить специфическую статистику (такую как Time.Current)
Declare Function StatQueryTime Lib "nnotes" (Byval facility As String, _
Byval statName As Any, Byval headerString As String, Byval namePrefix As String, _
Byval valuePrefix As String, Byval lineSuffix As String, rethStats As Long, _
retStatsLength As Long) As Integer
Const STATPKG_OS = "OS"
Const STATPKG_STATS = "Stats"
Const STATPKG_OSMEM = "Mem"
Const STATPKG_OSSEM = "Sem"
Const STATPKG_OSSPIN = "Spin"
Const STATPKG_OSFILE = "Disk"
Const STATPKG_SERVER = "Server"
Const STATPKG_REPLICA = "Replica"
Const STATPKG_MAIL = "Mail"
Const STATPKG_MAILBYDEST = "MailByDest"
Const STATPKG_COMM = "Comm"
Const STATPKG_NSF = "Database"
Const STATPKG_NIF = "Database"
Const STATPKG_TESTNSF = "Testnsf"
Const STATPKG_OSIO = "IO"
Const STATPKG_NET = "NET"
Const STATPKG_OBJSTORE = "Object"
Const STATPKG_AGENT = "Agent"
Const STATPKG_WEB = "Web"
Const STATPKG_CAL = "Calendar"
Const STATPKG_SMTP = "SMTP"
Const STATPKG_LDAP = "LDAP"
Const STATPKG_NNTP = "NNTP"
Const STATPKG_ICM = "ICM"
Const STATPKG_MONITOR = "Monitor"
Const STATPKG_POP3 = "POP3"
'** Функции памяти
Declare Function OSLockObject Lib "nnotes.dll" (Byval objectHandle As Long) As Long
Declare Function OSUnlockObject Lib "nnotes.dll" (Byval objectHandle As Long) As Integer
Declare Function OSMemFree Lib "nnotes" (Byval handle As Long) As Integer
'** недокументировання функция Notes API копирования буфера памяти в строку
Declare Sub CopyBufferToString Lib "nnotes.dll" Alias "Cmovmem" _
(Byval lpSrc As Long, Byval lpDest As String, Byval lSize As Long)
'** если вы хотите копировать не строковые данные, используйте параметр lpDest As Any
Declare Sub CopyBuffer Lib "nnotes.dll" Alias "Cmovmem" _
(Byval lpSrc As Long, lpDest As Any, Byval lSize As Long)
Sub Initialize
'** выгрузка данных в файл -- код должен быть запущен на сервере и для получения должны быть данные
Dim newLine As String
Dim fileNum As Integer
Dim fileName As String
Dim nError As Integer
Dim statBuffer As Long
Dim statBufferLen As Long
Dim statArray(0 To 25) As String
statArray(0) = STATPKG_OS
statArray(1) = STATPKG_STATS
statArray(2) = STATPKG_OSMEM
statArray(3) = STATPKG_OSSEM
statArray(4) = STATPKG_OSSPIN
statArray(5) = STATPKG_OSFILE
statArray(6) = STATPKG_SERVER
statArray(7) = STATPKG_REPLICA
statArray(8) = STATPKG_MAIL
statArray(9) = STATPKG_MAILBYDEST
statArray(10) = STATPKG_COMM
statArray(11) = STATPKG_NSF
statArray(12) = STATPKG_NIF
statArray(13) = STATPKG_TESTNSF
statArray(14) = STATPKG_OSIO
statArray(15) = STATPKG_NET
statArray(16) = STATPKG_OBJSTORE
statArray(17) = STATPKG_AGENT
statArray(18) = STATPKG_WEB
statArray(19) = STATPKG_CAL
statArray(20) = STATPKG_SMTP
statArray(21) = STATPKG_LDAP
statArray(22) = STATPKG_NNTP
statArray(23) = STATPKG_ICM
statArray(24) = STATPKG_MONITOR
statArray(25) = STATPKG_POP3
newLine = Chr(13) & Chr(10)
'** открытие тукстового файла
fileNum = Freefile()
fileName = "C:\TestStats.txt"
Open fileName For Output As fileNum
'** выгрузка одиночниых данных, используя StatQueryTime
nError = StatQueryTime (STATPKG_STATS, "Time.Start", "Start Time:" & newline, _
" ", Chr(9), newLine, statBuffer, statBufferLen)
Print #fileNum, "GETTING SINGLE STAT USING StatQueryTime"
If (nError = 0) Then
Print #fileNum, GetBufferAsString(statBuffer, Cint(statBufferLen), 0, True)
Else
Print #fileNum, "API Error " & nError & " calling StatQueryTime"
End If
'** выгрузка всех данных, используя StatQueryTime
Print #fileNum, "GETTING ALL STATS USING StatQueryTime"
Forall stat In statArray
nError = StatQueryTime (stat, 0&, "Statistics for " & stat & ":" & newLine, _
" ", Chr(9), newLine, statBuffer, statBufferLen)
If (nError = 0) Then
Print #fileNum, GetBufferAsString(statBuffer, Cint(statBufferLen), 0, True)
Else
Print #fileNum, "API Error " & nError & " calling StatQueryTime"
End If
End Forall
'** выгрузка всех данных в файл, используя StatQuery
nError = StatQuery ("From Stat Query:" & newLine, " ", Chr(9), newLine, _
statBuffer, statBufferLen)
Print #fileNum, "GETTING ALL STATS USING StatQuery (" & statBufferLen & " bytes)"
If (nError = 0) Then
'** здесь возможно использовать более 32,767 (наибольшее значение в Notes для типа Integer)
'** таким образом потребуется несколько проходов
Dim chunkSize As Integer
Dim offset As Long
Dim freeMem As Integer
While statBufferLen > 0
If (statBufferLen > 32767) Then
chunkSize = 32767
freeMem = False
Else
chunkSize = statBufferLen
freeMem = True
End If
Print #fileNum, GetBufferAsString(statBuffer, chunkSize, offset, freeMem);
offset = offset + chunkSize
statBufferLen = statBufferLen - chunkSize
Wend
Else
Print #fileNum, "API Error " & nError & " calling StatQuery"
End If
'** не принебрегайте закрытием файла после выгрузки в него данных
Close fileNum
Print "Finished writing to " & fileName
End Sub
Function GetBufferAsString (buffer As Long, bufferLen As Integer, _
offset As Long, freeMem As Integer) As String
'** Копирование информации из буфера в строку
'** используя недокументированную функцию Cmovmem API
'**
'** "buffer" адрес буфера
'** "bufferLen" количество байт для копирования
'** "offset" точка отсчета начала копирования (
'** "freeMem" индикатор буфера
'** по необходимости буфер можно очищать или оставлять так как есть
'**
'** Julian Robichaux -- http://www.nsftools.com
Dim pointer As Long
Dim bufferText As String
bufferText = Space(bufferLen)
pointer = OSLockObject(buffer)
Call CopyBufferToString(pointer + offset, bufferText, Clng(bufferLen))
Call OSUnlockObject(buffer)
'** Предупреждение: если после вызова OSMemFree вы попробуете заблокировать или
'** получить доступ к буферу, тогда это приведет к сбою лотуса
If freeMem Then
Call OSMemFree(buffer)
End If
GetBufferAsString = bufferText
End Function
Так же непереносимо в другую среду, но лучше... как мне кажется.это не лучше КОМы
теперь по ответу @erdi, ну зачем опять КОМ? вот ничем не сложнее:
1. Microsoft уже давно объявило эксперимент с технологией COM неудачным и всеми силами пытается от него избавиться, но некоторые корпоративные программисты продолжают его использовать и мешают Microsoft сделать это. Но когда-нибудь у них это получится. Я верю.Отчего юзать КОМ не приветствуется?
Обучение наступательной кибербезопасности в игровой форме. Начать игру!