ローカルネットワークインターフェイスにDHCP経由でアドレスが割り当てられているかどうか、またはJava経由で静的に設定されているかどうかを確認する方法はありますか?
質問する
2256 次
2 に答える
3
したがって、Win NTの「ソリューション」のみを要求したので、ここに私のコードがあります。これは、現在構成されている値を持つネットワークインターフェイスを一覧表示します。
注DHCPレジストリキーの値を有効にします。これがポイントだと思います。
質問のコメントですでに述べたように、少なくとも単純なJNIラッパーが必要です。
お役に立てれば。
詳細はこちら:http ://support.microsoft.com/kb/314053
#include <windows.h>
#define NETCARD_ROOT L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"
#define TCPIP_ROOT L"SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters\\Interfaces"
int _tmain(int argc, _TCHAR* argv[])
{
//First enumerate all network adapters
HKEY hNetCardsKey;
LSTATUS lStatus = ERROR_SUCCESS;
lStatus = RegOpenKey(HKEY_LOCAL_MACHINE,
NETCARD_ROOT,
&hNetCardsKey);
if(ERROR_SUCCESS == lStatus)
{
DWORD dwCards = 0L;
DWORD dwMaxSubkeyNameLen = 0L;
lStatus = RegQueryInfoKey(hNetCardsKey, NULL, NULL, NULL, &dwCards,
&dwMaxSubkeyNameLen, NULL, NULL, NULL, NULL, NULL, NULL);
if(ERROR_SUCCESS == lStatus && dwCards)
{
for(DWORD i = 0; i < dwCards; i++)
{
TCHAR wszCurrentCardIdxName[MAX_PATH];
wszCurrentCardIdxName[0] = '\0';
lStatus = RegEnumKey(hNetCardsKey, i,
wszCurrentCardIdxName, MAX_PATH);
if(ERROR_SUCCESS == lStatus)
{
TCHAR wszAdapterKeyName[MAX_PATH];
wszAdapterKeyName[0] = '\0';
wsprintf(wszAdapterKeyName, L"%s\\%s", NETCARD_ROOT,
wszCurrentCardIdxName);
HKEY hCardNameKey;
lStatus = RegOpenKey(
HKEY_LOCAL_MACHINE,
wszAdapterKeyName,
&hCardNameKey);
if(ERROR_SUCCESS == lStatus)
{
TCHAR wszServiceNameGuid[MAX_PATH];
TCHAR wszAdapterName[MAX_PATH];
DWORD dwSize = sizeof(wszServiceNameGuid);
wszServiceNameGuid[0] = '\0';
RegQueryValueEx(
hCardNameKey,
L"ServiceName",
NULL,
NULL,
(LPBYTE)wszServiceNameGuid,
&dwSize);
dwSize = sizeof(wszAdapterName);
RegQueryValueEx(
hCardNameKey,
L"Description",
NULL,
NULL,
(LPBYTE)wszAdapterName,
&dwSize);
OutputDebugStringW(wszServiceNameGuid);
OutputDebugStringW(L"\n");
RegCloseKey(hCardNameKey);
//Get parameters
TCHAR wszCardParamKey[MAX_PATH];
wszCardParamKey[0] = '\0';
wsprintf(wszCardParamKey,L"%s\\%s", TCPIP_ROOT, wszServiceNameGuid);
HKEY hParamKey = NULL;
lStatus = RegOpenKey(
HKEY_LOCAL_MACHINE,
wszCardParamKey,
&hParamKey);
if(ERROR_SUCCESS == lStatus)
{
DWORD dwEnabledDHCP = 0L;
DWORD dwDWSize = sizeof(DWORD);
TCHAR wszStaticIP[32];
TCHAR wszDHCPIP[32];
DWORD dwIPSize = sizeof(wszDHCPIP);
ZeroMemory(wszDHCPIP, dwIPSize);
ZeroMemory(wszStaticIP, dwIPSize);
lStatus = RegQueryValueEx(
hParamKey,
L"EnableDHCP",
NULL, NULL,
(LPBYTE)&dwEnabledDHCP,
&dwDWSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"Adapter : %s [%s] \n\tDHCP : %s\n",
wszServiceNameGuid,
wszAdapterName,
dwEnabledDHCP
? L"Yes" : L"No");
}
lStatus = RegQueryValueEx(
hParamKey,
L"IPAddress",
NULL,
NULL,
(LPBYTE)&wszStaticIP,
&dwIPSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"\tConfigured IP Address : %s\n", wszStaticIP);
}
dwIPSize = sizeof(wszDHCPIP);
lStatus = RegQueryValueEx(
hParamKey,
L"DhcpIPAddress",
NULL,
NULL,
(LPBYTE)&wszDHCPIP,
&dwIPSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"\tDHCP IP Address : %s\n", wszDHCPIP);
}
wprintf_s(L"\n");
RegCloseKey(hParamKey);
}
}
}
}
}
RegCloseKey(hNetCardsKey);
}
return 0;
}
単純な出力:
Adapter : {6EC2554F-3359-43A2-AADB-57F427DC72FC} [Marvell Yukon 88E8072 PCI-E Gigabit Ethernet Controller]
DHCP : No
Configured IP Address : 192.168.5.10
DHCP IP Address : 192.168.1.102
Adapter : {2A28BDA8-ED1D-4E6E-8990-485EE1836828} [Sony Ericsson Device 0016 USB Ethernet Emulation (NDIS 5)]
DHCP : Yes
Configured IP Address :
DHCP IP Address : 0.0.0.0
Adapter : {491DC095-155F-4572-B975-2E1703C17632} [Microsoft Windows Mobile Remote Adapter]
DHCP : Yes
Configured IP Address :
DHCP IP Address : 169.254.2.2
Adapter : {5F987E64-E804-42DA-9453-8E479B6FC835} [Broadcom 802.11b/g Network adapter]
DHCP : Yes
Configured IP Address :
DHCP IP Address : 192.168.1.14
于 2012-10-04T17:35:08.023 に答える
0
申し訳ありません、いいえ、私はそうは思いません。
OSのネットワークとのJavaのインターフェースはJVMにすぎないため、JAVAを介してそれを行うことはできません。
jniは、多分タスクを実行するために要約することができます。
于 2012-10-04T14:13:53.413 に答える