Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
IP Adres Aralığı Hesaplama
#1
Merhaba Arkadaşlar,

Kendi işlerimde kullanmak üzere bir uygulama hazırlıyorum. Uygulama Benim belirlediğim Portta göre Networkte ilgili Hostu aramakta ve bulduklarını listelemektedir.

Örneğin Verdiğim IP aralığında 8000 Portu açık Hostları bulmak istiyorum. (Örnek 8000 portunu kullanan IP Kameraları)

Takıldığım Yer verilen 2 IP adresi arasındaki IP leri Listelemek.

Gerekli Hata kontrollerini yapıyorum.

Başlangıç : 192.168.1.10
Bitiş        : 192.168.2.100

verdiğimde arasındaki IP adreslerini Listboxa sıralamak istiyorum ? Yol gösterirseniz sevinirim.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Sadece Hobiciyim..
WWW
Cevapla
#2
İki adresi 4'er sayıya ayırıp iç içe 4 adet for döngüsü yapman lazım.
Fakat büyüklük sırası karışır ve kümenin tamamını kapsayamaz.

Bu yüzden en güzeli ip adresini 255 tabanında integer sayıya çevirip tekli for kullan.
Her aşamada integeri 1 artırıp tekrar ip'ye çevir.


function Ip2Int(i1,i2,i3,i4:byte):integer;
begin
  result := (i1 shl 24) + (i2 shl 16) + (i3 shl 8) + (i4);
end;

function Int2Ip(ip:integer):string;
var
  dizi:array[1..4] of byte absolute ip;
begin
  result := dizi[4].ToString + '.' + dizi[3].ToString + '.' + dizi[2].ToString + '.' + dizi[1].ToString;
end;
Cevapla
#3
Hocam yol gösterin dedim siz masallah yemegi yapıp pişirip sunmuşsunuz (:

Tesekkurler herşey icin.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Sadece Hobiciyim..
WWW
Cevapla
#4
(01-09-2018, Saat: 09:12)ssahinoglu Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.İki adresi 4'er sayıya ayırıp iç içe 4 adet for döngüsü yapman lazım.
Fakat büyüklük sırası karışır ve kümenin tamamını kapsayamaz.

Bu yüzden en güzeli ip adresini 255 tabanında integer sayıya çevirip tekli for kullan.
Her aşamada integeri 1 artırıp tekrar ip'ye çevir.


function Ip2Int(i1,i2,i3,i4:byte):integer;
begin
  result := (i1 shl 24) + (i2 shl 16) + (i3 shl 8) + (i4);
end;

function Int2Ip(ip:integer):string;
var
  dizi:array[1..4] of byte absolute ip;
begin
  result := dizi[4].ToString + '.' + dizi[3].ToString + '.' + dizi[2].ToString + '.' + dizi[1].ToString;
end;

Başardım. Gayet güzel Çalışıyor. Dediğiniz gibi Tek Döngü ile hallettim.

 type
  IPv4 = record
   Octet: array [1..4] of Byte ;
 end;  

 const
 LISTESIRA     = 0;
 LISTEIP       = 1;
 LISTEMAC      = 2;
 LISTEPROTOKOL = 3;
 LISTEPORT     = 4;

 OKTET1  = 1;
 OKTET2  = 2;
 OKTET3  = 3;
 OKTET4  = 4; 

var

 BaslangicIP : IPv4;
 BitisIP     : IPv4;

function Ip2Int(i1,i2,i3,i4:byte):integer;
begin
 result := (i1 shl 24) + (i2 shl 16) + (i3 shl 8) + (i4);
end;

function Int2Ip(ip:integer):string;
var
 dizi:array[1..4] of byte absolute ip;
begin

 if ((Dizi[4] = 0) or (Dizi[4] = 255)  or
     (Dizi[3] = 0) or (Dizi[3] = 255)  or
     (Dizi[2] = 0) or (Dizi[2] = 255)  or
     (Dizi[1] = 0) or (Dizi[1] = 255)) then
 begin
   result := '' ;
 end
  else
 begin
 result := dizi[4].ToString + '.' +
           dizi[3].ToString + '.' +
           dizi[2].ToString + '.' +
           dizi[1].ToString;

 end;
end;        

procedure ListeEkle(var Liste:TStringGrid;pip,pmac,pprotokol,pport:string);
var
 eklenensatir : integer;
begin
 Liste.RowCount := Liste.RowCount + 1;
 eklenensatir := Liste.RowCount-1;

 Liste.Cells[LISTESIRA,eklenensatir]     := inttostr(eklenensatir);
 Liste.Cells[LISTEIP,eklenensatir]       := trim(pip);
 Liste.Cells[LISTEMAC,eklenensatir]      := trim(pmac);
 Liste.Cells[LISTEPROTOKOL,eklenensatir] := trim(pprotokol);
 Liste.Cells[LISTEPORT,eklenensatir]     := trim(pport);
 Liste.Row := eklenensatir;

end;

procedure IPListOlustur(var Baslama,bitis:IPv4;var Liste:TStringGrid);
var
IPilk  : integer;
IPSon  : integer;
sira   : integer;
IPADDR : String;
 begin

 IPilk := Ip2Int(Baslama.Octet[Oktet1],Baslama.Octet[Oktet2],
                 Baslama.Octet[Oktet3],Baslama.Octet[Oktet4]);

 IPSon := Ip2Int(Bitis.Octet[Oktet1],Bitis.Octet[Oktet2],
                 Bitis.Octet[Oktet3],Bitis.Octet[Oktet4]);

 for sira := IPilk to IPSon do
  begin
    IPADDR := Int2Ip(sira);
    if (IPADDR <> '') then
     ListeEkle(Liste,IPADDR,'','','');
     Application.ProcessMessages;
  end;

end;   


IPListOlustur(BaslangicIP,BitisIP,IPList); 
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Sadece Hobiciyim..
WWW
Cevapla
#5
Aslında tüm ip adresleri tam 0-255 arasında olmuyor ama kendin için pratikte böyle kullanabilirsin.

İleride daha doğru adresleme yapmak istersen aralıkları "Subnet Mask" değerine göre kısıtlaman gerekir.

Yani aralıktan elde ettiğin adreslerin bir kısmının ağında atayamayacağın adresler olması mümkündür.
Cevapla
#6
(01-09-2018, Saat: 12:08)ssahinoglu Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Aslında tüm ip adresleri tam 0-255 arasında olmuyor ama kendin için pratikte böyle kullanabilirsin.

İleride daha doğru adresleme yapmak istersen aralıkları "Subnet Mask" değerine göre kısıtlaman gerekir.

Yani aralıktan elde ettiğin adreslerin bir kısmının ağında atayamayacağın adresler olması mümkündür.

Bana şuanda Oktetlerde 0 ve 255 olmasın işimi çözüyor.

Aktif Ethernet kartının ip adresini ve subnet mask adresini alamadım. nette örnek bulduğumda tüm kartlarınkini alıyor. ayıklamak zor geldi açıkçası.

şuan için başlangıç ve bitiş ip adresini kendim girip tarama yapıyorum.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Sadece Hobiciyim..
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Personel Yıllık İzin Hakediş Hesaplama Hakkında bkantur 2 133 04-10-2019, Saat: 18:15
Son Yorum: uparlayan
  [ÇÖZÜLDÜ]Tarih ve Saat aralığı sorgulama wiseman 39 2.108 23-04-2019, Saat: 17:17
Son Yorum: wiseman
  iki zaman aralığı ahmetb 5 499 02-03-2019, Saat: 12:30
Son Yorum: ahmetb
  Delphide Yaş Hesaplama adelphiforumz 2 703 29-08-2018, Saat: 18:08
Son Yorum: adelphiforumz
  Resim üzerindeki nesnenin alanını hesaplama beklentili 5 1.056 29-08-2018, Saat: 17:53
Son Yorum: ssahinoglu



Konuyu Okuyanlar: 1 Ziyaretçi