Ağdaki biligisarların İP numaralarını çekme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Ağdaki biligisarların İP numaralarını çekme

Mesaj gönderen vedatkaba »

Arkadaşlar iyi akşamlar arkadaşlar herkese kolay gelsin.
Ben bir şey sorcam sizlere,, büyük bir ağ düşünün (en az 140 bilgisayar arasında) ve bu ağ bir router la uydudan başka bir yere bağlı ben kendi ağımda yani 140 bilgisayarın birbirine bağlı olduğu ağdaki bu bütün bilgisayarların IP numaralarını ve adlarını çekebilirmiyim acaba böyle bir şey yapma şansım var galiba ufak birşey bulmuştum ama tabi bulmakla kaldı çalışmadı falan olmadı yapamadık .Şimdiden teşekkür ederim herkese kolay gelsin cümleten iyi geceler.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

Kod: Tümünü seç

unit FindComp;

interface

uses
Windows, Classes;

function FindComputers: DWORD;
function HostToIPAddr(Name: string; var Ip: string): Boolean;

var
Computers: TStringList;

implementation

uses
SysUtils, winsock;

const
MaxEntries = 500;


function HostToIPAddr(Name: string; var Ip: string): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of char;
  hostEnt : PHostEnt;
  addr : PChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (hostName, sizeof (hostName));
    StrPCopy(hostName, Name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end
end;

function FindComputers: DWORD;

var
EnumbilgHandle, EnumWorkGroupHandle, EnumComputerHandle: THandle;
EnumError: DWORD;
Network: TNetResource;
bilgEntries, WorkGroupEntries, ComputerEntries: DWORD;
EnumbilgBuffer, EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource;
bilgEnumbufferlength, workEnumbufferlength, compEnumBufferLength: DWORD;
k,I, J: DWORD;
st : string;

begin

Computers.Clear;

FillChar(Network, SizeOf(Network), 0);
with Network do
begin
dwScope := RESOURCE_GLOBALNET;
dwType := RESOURCETYPE_ANY;
dwUsage := RESOURCEUSAGE_CONTAINER;
end;

EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle);

if EnumError = NO_ERROR then
begin
WorkGroupEntries := MaxEntries;
workEnumBufferLength := SizeOf(EnumWorkGroupBuffer);
EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, workEnumBufferLength);
if EnumError = NO_ERROR then
begin
for I := 1 to WorkGroupEntries do
begin
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle);
if EnumError = NO_ERROR then
begin
ComputerEntries := MaxEntries;
compEnumBufferLength := SizeOf(EnumComputerBuffer);
EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, compEnumBufferLength);
if EnumError = NO_ERROR then
begin
for j := 1 to computerEntries do
begin
Computers.Add(EnumcomputerBuffer[j].lpRemoteName);

EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumcomputerBuffer[J], EnumbilgHandle);
if EnumError = NO_ERROR then
begin
bilgEntries := MaxEntries;
bilgEnumBufferLength := SizeOf(EnumbilgBuffer);
EnumError := WNetEnumResource(EnumbilgHandle, bilgEntries, @EnumbilgBuffer, bilgEnumBufferLength);
if EnumError = NO_ERROR then
for k := 1 to bilgEntries do
begin
st := EnumbilgBuffer[k].lpRemoteName;
delete(st,1,2);
Computers.Add(' '+st);
end;
WNetCloseEnum(EnumbilgHandle);
end;
end;
end;

WNetCloseEnum(EnumComputerHandle);
end;
end;
end;
WNetCloseEnum(EnumWorkGroupHandle);
end;

if EnumError = ERROR_NO_MORE_ITEMS then
EnumError := NO_ERROR;
Result := EnumError;
end;

initialization

Computers := TStringList.Create;

finalization

Computers.Free;

end.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

hocam teşekkür ederim ,deneyelim bakalım İnşallah olur.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

hocam merhaba kodu kullanamadım hocam ,şöyle çözemedik daha doğrusu nerde hangi bileşeni kullanacağımı kestiremedim o yüzden tam verim alamdım ,sizin fikriniz varsa yada bir ekran görüntüsü görebilsek iyi olcak bizim için,Teşekkür ederim kolay gelsin herkese.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

Yukarıdaki kodu FindComp.pas olarak kayıt edeceksin. Sonra projende aşağıdaki kodu uygulayabilirsin.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var k : integer;
begin
 Memo1.Lines.Clear;
 FindComputers;
 for k := 0 to findcomp.computers.count-1 do
  begin
   If findcomp.computers[k] <> '' then
    memo1.lines.add(findcomp.computers[k]);
  end;
end;
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

Ek olarak

Kod: Tümünü seç

function HostToIPAddr(Name: string; var Ip: string): Boolean; 

function'u ilede ip adreslerini elde edersin.
Abdüsselam

Mesaj gönderen Abdüsselam »

s.a.

muhterem hocam ağdaki server ın ip sini bu kodlarla tespit etmek mümkünmüdür?

selametle..
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Hocam olmadı bu ya ,,dediğiniz gibi yaptık ama nedense olmadı bıtpna basıyorum öylece donuyor kalıyor hiç bir işlem yapmıyor.kolay gelsin sizlere
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

vedatkaba yazdı:Hocam olmadı bu ya ,,dediğiniz gibi yaptık ama nedense olmadı bıtpna basıyorum öylece donuyor kalıyor hiç bir işlem yapmıyor.kolay gelsin sizlere
delphi 7 winxp de çalışıyor (hatta win98 veüstündede denenmiştir). Kodunuzu debug edin derim...
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Mrb; Sistemin o andaki ağ yapılandırması düzgün çalışıyor mu? Mesela ağ bağlantılarımdan diğer bilgisayara bağlantı yapılabiliyorsa kodların çalışması gerekiyor gibime geliyor.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Hocam delphi7 ve işletim sistemi winxp...

Ağ yapısı ise bütün bilgisayarlar swichlerde toplanıyor ve ordanda başka bir yere uydu router vasıtası ile bağlantı sağlanıyor.bu şekilde bir yapı.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Ref : viewtopic.php?t=2109#10395

Adım adım her aşaması var.
Resim
Resim ....Resim
Cevapla