Все про Интернет
       (N 384) 2011 - 2012
        << Архив передач >>
 Логин:  Пароль:
[регистрация]     запомнить 
 Поиск по сайту:
[Сайты зрителей] [Рейтинг] [Статьи] [Форум] [Блог] [Киберспорт] [Конкурсы] [О передаче]
 

NetAPI. Детектор подключений

raxp@mail.zp.ua

Данная статья является логическим продолжением [1].

Краткий экскурс...
Последнее время "сетка" так разрослась, как и количество желающих "покачать у соседа", что пришлось ставить ftp сервак. Тем не менее, сетевые папки по необходимости остались, а вызывать и обновлять вручную каждый раз системный менеджер сессий ОС (консоль MMC), чтобы глянуть кто висит на машине, просто надоело. "Лень - двигатель пргресса". Мониторинг подключений достаточно просто осуществить, воспользовавшись системными библиотеками самой оси. Для 9x/Me - это srvapi. Для NT подобных - это netapi.

Решение*

Для получения необходимой информации по подключениям используем функции, экспортируемые системной библиотекой netapi32.dll

  • NetSessionEnum
  • NetFileEnum
  • NetSessionDel (желающие могут добавить и контроль “нежелательных элементов”)
  • NetFileClose

* Создание формы на WinAPI опускаем. Полный исходный текст детектора и компиляция доступен по [2].

Прежде всего, осуществим сканирование сессий и подключений

 …
 setlength(ip_ses,0);	//массив IP
 setlength(name_ses,0);	//массив юзеров по сессиям
 setlength(name_file,0);	//массив юзеров по файлам и папкам
 setlength(path_file,0);	// массив папок и файлов
 //
 FLibHandle:= LoadLibrary('NETAPI32.DLL');
 if FLibHandle = 0 then Exit;
 @NetSessionEnumNT:= GetProcAddress(FLibHandle, 'NetSessionEnum');
 SessionInfo502:= nil;
 if NetSessionEnumNT(nil,nil,nil,502,@SessionInfo502,DWORD(-1),@entriesreadNT, 
 		@totalentries, nil)=0 then begin
  for i:=0 to EntriesReadNT-1 do begin
   setlength(ip_ses,length(ip_ses)+1); //IP
   ip_ses[length(ip_ses)-1]:= string(SessionInfo502^[i].sesi502_cname);
   setlength(name_ses,length(name_ses)+1); //NAME
   name_ses[length(name_ses)-1]:= SessionInfo502^[i].sesi502_username
  end
 end else gl_mig:= false;
//скан по файлам-
 @NetFileEnumNT:= GetProcAddress(FLibHandle, 'NetFileEnum');
 if not Assigned(NetFileEnumNT) then begin FreeLibrary(FLibHandle); Exit end;
 FileInfoNT:= nil;
 if NetFileEnumNT(nil,nil,nil,3,@FileInfoNT,DWORD(-1),@entriesreadNT, 
 		@totalentries, nil)=0 then begin
 //проверяем "чтение" файла и выставляем флаг смены маски в иконке (мигание)  
 if EntriesReadNT > 0 then gl_mig:= not gl_mig else gl_mig:= false;
 //
  for i:=0 to EntriesReadNT-1 do begin
   setlength(path_file,length(path_file)+1); //PATH
   path_file[length(path_file)-1]:= FileInfoNT^[i].fi3_pathname;
   setlength(name_file,length(name_file)+1); //NAME
   name_file[length(name_file)-1]:= FileInfoNT^[i].fi3_username
  end
 end;
 FreeLibrary(FLibHandle);
…

добавим выборку информации о подключениях по сессиям (сортировку)

… 
for i:= 0 to length(name_ses)-1 do begin
  if name_ses[i]<>'' then gl_stat:= gl_stat + 'o ' + ip_ses[i]
  		 + ' (' + name_ses[i] + ')' + #10;
  for j:= 0 to length(name_file)-1 do
   if name_ses[i]=name_file[j] then gl_stat:= gl_stat + path_file[j] + #10;
 end;
 if length(path_file)=0  then gl_stat:= 'Угроза отсутствует!'
…

не забыть про горячую клавишу

…
id:=GlobalAddAtom('hotkey1');
RegisterHotKey(handle,id,mod_control,ord('1'));
…

и осталась обработка "кликов"

…
function WndProc(hnd, wmsg, wparam, lparam: integer): integer; stdcall;
begin
 case wmsg of
  //консольное сообщение [mmc]
  WM_HOTKEY: mmc; //наша горячая клавиша
  //обрабатываем клики по иконке в трее
  TRAY_CALLBACK: case dword(lparam) of
           WM_MBUTTONDOWN  : begin //средняя кнопка 
                              UnRegisterHotKey(handle,id);
                              PostQuitMessage(handle);
                              timer_destroy;
                              closeWindow(Handle)
                             end;
           WM_LBUTTONUP    : begin //левая кнопка
                              hint:= 'NetAPI';
                              show_tn(1,gl_stat,'NetAPI. 
		Статистика подключений...')
                             end;
          end;
  else Result:= DefWindowProc(hnd, wmsg, wparam, lparam);
 end
end;
…
Итак, если у вас просматривают сетевые папки или файлы, то в трее иконка начнет мигать и при клике левой кнопкой мыши вы увидите "кто и что":


При отсутствии сессий - "угроза отсутствует" (поклонники Стива Мартина поймут):


Ссылки:


Контактная информация:

raxp@mail.zp.ua

27.04.2008


[Переход к списку статей]

 
 

[Видеоархив]

Передача создана дизайн-студией Conus Video
По вопросам размещения рекламы или информации в передаче Internet@Mania пишите imania@mail.zp.ua, или звоните
8(0612)63-80-84


Share |
 
 


Провайдеры Запорожья
zp-provider.narod.ru
providers.portall.zp.ua
Домовые сети
linet.zp.ua
setka.zp.ua
biscom.zp.ua
homenet.zp.ua
www.16x.zp.ua
www.ss.zp.ua
www.skynet.zp.ua
www.watson.zp.ua
www.link.zp.ua
www.kichkas.net
www.neuro.zp.ua
innkom.zp.ua
Каталоги Запорожья
www.otvet.zp.ua
www.portall.zp.ua
www.zaporozhye.org
www.spravka.zp.ua
Форумы
www.forumzone.zp.ua
forum.mail.zp.ua
forum.tinet.zp.ua
forum.nulled-warez.org
forum2.biscom.zp.ua
myforum.net.ua
forum.ru-board.com
forstud.org.ua
Чаты
chatzone.zp.ua
4at.zp.ua
chatinet.zp.ua
chatik.zp.ua
Компьютерные сайты
www.ixbt.com
www.techlabs.ru
www.thg.ru
www.overclockers.ru
Игровые сайты
www.games.zp.ua
www.ag.ru
www.gamemag.ru
www.uaplay.com
www.gameg.info
Журналы
www.seti.com.ua
www.cpp.com.ua
www.shpil.com
www.chip.ua
Блоги
revolver.ru
dirty.ru
photoblog.ru
www.autoblog.ru

 
    Передача создана дизайн-студией Conus Video
    По вопросам размещения рекламы или информации в передаче Internet@Mania пишите нам imania@mail.zp.ua, или звоните 8(0612)63-80-84