有什么方法可以发现本地网络接口(interface)的地址是通过 DHCP 分配的还是通过 Java 静态设置的?
最佳答案
因此,正如您仅请求 Win NT“解决方案”一样,这里是我的代码。它列出了具有当前配置值的网络接口(interface)。
注意 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, 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
关于java - 以编程方式确定 ip 地址是通过 dhcp 分配的还是在 Java 中手动设置的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541186/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我