WINDOWS如何设置IP地址?

永夜星空 2007-08-01 03:21:23
最近一直为要设置网卡地址烦恼,网上找了好久资料都没有我真正想要的,下面是我从网上找的一些方法,但我要的是用程序像手动从网络连接属性里该的那种方式

在iphlpapi.dll中有个函数AddIpAddress
但看到人家说的下面这段话,很明显不是我需要的
“最常用的函数 AddIPAddress。这个函数能够设置本地网络的IP。但不幸的是,这个IP是临时的,当系统重新启动或者发生其它的PNP事件的时候这个IP就不存在了。”

另外有些方法如用WMI对象
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
strIPAddress = Array("192.168.1.141")
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.1.100")
strGatewayMetric = Array(1)
For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
If errEnable = 0 Then
WScript.Echo "The IP address has been changed."
Else
WScript.Echo "The IP address could not be changed."
End If
Next
对于WMI不是很懂,用起来也麻烦

还有直接改注册表的
HKEY_LOCAL_MACHINE\SYSTEM\Controlset001\Services\{b8584ff4-32a6-43DC-BC53-982A46165FAF}\parameters\Tcpip 里面的IPADDRESS项
可是这路径中的这串数字{b8584ff4-32a6-43DC-BC53-982A46165FAF}在不同的机器上似乎不同的,也不知道用没有什么规律

若要用一个程序设置IP就想手动设置IP一样的可靠应该怎么办呢。甚至有什么办法可以跟踪手动设置IP时WINDOWS是怎么操作的吗?总之有没有什么线索.万分感谢呀
...全文
960 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
df8327 2007-08-09
  • 打赏
  • 举报
回复
我的就是不重启实现IP更改的方法
哈哈
light_sun 2007-08-08
  • 打赏
  • 举报
回复
而且是不用重起机器的设置方法哦
light_sun 2007-08-08
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=851
包你满意
df8327 2007-08-08
  • 打赏
  • 举报
回复
BOOL RegSetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate)
{
HKEY hKey;
CString strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
strKeyName += lpszAdapterName;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,strKeyName.GetString(), 0, KEY_WRITE, &hKey) != ERROR_SUCCESS)
{
return FALSE;
}
char mszIPAddress[100];
char mszNetMask[100];
char mszNetGate[100];

strncpy(mszIPAddress, pIPAddress, 98);
strncpy(mszNetMask, pNetMask, 98);
strncpy(mszNetGate, pNetGate, 98);

int nIP, nMask, nGate;

nIP = (int)strlen(mszIPAddress);
nMask = (int)strlen(mszNetMask);
nGate = (int)strlen(mszNetGate);

*(mszIPAddress + nIP + 1) = 0x00;
nIP += 2;

*(mszNetMask + nMask + 1) = 0x00;
nMask += 2;

*(mszNetGate + nGate + 1) = 0x00;
nGate += 2;

RegSetValueEx(hKey, "IPAddress", 0, REG_MULTI_SZ, (unsigned char*)mszIPAddress, nIP);
RegSetValueEx(hKey, "SubnetMask", 0, REG_MULTI_SZ, (unsigned char*)mszNetMask, nMask);
RegSetValueEx(hKey, "DefaultGateway", 0, REG_MULTI_SZ, (unsigned char*)mszNetGate, nGate);

RegCloseKey(hKey);

return TRUE;
}



BOOL NotifyIPChange(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask)
{
BOOL bResult = FALSE;
HINSTANCE hDhcpDll;
DHCPNOTIFYPROC pDhcpNotifyProc;
WCHAR wcAdapterName[256];

MultiByteToWideChar(CP_ACP, 0, lpszAdapterName, -1, wcAdapterName,256);

if((hDhcpDll = LoadLibrary("dhcpcsvc")) == NULL)
{
return FALSE;
}

if((pDhcpNotifyProc = (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll, "DhcpNotifyConfigChange")) != NULL)
{
if((pDhcpNotifyProc)(NULL, wcAdapterName, TRUE, nIndex, inet_addr(pIPAddress), inet_addr(pNetMask), 0) == ERROR_SUCCESS)
{
bResult = TRUE;
}
}

FreeLibrary(hDhcpDll);
return bResult;
}
BOOL SetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate)
{
if(!RegSetIP(lpszAdapterName, nIndex, pIPAddress, pNetMask, pNetGate))
{
return FALSE;
}

if(!NotifyIPChange(lpszAdapterName, nIndex, pIPAddress, pNetMask))
{
return FALSE;
}

return TRUE;
}
调用SetIP()就行
哈哈
酒红色的泪 2007-08-02
  • 打赏
  • 举报
回复
我曾经做过一个定时改IP的小工具,里面有获取网卡信息,更改IP的代码,不过代码在公司电脑里,你留下邮箱,我明天上午发给你可好?
永夜星空 2007-08-02
  • 打赏
  • 举报
回复
自己顶
WizardK 2007-08-01
  • 打赏
  • 举报
回复
设置IP地址就是通过写注册表实现的,需要重启系统,因为TCP/IP协议栈需要重启以应用新的IP参数。
永夜星空 2007-08-01
  • 打赏
  • 举报
回复
我只是说网卡所绑定的IP地址
dmt9697 2007-08-01
  • 打赏
  • 举报
回复
网卡地址要用网卡供应商的驱动程序来改吧,如果随便能改,那这世界不乱套了
永夜星空 2007-08-01
  • 打赏
  • 举报
回复
如果改注册表是在注册表的哪个路径呢,因为不同的机器这些路径都不同。还有就是没必要重起机器吧,而且手动修改地址特别添加地址时网络应用都不会中断.如果多块网卡时如何在注册表中确定那块网卡是哪个键

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧