加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

以编程方式确定是通过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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读