一、需求:
由于系统调试需要一个相对的公网IP,但公司是通过ADSL方式上网,每次产生的IP只能保持一段时间相对固定,当IP发生变化后,就需要打开路由器的WEB管理界面,确定新的IP地址是多少,然后将新地址告诉测试系统使用。每次都这样操作,让我这种懒人,感觉很不爽。于是一直在想寻找一种简单的方式,来很容易的知道当前IP地址是多少,这期间尝试了许多方法,但都只是限于获取本机网络地址信息,对要解决的问题帮助不大。
今天看到CSDN上一位网友介绍的方法,比较可行而且易于实现,于是花点时间,做了个小程序,经过测试,能满足需要。
二、基本原理
1. 访问,并获取指定网页内容,如:http://vbnet.mvps.org/resources/tools/getpublicip.shtml;
2. 分析网页内容;
3. 找出IP地址,显示;
三、实现代码(Delphi7+FastStrings+Indy9)
Code
procedure TForm1.Button1Click(Sender: TObject);
var
iPos : integer;
i : integer;
sResponse : TStrings;
sTemp : string;
begin
sResponse := TStringList.Create;
sResponse.Text := IdHTTP1.Get('http://vbnet.mvps.org/resources/tools/getpublicip.shtml');
for i := 0 to sResponse.Count - 1 do
begin
iPos := SmartPos('var ip',sResponse.Strings[i]);
if iPos > 0 then
begin
sTemp := sResponse.Strings[i];
break;
end;
iPos := -1;
end;
if sTemp <> '' then
begin
iPos := SmartPos('''',sTemp);
if iPos > 0 then
begin
edtIP.Text := Copy(sTemp,iPos + 1,Length(sTemp) - iPos);
edtIP.Text := Copy(edtIP.Text,1,Length(edtIP.Text) - 1);
end;
end;
sResponse.Clear;
sResponse.Free;
sResponse := nil;
end;
四、结果:
五、文件下载:
https://files.cnblogs.com/gis_gps/GetADSLIP.zip