過去にJavaScriptを使用し、ローカルPCのIPアドレスを取得する必要があり、
下記サイトを参考にし解決しました。
Get Client MAC Address & IP Address using Javascript (2010/11)
http://codingresource.blogspot.jp/2010/02/get-client-mac-address-ip-address-using.html
WMI( Windows Management Instrumentation ) を使用しており、
WSHやHTA(HTML Applications)で使用可能です。
2012年頃に記事にしていたのですが、ブログリニューアルついでに
もう少し詳しく書いてみようかと思います。
IPを取得する
WMIを使用する関数を作成する
//----------------------------------
// Windows Management Instrumentation (WMI) プロパティ取得
//----------------------------------
function getWMIProperties( query ){
var result = [];
try{
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
// 第一引数にリモート先を指定すれば、ローカル以外の情報も取得可能
// リモートアクセス時にユーザーを指定する場合は、
// 第三引数にユーザー名、第四引数にパスワードを指定
var services = locator.ConnectServer(null, "root\\CIMV2");
var set = services.ExecQuery(query);
var enumSet = new Enumerator(set);
for( ; !enumSet.atEnd() ; enumSet.moveNext() ){
var item = enumSet.item();
var props = new Enumerator( item.Properties_ );
var obj = {};
for( ; !props.atEnd() ; props.moveNext() ){
var val = null;
var prop = props.item();
if( prop.Value != null ){
if( prop.IsArray ){
val = new VBArray(prop.Value).toArray();
}else{
val = prop.Value;
}
}
obj[prop.Name] = val;
}
result.push( obj );
}
}catch( e ){
throw e;
}
return result;
}
※今後、WMIを使った記事をいくつか書きます。その際にも使用します。
WMIを使用してIPを取得する
先ほど作成した関数に検索クエリーを渡し、情報を取得します。
今回は、TCP/IP がバインドされ有効になっているネットワークアダプターの情報を取得するという事、以下を指定しています。
SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE(条件式) IPEnabled = true
var ip_list = [];
// 取得したいプロパティをクエリーで指定する
var query = "SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = true";
var props = getWMIProperties(query);
for( var i = 0 ; i < props.length ; ++i ){
ip_list.push( props[i].IPAddress[0] );
}
WScript.Echo( ip_list.join("\n") );
IPAddressのプロパティは配列になっていて、IPv4, IPv6 の二種類の情報が入っています。
今回は、IPv4のプロパティを取得しています。
WSHサンプル
サンプルを確認したい場合は、テキストを開きコピペ。拡張子を「wsf」にして保存してご確認下さい。
<job>
<script language="JScript">
var ip_list = [];
// 取得したいプロパティをクエリーで指定する
var query = "SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = true";
var props = getWMIProperties(query);
for( var i = 0 ; i < props.length ; ++i ){
ip_list.push( props[i].IPAddress[0] );
}
WScript.Echo( ip_list.join("\n") );
//----------------------------------
// Windows Management Instrumentation (WMI) プロパティ取得
//----------------------------------
function getWMIProperties( query ){
var result = [];
try{
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
// 第一引数にリモート先を指定すれば、ローカル以外の情報も取得可能
// リモートアクセス時にユーザーを指定する場合は、
// 第三引数にユーザー名、第四引数にパスワードを指定
var services = locator.ConnectServer(null, "root\\CIMV2");
var set = services.ExecQuery(query);
var enumSet = new Enumerator(set);
for( ; !enumSet.atEnd() ; enumSet.moveNext() ){
var item = enumSet.item();
var props = new Enumerator( item.Properties_ );
var obj = {};
for( ; !props.atEnd() ; props.moveNext() ){
var val = null;
var prop = props.item();
if( prop.Value != null ){
if( prop.IsArray ){
val = new VBArray(prop.Value).toArray();
}else{
val = prop.Value;
}
}
obj[prop.Name] = val;
}
result.push( obj );
}
}catch( e ){
throw e;
}
return result;
}
</script>
</job>
Win32_NetworkAdapterConfigurationクラス
WMIを用いてIPアドレスを取得しましたが、Win32_NetworkAdapterConfiguration には他にも多くのプロパティが存在。
説明 | プロパティ名 | 参考値 |
---|---|---|
名前 | Description | Realtek PCIe GBE Family Controller |
IPアドレス(IPv4) | IPAddress[0] | 192.168.1.24 |
IPアドレス(IPv6) | IPAddress[1] | fa11::486:3e8b:ca67:da3 |
サブネットマスク | IPSubnet[0] | 255.255.255.0 |
MACアドレス | MACAddress | AB:1C:D2:34:E5:6F |
DHCPが有効かどうか | DHCPEnabled | true |
詳しくはWMI Fun !! : Win32_NetworkAdapterConfiguration 等を確認するとよいかと思います。
デバッガーが使用できるのであれば、SELECTに「*」を指定しデバッガーで止めてプロパティを確認した方が確実ではあります。その一部を紹介します。
参考リンク
今回ネットーワーク関連という事でWin32_NetworkAdapterConfiguration を指定しましたが、Win32_LogicalDisk を使用してドライブにアクセスしたり様々な事が可能です。
詳しくは以下サイトを確認下さい。
WMI Fun !! WMI Library
http://www.wmifun.net/library/
WMI Fun !! : Win32_NetworkAdapterConfiguration クラス
http://www.wmifun.net/library/win32_networkadapterconfiguration.html
MSDN : Win32_NetworkAdapterConfiguration class
https://msdn.microsoft.com/en-us/library/aa394217(v=vs.85).aspx
PowerShell from Japan!! Blog [WMI] ネットワーク情報を取得する (2011/11)
http://blog.powershell-from.jp/?tag=wmi
Get Client MAC Address & IP Address using Javascript (2010/11)
http://codingresource.blogspot.jp/2010/02/get-client-mac-address-ip-address-using.html
ipconfigが使えない環境でIPアドレスを知りたい (WMIを使う) (2014/02)
http://argius.hatenablog.jp/entry/2014/02/24/222935