如何用VC编程实现IP ipconfig /release 和 ipconfig/renew 同样的功能, 在线等到,急急急!!!!

langren770 2008-07-17 11:45:05
如果用VC编程实现释放DHCP动态分配的IP和重新获得DHCP分配的新的IP,最好有代码,兄弟在此先谢了!!!!!
...全文
404 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyx100 2012-04-26
  • 打赏
  • 举报
回复
回复于:2008-07-17 13:37:25调试下ipconfig.exe,看看它使用什么函数就行了,据我所知,应该是iphlpapi.h里的windows API
WinEggDrop 2008-07-17
  • 打赏
  • 举报
回复
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>

void Usage(void) {
printf("Usage: Iprenew [ -l ] [ -r<index id> ] [ -n<index id>]\n\n"
"\t -l List adapters with corresponding index ID information\n"
"\t -r Release IP address for adapter index ID\n"
"\t -n Renew IP address for adapter index ID\n");
}

void main(int argc, char *argv[])
{
DWORD InterfaceInfoSize = 0;
PIP_INTERFACE_INFO pInterfaceInfo;
DWORD Err;
INT i;
PIP_ADAPTER_INFO pAdapterInfo, pAdapt;
DWORD AdapterInfoSize = 0;
DWORD Index = (DWORD) -1;
BOOL OptList = FALSE;
BOOL OptRelease = FALSE;
BOOL OptRenew = FALSE;

if (argc < 2)
{
Usage();
return;
}
for (i = 1; i < argc; i++)
{
if ((argv[i][0] == '-') || (argv[i][0] == '/'))
{
switch(tolower(argv[i][1]))
{
case 'l':
OptList = TRUE;
break;
case 'r':
OptRelease = TRUE;
if (strlen(argv[i]) > 2)
Index = atoi(&argv[i][2]);
break;
case 'n':
OptRenew = TRUE;
if (strlen(argv[i]) > 2)
Index = atoi(&argv[i][2]);
break;
default:
Usage();
return;
}
}
else
{
Usage();
return;
}
}

// Check options
if ((OptRelease && Index == -1) || (OptRenew && Index == -1))
{
Usage();
return;
}

if (OptList)
{
if ((Err = GetAdaptersInfo(NULL, &AdapterInfoSize)) != 0)
{
if (Err != ERROR_BUFFER_OVERFLOW)
{
printf("GetAdaptersInfo sizing failed with error %d\n", Err);
return;
}
}

// Allocate memory from sizing information
if ((pAdapterInfo = (PIP_ADAPTER_INFO) GlobalAlloc(GPTR, AdapterInfoSize)) == NULL)
{
printf("Memory allocation error\n");
return;
}

// Get actual adapter information
if ((Err = GetAdaptersInfo(pAdapterInfo, &AdapterInfoSize)) != 0)
{
printf("GetAdaptersInfo failed with error %d\n", Err);
return;
}

pAdapt = pAdapterInfo;

printf("Index Adapter\n");
while (pAdapt)
{
printf("%-10.i%s\n", pAdapt->Index, pAdapt->Description);
pAdapt = pAdapt->Next;
}
}

if ((Err = GetInterfaceInfo(NULL, &InterfaceInfoSize)) != 0)
{
if (Err != ERROR_INSUFFICIENT_BUFFER)
{
printf("GetInterfaceInfo sizing failed with error %d\n", Err);
return;
}
}

// Allocate memory from sizing information
if ((pInterfaceInfo = (PIP_INTERFACE_INFO) GlobalAlloc(GPTR, InterfaceInfoSize)) == NULL)
{
printf("Memory allocation error\n");
return;
}

// Get actual adapter information
if ((Err = GetInterfaceInfo(pInterfaceInfo, &InterfaceInfoSize)) != 0)
{
printf("GetInterfaceInfo failed with error %d\n", Err);
return;
}


if (OptRelease)
{
for (i = 0; i < pInterfaceInfo->NumAdapters; i++)
if (Index == pInterfaceInfo->Adapter[i].Index)
{
if ((Err = IpReleaseAddress(&pInterfaceInfo->Adapter[i])) != 0)
{
printf("IpReleaseAddress failed with error %d\n", Err);
return;
}
break;
}
}


if (OptRenew)
{
for (i = 0; i < pInterfaceInfo->NumAdapters; i++)
if (Index == pInterfaceInfo->Adapter[i].Index)
{
if ((Err = IpRenewAddress(&pInterfaceInfo->Adapter[i])) != 0)
{
printf("IpRenewAddress failed with error %d\n", Err);
return;
}
break;
}
}
}

上面是微软SDK中带的代码
renxianfu 2008-07-17
  • 打赏
  • 举报
回复
微软 sdk中有例子代码
greatws 2008-07-17
  • 打赏
  • 举报
回复
调试下ipconfig.exe,看看它使用什么函数就行了,据我所知,应该是iphlpapi.h里的windows API

18,356

社区成员

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

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