「ローカルIPアドレス」、「ローカルホストネーム」の取得方法
Delphiで、自PCのローカルIPアドレス等の取得が簡単なコーディングで実現。
使用しているIndyユニットの情報は英語が主で、私には不得手ですが、
この使い方は外国のWebサイトのサンプルのソースコードから見つけました。
Delphiのバージョンは2007ですが、
試しにDelphi7でも実験。一部プロパティの修正で正常に動作しました。
ということは、かなり昔からこの使い方ができたんですね。
下記コードは全文ですので、簡単にコピーして実験できると思います。
(フォーム1個にボタン1個、尚下記コードには全角スペースが混入)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
IdUDPClient, IdStack; // <--- 追加
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// ----- IpAddress,Host 取得 -----
procedure TForm1.Button1Click(Sender: TObject);
var
IdUDP:TIdUDPClient;
LocalAddress,LocalHostName : string;
begin
IdUDP := TIdUDPClient.Create(Self); // この4行がミソ?
LocalAddress := GStack.LocalAddress; //
LocalHostName := GStack.HostName; // Delphi 2007の場合
//LocalHostName := GStack.WSGetHostName; // Delphi 7の場合
showmessage(LocalAddress + ' - ' + LocalHostName);
IdUDP.Free;
end;
end.
ところで、
上記ロジックを調べた目的は、Delphiで作成したシステムでセキュリティ改善の為、
ログデータ生成の要求があり、
システム稼動時の操作状況を、端末情報やWindowsのログインユーザーも含めて
DBに吐き出すため。
追記 2/19
ところで、上記の使い方のヒントは下記URLの「Let’s UDP Chart!」からです。
http://delphi.about.com/library/weekly/aa101105a.htm
(添付の広告は怪しいのですが、変なところをクリックしなければ問題無いみたい)
後で知ったのですが、下記サイトで紹介されているWinSockでの実現方法は、
同じソースでDelphi2007とDelphi7で正常に動作しましますので、こちらの方が良さそう!
DelFusa Floor
http://delfusa.main.jp/delfusafloor/technic/technic_f.html
「自マシンのIPアドレスとホスト名(マシン名)を得る方法 2008/01/18(金)」
こんにちはーー。
うちへのリンクありがとうございます。
これって、NIC=NetworkInterfaceCard
つまり、LANカード、2枚ざしの場合、どちらのIPも出力したくなるんですけど、どうやったらいいんでしょうね。
うちのコードでも求める方法わかりませんでした。
ところで、DelphiのFTが始まったみたいっすね。楽しみです。
2008.04.03 13:24 URL | ミ・д・彡 #mQop/nM. [ 編集 ]
どうもです!
ご無沙汰しております。
LANカード2枚差しの時のIP取得方法とは..難しそう?
そもそも、難解なWindowsのAPIに関わりたくないから、
MSのC++ではなくDelphiを愛用している訳で、苦手な領域です。
でも、面白そうなテーマですから、長期戦で考えてみたいですね..
2008.04.03 14:14 URL | たにぐちです #- [ 編集 ]
はじめまして
INDYの情報は少ない中、参考にさせて頂きました。
ありがとうございました。
ところで、もう解決してるかもしれませんが
複数IPアドレスの取得は
GStack.LocalAddress
の代わりに
GStack.LocalAddresses
を使えば可能ですね。
2008.06.27 11:57 URL | SATOSHI #- [ 編集 ]
SATOSHIさん
複数IPアドレスの情報ありがとうございます。
早速、次のコードで実験してみました。簡単ですね!
for i := 0 to GStack.LocalAddresses.Count - 1 do
memo1.Lines.Add(GStack.LocalAddresses[i]);
戻り値がTStringListのも気にしないとですね。
というより、複数IPを取得する機能が入っているとは..予想外。
2008.06.27 13:48 URL | たにぐちです #- [ 編集 ]
トラックバックURL↓
http://afftec.blog72.fc2.com/tb.php/91-afa6cc9e
