· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.NETWORKS —› Read 139 port

. 1 . 2 . >>

Посл.отвђт Сообщен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:23

invoke 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)

. 1 . 2 . >>