求连续IP地址段的获取方法,,,急(100分)

  • 主题发起人 主题发起人 未来黑客
  • 开始时间 开始时间

未来黑客

Unregistered / Unconfirmed
GUEST, unregistred user!
如下:

我欲取,指定的以172.168.1.5 _____ 175.123.5.1

之间的所有连续IP,加入到 listbox 中,

从网上找来下面的一段,有问题,就是说不能获取连续的所有IP,

请帮帮我呀,

for i:=strtoint(p1.Text) to strtoint(p2.Text) do
for j:=strtoint(p3.Text) to strtoint(p4.Text) do
for k:=strtoint(p5.Text) to strtoint(p6.Text) do
for l:=strtoint(p7.Text) to strtoint(p8.Text) do
begin
t:=inttostr(i)+'.'+inttostr(j)+'.'+inttostr(k)+'.'+inttostr(l);
listbox1.Items.Add(t);
end;

在线等
 
你直接for这样是不是也太简单了啊:)
 
是呀不正确,
可我想不出来,要连续的不能多也不能少的IP,

朋友们过节好,
帮帮我呀,
 
IP是FF.FF.FF.FF这样格式的(16进制)

所以172.168.1.5=172*256*256*256+168*256*256+1*256+5 ,定为a
175.123.5.1=………………………………………………,定为b
所以他们之间的IP值c不就是a<=c<=b么?,记得把c中最后一个是0的去掉,就是不要xxx.xxx.xxx.0的吧
这样简单么?
 
我试试,

还请用过的朋友指点呀,
我等
 
??


不会呀,

请给我一点代码,
谢谢
谢谢
 
接您的方法求出C
了,
可C 无法转成XXX.DDD.FFF.BBB


有人会不呀,

帮帮我呀,

说点什么都行呀,

祝我节日快乐也行呀...

 
我自己顶
 
var
ipbegin,ipend,ip:longint;
ips:string;
begin
ipbegin := strtoint(p1.Text)*256*256*256+StrToInt(p2.Text)*256*256+StrToInt(p3.Text)*256+StrToInt(p4.Text);
ipend := StrToInt(p5.Text)*256*256*256+StrToInt(p6.Text)*256*256+StrToInt(p7.Text)*256+StrToInt(p8.Text);

for ip := ipbegin to ipend do
begin
if (ip and $ff)<>0 then
ListBox1.Items.Add(Format('%d.%d.%d.%d',[ip shr 24,(ip shr 16)and $ff,(ip shr 8)and $ff,ip and $ff]));//IntToStr(ip shr 24)+'.'
end;
 
不懂不懂,顶
 
谢谢您了,
给分,

能告诉我一下:#FF
是什么意思吗?

谢谢,
谢谢,
 
谢谢高人
 
多人接受答案了。
 
type
TStringArray = array of string;

procedure StringToSList(const StrSrc:String;Sep:Char;DestList:TStrings);
var
i,StrCount,StartPos,EndPos:Integer;
begin
StartPos:=0;
StrCount:=Length(StrSrc);
for i:=1 to StrCount-1 do
begin
if StrSrc=Sep then
begin
EndPos:=i;
DestList.Add(Copy(StrSrc,StartPos+1,EndPos-StartPos-1));
StartPos:=EndPos;
end;
end;
if(StrCount>0)and(StrSrc[StrCount]=Sep)then
begin
DestList.Add(Copy(StrSrc,StartPos+1,StrCount-StartPos-1));
Destlist.Add('');
end
else
DestList.Add(Copy(StrSrc,StartPos+1,StrCount-StartPos));
end;
procedure StringToArrayEx(const AString:String;const Sep:Char;var StrArray:TStringArray);
var
SList:TStrings;
i:Integer;
begin
SList:=TStringList.Create;
try
StringToSList(AString,Sep,SList);
SetLength(StrArray,SList.Count);
for i:=0 to SList.Count-1 do
StrArray:=SList;
finally
SList.Free;
end;
end;

function IPToInt(const IPStr: string): LongWord;
var
i, W: Integer;
StrArr:TStringArray;
begin
Result := 0;
StringToArrayEx(IPStr,'.',StrArr);
if Length(StrArr)=4 then
begin
for i := 0 to 3 do
if TryStrToInt(StrArr, W)and(W<256)and(W>=0)then
Result := Result shl 8 + W
else
begin
Result := 0;
Break;
end;
end;
end;

function IntToIP(const ADWord: DWord): string;
var
i: Integer;
StrHex: string;
begin
Result := '';
StrHex := IntToHex(ADword, 8);
for i := 1 to 4 do
begin
Result := Result + IntToStr(StrToInt('$' + StrHex[i * 2 - 1] + StrHex[i * 2]));
if i <> 4 then
Result := Result + '.';
end;
end;
利用以上几个函数,可以比较容易得到要求的连续IP。
 
for ip := ipbegin to ipend do //把ip看成aa.bb.cc.dd的形式,16进制
begin
if (ip and $ff)<>0 then //如果 dd不为0,
ListBox1.Items.Add(Format('%d.%d.%d.%d',[ip shr 24,(ip shr 16)and $ff,(ip shr 8)and $ff,ip and $ff]));//
// ip shr 24得到aa,其实也可以ip div $1000000
// ip shr 16得到aabb,然后and $ff,得到bb,
//…………
end;

 
来如风的算法很好!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
734
import
I
后退
顶部