一个IP的列表问题?(50分)

  • 主题发起人 主题发起人 bamfk1023
  • 开始时间 开始时间
B

bamfk1023

Unregistered / Unconfirmed
GUEST, unregistred user!
IP地址列表为 1.2.3.4 到 2.3.4.5
添加到listbox1 (如:1.2.3.4,1.2.3.5...........1.2.3.255,
1.2.4.0,1.2.4.1,..........1.2.4.255,
1.2.5.0,1.2.5.1,..........1.2.5.255,
.
.
.
2.3.3.1,.................,2.3.3.255,
2.3.4.0,.................,2.3.4.5, 结束);
请问应该怎么写循环。(可以看成是变量,不是IP,不过我搞一几个都不行,希望能提供代码)
 
参考一下这个程序:
http://service.lonetear.com/delphi/dispdoc.asp?id=377
 
将IP地址看成4个0..255的Byte型变量,也就是一个4Byte长的无符号整数。
1.2.3.4 到 2.3.4.5 的IP地址也就是从 1*2^24 + 2*2^16 + 3*2^8 + 4 (16909060)到
2*2^24 + 3*2^16 + 4*2^8 + 5 (33752069)的所有整数——一个for循环就可以得到了。
当然,在使用的时候有一些要注意的地方:要把循环中得到的数拆分成4个Byte才能输出,
每遇到一个整除256余255的数就输出一个换行。
 
to zw84611 你的源程序是可以用的,界面不错。
但不知道能不能把里面IP的列表段分出来给我 我看得不太明白 :)
to creation-zy 正在试。。。
 
to zw84611 你的四个地址只加到 b[2] b[3] 与 b[1] b[0]无关
所以会简单一点,只能参考
 
FUNCTION FtIP(vS1,vS2,vS3,vS4,vE1,vE2,vE3,vE4:INTEGER):TStringList;
VAR ibegin
,iEnd,iData,k1,k2,k3,k4,k:INTEGER;
begin
Result:=TStringList.Create;
ibegin
:=vS1*256*256*256+vS2*256*256+vS3*256+vS4;
iEnd:=vE1*256*256*256+vE2*256*256+vE3*256+vE4;
FOR k:=ibegin
TO iEnddo
begin
iData:=k;
k1:=iData DIV (256*256*256);
iData:=iData-(k1*256*256*256);
k2:=iData DIV (256*256);
iData:=iData-(k2*256*256);
k3:=iData DIV 256;
iData:=iData-k3*256;
k4:=iData;
//[注意: 测试时该为 listBox.Item.Add() ]
Result.Add(IntToStr(k1)+'.'+IntToStr(k2)+'.'+IntToStr(k3)+'.'+IntToStr(k4));
end;
end;
除非你内存很大,否则IP的段间必须小一点.我测试的是 1.2.3.4 to 1.3.4.5.
 
成功了
不过要把ligia, 的ingeter, 改成cardinal ,32位无符号数,
就行了, 其他不变.
谢谢大家!
 
多人接受答案了。
 
后退
顶部