以编程方式确定是通过dhcp分配IP地址还是在java中手动设置
发布时间:2020-12-15 02:59:57 所属栏目:Java 来源:网络整理
导读:标题总结了它.有没有办法发现本地网络接口是否通过DHCP分配了它的地址,还是通过 java静态设置? 解决方法 因此,正如您仅请求Win NT’解决方案’,这是我的代码.它列出了具有当前配置值的网络接口. 注意EnableDHCP注册表键值,我认为这是重点. 正如我在你的问题
|
标题总结了它.有没有办法发现本地网络接口是否通过DHCP分配了它的地址,还是通过
java静态设置?
解决方法
因此,正如您仅请求Win NT’解决方案’,这是我的代码.它列出了具有当前配置值的网络接口.
注意EnableDHCP注册表键值,我认为这是重点. 正如我在你的问题评论中已经提到的,你需要至少简单的JNI包装器. 希望这可以帮助. 更多信息:http://support.microsoft.com/kb/314053 #include <windows.h>
#define NETCARD_ROOT L"SOFTWAREMicrosoftWindows NTCurrentVersionNetworkCards"
#define TCPIP_ROOT L"SYSTEMCurrentControlSetservicesTcpipParametersInterfaces"
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,&dwCards,&dwMaxSubkeyNameLen,NULL);
if(ERROR_SUCCESS == lStatus && dwCards)
{
for(DWORD i = 0; i < dwCards; i++)
{
TCHAR wszCurrentCardIdxName[MAX_PATH];
wszCurrentCardIdxName[0] = ' ';
lStatus = RegEnumKey(hNetCardsKey,i,wszCurrentCardIdxName,MAX_PATH);
if(ERROR_SUCCESS == lStatus)
{
TCHAR wszAdapterKeyName[MAX_PATH];
wszAdapterKeyName[0] = ' ';
wsprintf(wszAdapterKeyName,L"%s%s",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] = ' ';
RegQueryValueEx(
hCardNameKey,L"ServiceName",(LPBYTE)wszServiceNameGuid,&dwSize);
dwSize = sizeof(wszAdapterName);
RegQueryValueEx(
hCardNameKey,L"Description",(LPBYTE)wszAdapterName,&dwSize);
OutputDebugStringW(wszServiceNameGuid);
OutputDebugStringW(L"n");
RegCloseKey(hCardNameKey);
//Get parameters
TCHAR wszCardParamKey[MAX_PATH];
wszCardParamKey[0] = ' ';
wsprintf(wszCardParamKey,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",(LPBYTE)&dwEnabledDHCP,&dwDWSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"Adapter : %s [%s] ntDHCP : %sn",wszServiceNameGuid,wszAdapterName,dwEnabledDHCP
? L"Yes" : L"No");
}
lStatus = RegQueryValueEx(
hParamKey,L"IPAddress",(LPBYTE)&wszStaticIP,&dwIPSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"tConfigured IP Address : %sn",wszStaticIP);
}
dwIPSize = sizeof(wszDHCPIP);
lStatus = RegQueryValueEx(
hParamKey,L"DhcpIPAddress",(LPBYTE)&wszDHCPIP,&dwIPSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"tDHCP IP Address : %sn",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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
