频道分类

Delphi 计算IP地址范围

作者:admin 来源: 日期:2020/2/8 23:12:23 人气: 标签:

 
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
uses Winsock;

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;



procedure TForm1.FormCreate(Sender: TObject);
var
IPList:string;
begin
//caption:=IntToStr(Ip2Int(127,0,0,1));
IPListOlustur(BaslangicIP,BitisIP,StringGrid1);
end;

end.