程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi獲取內外網IP

Delphi獲取內外網IP

編輯:Delphi

Author:InSun

Blog:http://yxmhero1989.blog.163.com/     http://hi.baidu.com/4safer

From:www.4safer.com

最近用Delphi寫個綜合性的軟件,對於進程方面的也在研究,將會有文章出示。

在編寫系統方面,要Delphi實現內外網IP的獲取。

關鍵字:Delphi獲取內外網IP

Delphi - InSun - InSuns PaRaDise

 以前用VB寫過,參見:

VB獲取計算機名稱,內、外網IP

http://yxmhero1989.blog.163.com/blog/static/112157956200910274566652/

下載地址:html">http://yxmhero.qupan.com/5246067.html

VB獲取計算機名稱,內、外網IP,很簡單,僅作示例。這些在編大軟件時作為裝飾。

Author:Minghacker

From:http://yxmhero1989.blog.163.com/

添加winsock控件,Inet控件

Private Declare Function ReleaseCapture Lib "user32" () As Long none窗體的移動
       Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long,ByVal wParam As Long, lParam As Any) As Long
       Private Const WM_SYSCOMMAND = &H112
       Private Const SC_MOVE = &HF010&
       Private Const HTCAPTION = 2
       Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
       ReleaseCapture
       ret& = SendMessage(Me.hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0)
End Sub

Private Sub Form_Load()
Text1(0).Text = Winsock1.LocalHostName 必須添加winsock控件
Text1(1).Text = Winsock1.LocalIP 必須添加winsock控件
Text1(2).Text = Inet1.OpenURL("Http://www.3322.org/dyndns/getip") 必須添加Inet控件
End Sub

 

其中依靠winsock控件,Inet控件

內網IP獲取:在Delphi6以上的版本中,有一個IdIPWatch控件,它的功能就是檢測網絡在線狀態和獲取

IP地址。此控件在Indy Misc頁面。用IDIPwatch1.LocalIP。當然也可以用Winsock,我們擇便捷用。

可以這樣寫、procedure TForm1.IP1Click(Sender: TObject);
       showmessage(IDIPwatch1.LocalIP)

end;
但是showmessage沒額外參數,不能改標題,我們換做messagebox也很簡單:

procedure TForm1.IP1Click(Sender: TObject);
var
 Wnd:HWND;
begin
  Wnd:=application.Handle;
  messagebox(Wnd,PChar(IDIPwatch1.LocalIP),PChar(InSun),MB_OK);
end;

外網Ip獲取:

Delphi中用TIdHTTP控件 ,在Indy Clients頁面。

  示例:
       Memo1.Lines.Text   :=   IdHTTP.Get(URL);  

showmessage(IdHTTP1.Get(http://www.3322.org/dyndns/getip));

所以我們的代碼是:
procedure TForm1.IP2Click(Sender: TObject);

var
 Wnd:HWND;
begin
  Wnd:=application.Handle;
  messagebox(Wnd,PChar(IdHTTP1.Get(http://www.3322.org/dyndns/getip)),PChar(InSun),MB_OK);
end;

其實我們用的就是第三方網頁獲取公網Ip的。

Delphi - InSun - InSuns PaRaDise

我們聰明的用了最簡單的網頁,而下面的網頁是查詢式的,勢必用到字符串操作,有些復雜,大家可以研究下。

http://hi.baidu.com/blackcode/blog/item/ab9beacd400897520fb34581.html

“剛才baidu了下,關於這個的,問的人倒是挺多,方法好像不是太多,1,找一個外網的機子配合,

得到本機的公網ip,2,通過三方網頁獲取,我就是用的2,其實很簡單,get html代碼,通過幾個

字符串操作函數分析,得到所需信息。廢話說完了,直接看代碼。”
function pro_result(str:string):string ;//封裝了成一個匹配的處理函數
var
i_0,i_1:Integer;
flag:Boolean;
str_1,temp_result:string;
begin
temp_result:=;
while Pos(查詢結果,str)<>0 do
begin
i_1:=Pos(</span>,str);
i_0:=Pos(查詢結果,str);
temp_result:=temp_result+Copy(str,i_0,i_1-i_0)+#13#10;
Delete(str,1,Pos(</span>,str));
end;
ReplaceString(temp_result,&nbsp;,,flag);
Result:=temp_result;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
temp,str_1:string;
i:Integer;
begin
Memo1.Text:=IdHTTP1.Get(http://www.ipseeker.cn);
temp:=Memo1.Text;
i:=Pos(查詢結果,temp);
str_1:=Copy(temp,i,254);
str_2:=pro_result(str_1);
Memo2.Text:=str_2;
end;

當然ReplaceString函數要有定義。

我們把它們寫在一起,我就不用皮膚了,也不寫標題了,大家自己發揮。

如圖:

Delphi - InSun - InSuns PaRaDise

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved