|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 19, 2004 20:05:01 Здравствуйте! Подскажите плиз как вытащить всю инфу которая храниться на 139 порту удалённого компа? (а там вроде не мало полезной инфы, мне особенно интересует - скоко удалённых компов сидят там на данным момент?) Заранее Очень Благодарен! |
|
|
Дата: Июл 19, 2004 20:26:07 Для начала поставь какой-нибудь сканер, который пройдется по всем портам компа и выдаст тебе все расшаренные ресурсы на нем. |
|
|
Дата: Июл 19, 2004 21:31:42 Toxic, нафиг? :) сканер-то умеет получать инфу из портов, а вот я - нет :) |
|
|
Дата: Июл 20, 2004 02:51:06 найди сканер с сурсами.. :))) суросфорж может подойдет |
|
|
Дата: Июл 20, 2004 10:51:38 surosforg? |
|
|
Дата: Июл 20, 2004 13:01:31 sourceforge.net |
|
|
Дата: Авг 17, 2004 22:55:21 Решил продолжить пост. Узнал что через NetSessionEnum моно получить ip всех находящихся на удалённом компе. Пошарил в инете но так нечего полезного и не нашёл... везде токо один исходник на си и сё. По причине собственного ламерства - не хватает ума перевести на асмовский язык :( вот исходник: #ifndef UNICODE
#define UNICODE
#endif
#include <stdio.h>
#include <assert.h>
#include <windows.h>
#include <lm.h>
int wmain(int argc, wchar_t *argv[])
{
LPSESSION_INFO_10 pBuf = NULL;
LPSESSION_INFO_10 pTmpBuf;
DWORD dwLevel = 10;
DWORD dwPrefMaxLen = -1;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
DWORD dwResumeHandle = 0;
DWORD i;
DWORD dwTotalCount = 0;
LPTSTR pszServerName = NULL;
LPTSTR pszClientName = NULL;
LPTSTR pszUserName = NULL;
NET_API_STATUS nStatus;
//
// Проверяем аргументы командной строки.
//
if (argc > 4)
{
wprintf(L"Usage: %s [\\\\ServerName] [\\\\ClientName] [UserName]\n", argv[0]);
exit(1);
}
if (argc >= 2)
pszServerName = argv[1];
if (argc >= 3)
pszClientName = argv[2];
if (argc == 4)
pszUserName = argv[3];
// Вызываем NetSessionEnum, указывая уровень 10.
do // начало do
{
nStatus = NetSessionEnum(pszServerName,
pszClientName,
pszUserName,
dwLevel,
(LPBYTE*)&pBuf,
dwPrefMaxLen,
&dwEntriesRead,
&dwTotalEntries,
&dwResumeHandle);
// Если вызов функции был удачен,
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
{
if ((pTmpBuf = pBuf) != NULL)
{
// Получение результатов в цикле.
for (i = 0; (i < dwEntriesRead); i++)
{
assert(pTmpBuf != NULL);
if (pTmpBuf == NULL)
{
fprintf(stderr, "An access violation has occurred\n");
break;
}
// Распечатываем полученные данные.
wprintf(L"\n\tClient: %s\n", pTmpBuf->sesi10_cname);
wprintf(L"\tUser: %s\n", pTmpBuf->sesi10_username);
printf("\tActive: %d\n", pTmpBuf->sesi10_time);
printf("\tIdle: %d\n", pTmpBuf->sesi10_idle_time);
pTmpBuf++;
dwTotalCount++;
}
}
}
// Иначе, выводим сообщение об ошибке.
else
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
// Освобождаем выделенную память.
if (pBuf != NULL)
{
NetApiBufferFree(pBuf);
pBuf = NULL;
}
}
// Продолжаем вызывать NetSessionEnum до тех пор пока есть ещё данные.
while (nStatus == ERROR_MORE_DATA); // end do
// Снова проверяем выделенный буфер.
if (pBuf != NULL)
NetApiBufferFree(pBuf);
// Отображаем окончательное количество сессий.
fprintf(stderr, "\nTotal of %d entries enumerated\n", dwTotalCount);
return 0;
}
мне-бы токо знать с какими параметрами задать invoke NetSessionEnum с остальным сам справлюсь. Благодарю за внимание. |
|
|
Дата: Авг 18, 2004 06:53:23invoke NetSessionEnum,offset szServerName,
offset szClientName,
offset szUserName,
dwLevel,
offset pBuf,
dwPrefMaxLen,
offset dwEntriesRead,
offset dwTotalEntries,
offset dwResumeHandle
где
dwLevel dd 10
dwPrefMaxLen dd -1
Не уверен, но что-то в этом роде... |
|
|
Дата: Авг 18, 2004 09:58:11 Stub Вместо dwLevel можно использовать константу - 10. Этот параметр задает версию затребованной структуры - LPSESSION_INFO_10. |
|
|
Дата: Авг 18, 2004 14:21:42 Не считайте пожайлуста за наглость, но может кто знает почему выдаёт какие-то цифры? .386p
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\Netapi32.inc
includelib \masm32\lib\Netapi32.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
.data
szServerName db "\\192.168.0.1",0
szClientName db 1024 dup(?)
szUserName db 1024 dup(?)
dwEntriesRead db 1024 dup(?)
dwTotalEntries db 1024 dup(?)
dwResumeHandle db 1024 dup(?)
pBuf dd ?
retCode db 1024 dup(?)
szError db "error",0
.code
obnull proc
mov ecx,1024
mov edi,offset retCode
lll:mov byte ptr [edi],0
inc edi
loop short lll
ret
obnull endp
start:
invoke GlobalAlloc,GMEM_FIXED OR GMEM_ZEROINIT,10000
mov pBuf,eax
invoke NetSessionEnum,offset szServerName,\
offset szClientName,\
offset szUserName,10,pBuf,-1,\
offset dwEntriesRead,\
offset dwTotalEntries,\
offset dwResumeHandle
.if eax != 0
invoke dwtoa,pBuf,offset retCode
invoke MessageBoxA,0,offset retCode,0,0
invoke obnull
invoke dwtoa,offset dwEntriesRead,offset retCode
invoke MessageBoxA,0,offset retCode,0,0
invoke obnull
invoke dwtoa,offset dwTotalEntries,offset retCode
invoke MessageBoxA,0,offset retCode,0,0
invoke obnull
invoke dwtoa,offset dwResumeHandle,offset retCode
invoke MessageBoxA,0,offset retCode,0,0
invoke obnull
invoke dwtoa,offset szUserName,offset retCode
invoke MessageBoxA,0,offset retCode,0,0
invoke obnull
invoke dwtoa,offset szClientName,offset retCode
invoke MessageBoxA,0,offset retCode,0,0
invoke obnull
.else
invoke MessageBoxA,0,offset szError,offset szError,0
.endif
invoke GlobalFree,pBuf
invoke ExitProcess,0
end start
|
|
|
Дата: Авг 19, 2004 06:00:42 Flasher 1) Под какой ОС запускаешь? Судя по использованию Netapi32.lib - w2k или xp? 2) Функция NetSessionEnum в случае успешного завершения возвращает NERR_Success, которая определена в LMErr.h так #define NERR_Success 0твой код напротив предполагает успешное завершение по неравенству нулю. 3) В случае успешного завершения NetSessionEnum внутри себя зарезервирует память, а ее адрес поместит по переданному в качестве пятого параметра адресу. После работы с этим буфером необходимо его освободить, вызвав NetApiBufferFree. Смотри внимательно исходный текст на Си. 4) Второй и третий параметры функции NetSessionEnum являются входными строками. На каком основании ты пытаешься преобразовать их в цифры? 5) Про подпрограмму obnul. Кто научил тебя так занулять буфер? Есть movsb, movsw, movsd с префиксом rep. Есть kernel32.RtlZeroMemory. 6) Если внимательно посмотришь на исходный текст dwtoa, то увидишь, что она добавляет нуль-символ в конец созданной строки, т.е. необходимости в предварительном занулении буфера нет. Итого. Ты вообще смотрел на описание NetSessionEnum? |
|
|
Дата: Авг 19, 2004 19:51:23 · Поправил: Stub pTmpBuf->sesi10_cname можно переписать как (*pTmpBuf)sesi10_cname и т.д., если мне не изменяет память... в C++ не очень шарю, так и не удалось его освоить на должном уровне... А так смотри структуры... тогда все должно стать более понятно... |
|
|
Дата: Авг 22, 2004 14:23:44 Вот чего добился: .data
szServerName db "\\192.168.0.1",0
dwEntriesRead db 1024 dup(?)
dwTotalEntries db 1024 dup(?)
pBuf SESSION_INFO_10 <?>
buf db 1024 dup(?)
fmt db "%s",0
.code
start:
invoke NetSessionEnum,offset szServerName,\
NULL,\
NULL,\
10,\
offset pBuf,\
-1,\
offset dwEntriesRead,\
offset dwTotalEntries,\
NULL
.if eax != NERR_Success
invoke wsprintf,offset buf,offset fmt,offset pBuf
invoke MessageBoxA,0,offset buf,offset buf,0
.endif
invoke NetApiBufferFree,offset pBuf
invoke ExitProcess,0
end start
Как переписать эту строку pBuf->sesi10_cname на асме? (*pBuf)sesi10_cname - ни хотит понимать мой компилятор. |
|
|
Дата: Авг 22, 2004 19:23:43 · Поправил: Stub pTmpBuf->sesi10_cname == (*pTmpBuf).sesi10_cname (это так можно в С++ записать, это я так для наглядности написал) *pTmpBuf это указатель на класс sesi10_cname чтобы понять как переписать, надо посмотреть что из себя представляет SESSION_INFO_10 |
|
|
Дата: Авг 22, 2004 19:42:31 · Поправил: Stub
typedef struct _SESSION_INFO_10 {
LMSTR sesi10_cname; // client name (no backslashes)
LMSTR sesi10_username;
DWORD sesi10_time;
DWORD sesi10_idle_time;
} SESSION_INFO_10, *PSESSION_INFO_10, *LPSESSION_INFO_10;
Вот структура Подозреваю, что LMSTR это LPSTR, т.е. указатель на строку (LPSTR typedef PTR BYTE) |