![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Доброе время суток!
Помогите сделать, такую тему, надо сделать программу что она при запуске в memo выводила все ip адреса и имена компов которые подключены в данную локальную сеть. Спасибо. |
|
|
|
|
| Реклама: | сколько стоит общий наркоз при операции | Мебельный магазин: комод дуб беленый - Переходи на сайт! | цветы с др | где купить мыльный камень для заточки штихелей | Магазин бытовой техники: электрический чайник bosch twk 8613 - переходи на сайт ТАЙМТВ! |
|
|
#2
|
|
Думаю вам гугл должен помочь, много исходников есть в сети
|
|
|
|
|
|
|
#3
|
|
Новичок
Пол:
Регистрация: 31.03.2009
Сообщений: 17
Репутация: 0
|
в самом простов варианте делаем поля для ввода диаппазона адресов, далее перебором делаем програмный пинг, например раньше для одного IP делалось так:
================================================== ================================================== == 1. Запускаем Delphi; 2. В Новом проекте добавляем в форму Tbutton, Tedit и Tmemo; 3. Вставляем "winsock"; 4. объявляем структурку для IP-заголовка: type IPINFO = record Ttl :char; Tos :char; IPFlags :char; OptSize :char; Options :^char; end; 5. объявляем структурку для хранения ICMP пакета: type ICMPECHO = record Source :longint; Status :longint; RTTime :longint; DataSize:Shortint; Reserved:Shortint; pData :^variant; i_ipinfo:IPINFO; end; 6. Объявляем функции и процедуры, которые мы будем вызывать из ICMP.DLL TIcmpCreateFile = function():integer; {$IFDEF WIN32} stdcall; {$ENDIF} TIcmpCloseHandle = procedure(var handle:integer);{$IFDEF WIN32} stdcall; {$ENDIF} TIcmpSendEcho = function(var handle:integer; endereco:DWORD; buffer:variant; tam:WORD; IP:IPINFO; ICMP:ICMPECHO; tamicmp:DWORD; tempo:DWORD):DWORD;{$IFDEF WIN32} stdcall; {$ENDIF} 7. В Tbutton в событие Onclick вставляем следующий код: procedure TForm1.Button1Click(Sender: TObject); var wsadt : wsadata; icmp :icmpecho; HNDicmp : integer; hndFile :integer; Host :PHostEnt; Destino :in_addr; Endereco :^DWORD; IP : ipinfo; Retorno :integer; dwRetorno :DWORD; x :integer; IcmpCreateFile : TIcmpCreateFile; IcmpCloseHandle : TIcmpCloseHandle; IcmpSendEcho : TIcmpSendEcho; begin if (edit1.Text = '') then begin Application.MessageBox('Enter a HostName ro a IP Adress', 'Error', MB_OK); exit; end; HNDicmp := LoadLibrary('ICMP.DLL'); if (HNDicmp <> 0) then begin @IcmpCreateFile := GetProcAddress(HNDicmp,'IcmpCreateFile'); @IcmpCloseHandle := GetProcAddress(HNDicmp,'IcmpCloseHandle'); @IcmpSendEcho := GetProcAddress(HNDicmp,'IcmpSendEcho'); if (@IcmpCreateFile=nil) or (@IcmpCloseHandle=nil) or (@IcmpSendEcho=nil) then begin Application.MessageBox('Error getting ICMP Adress','Error', MB_OK); FreeLibrary(HNDicmp); end; end; Retorno := WSAStartup($0101,wsadt); if (Retorno <> 0) then begin Application.MessageBox('Canґt Load WinSockets','WSAStartup', MB_OK); WSACleanup(); FreeLibrary(HNDicmp); end; Destino.S_addr := inet_addr(Pchar(Edit1.text)); if (Destino.S_addr = 0) then begin Host := GetHostbyName(PChar(Edit1.text)); end else begin Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET); end; if (host = nil) then begin Application.MessageBox('Host not found','Error', MB_OK); WSACleanup(); FreeLibrary(HNDicmp); exit; end; memo1.Lines.Add('Pinging ' + Edit1.text); Endereco := @Host.h_addr_list; HNDFile := IcmpCreateFile(); for x:= 0 to 4 do begin Ip.Ttl := char(255); Ip.Tos := char(0); Ip.IPFlags := char(0); Ip.OptSize := char(0); Ip.Options := nil; dwRetorno := IcmpSendEcho( HNDFile, Endereco^, null, 0, Ip, Icmp, sizeof(Icmp), DWORD(5000)); Destino.S_addr := icmp.source; Memo1.Lines.Add('Ping ' + Edit1.text); end; IcmpCLoseHandle(HNDFile); FreeLibrary(HNDicmp); WSACleanup(); end; ================================================== ================================================ далее для каждого ответившего IP определяем имя, например так: uses WinSock; function LocalIP: string; type TaPInAddr = array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe: PHostEnt; pptr: PaPInAddr; Buffer: array[0..63] of Char; I: Integer; GInitData: TWSAData; begin WSAStartup($101, GInitData); Result := ''; GetHostName(Buffer, SizeOf(Buffer)); phe := GetHostByName(buffer); if phe = nil then Exit; pPtr := PaPInAddr(phe^.h_addr_list); I := 0; while pPtr^[I] <> nil do begin Result := inet_ntoa(pptr^[I]^); Inc(I); end; WSACleanup; end; function IPAddrToName(IPAddr: string): string; var SockAddrIn: TSockAddrIn; HostEnt: PHostEnt; WSAData: TWSAData; begin WSAStartup($101, WSAData); SockAddrIn.sin_addr.s_addr := inet_addr(PChar(IPAddr)); HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET); if HostEnt <> nil then Result := StrPas(Hostent^.h_name) else Result := ''; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(IPAddrToName(LocalIp)); end; {**************************************} // Function to get the IP Address from a Host function GetIPFromHost(const HostName: string): string; type TaPInAddr = array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe: PHostEnt; pptr: PaPInAddr; i: Integer; GInitData: TWSAData; begin WSAStartup($101, GInitData); Result := ''; phe := GetHostByName(PChar(HostName)); if phe = nil then Exit; pPtr := PaPInAddr(phe^.h_addr_list); i := 0; while pPtr^[i] <> nil do begin Result := inet_ntoa(pptr^[i]^); Inc(i); end; WSACleanup; end; |
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Состав локальной сети. | siraleks | Локальные сети и их комплектующие | 10 | 17.02.2011 06:51 |
| Анонимность в сети и подмена IP адреса... | Vladislav1 | Скорая помощь | 3 | 01.11.2009 08:38 |
| Конфликт ip-адреса в сети | Dreamset | Скорая помощь | 3 | 11.09.2009 08:36 |
| Реальные IP адреса в локальной сети | zloyCoyote | Архив | 9 | 10.10.2006 09:47 |
|
|