Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Сканнер IP по порту


Автор: Budy 6.11.2004, 22:33
:Привет
Делаю чат. Хочу поймать узнать все IP юзеров в сети по заданному порту.
Прошу помочь

Автор: Budy 9.11.2004, 19:17
Нуже, кто-нить! Я знаю порт, как узнать на каких IP работает мой чат? smile

Автор: p0s0l 10.11.2004, 00:57
К примеру, узнавай IP всех компов в сети (см. ФАК) и у каждого проверяй порт. Можно broadcast'ить, причём каждая прога-чат должна прислать ответ, но, имхо, это хуже ...

Автор: Budy 10.11.2004, 20:49
Не понял, там вывод DWORD и WORD. smile

Автор: p0s0l 10.11.2004, 22:27
Код
function FillNetLevel(xxx: PNetResource; List:TStrings): Word;
Type
   PNRArr = ^TNRArr;
   TNRArr = array[0..59] of TNetResource;
Var
  x: PNRArr;
  tnr: TNetResource;
  I : integer;
  EntrReq,
  SizeReq,
  twx: THandle;
  WSName: string;
  LI:TListItem;
begin
    Result :=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER, xxx, twx);
    If Result = ERROR_NO_NETWORK Then Exit;
    if Result = NO_ERROR then
    begin
           New(x);
           EntrReq := 1;
           SizeReq := SizeOf(TNetResource)*59;
           while (twx <> 0) and
                 (WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
           begin
                 For i := 0 To EntrReq - 1 do
                 begin
                  Move(x^[i], tnr, SizeOf(tnr));
                  case tnr.dwDisplayType of
                   RESOURCEDISPLAYTYPE_SERVER:
                   begin
                      if tnr.lpRemoteName <> '' then
                          WSName:= tnr.lpRemoteName
                          else WSName:= tnr.lpComment;
                      list.Add(tnr.lpRemoteName);
                   end;
                   else FillNetLevel(@tnr, list);
                  end;
                 end;
           end;
           Dispose(x);
           WNetCloseEnum(twx);
    end;
end;

// пример вызова
 FillNetLevel(nil,  Listbox1.Items);

(C) Pegas

Как перевести HostName -> IP - много раз спрашивалось...

PS:
Так чё-то посмотрел, очень медленно пашет, надо сказать (если несколько рабочих групп)...
Лучше при запуске чата посылай широковещательные пакеты, а работающие в сети чаты должны откликаться в ответ...
Можно также сделать настройку в чате, какие адреса проверять при запуске чата...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)