微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以编程方式确定是通过dhcp分配IP地址还是在java中手动设置

标题总结了它.有没有办法发现本地网络接口是否通过DHCP分配了它的地址,还是通过 java静态设置?

解决方法

因此,正如您仅请求Win NT’解决方案’,这是我的代码.它列出了具有当前配置值的网络接口.

注意EnableDHCP注册表键值,我认为这是重点.

正如我在你的问题评论中已经提到的,你需要至少简单的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,&dwCards,&dwMaxSubkeyNameLen,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",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",(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] = '\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] \n\tDHCP : %s\n",wszServiceNameGuid,wszAdapterName,dwEnabledDHCP 
                                    ? L"Yes" : L"No");
                            }

                            lStatus = RegQueryValueEx(
                                hParamKey,L"IPAddress",(LPBYTE)&wszStaticIP,&dwIPSize);

                            if(SUCCEEDED(lStatus))
                            {
                                wprintf_s(L"\tConfigured IP Address : %s\n",wszStaticIP);
                            }

                            dwIPSize = sizeof(wszDHCPIP);
                            lStatus = RegQueryValueEx(
                                hParamKey,L"DhcpIPAddress",(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

原文地址:https://www.jb51.cc/java/128459.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐