怎么获取子网掩码?

hyz_cs 2012-09-21 11:58:45
怎么获取子网掩码?
...全文
470 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2012-09-21
  • 打赏
  • 举报
回复
用IPhlpapi提供的函数就行了。
dataxdata 2012-09-21
  • 打赏
  • 举报
回复
先枚举出所有的网络接口

INTERFACE_INFO infos[20];
int nByteReturned;
WSAIoctl(idSocket, SIO_GET_INTERFACE_LIST, NULL, 0, infos, sizeof(INTERFACE_INFO)*20, nByteReturned, NULL, NULL);
int nInterface = nByteReturned / sizeof(INTERFACE_INFO);

然后就可以读取每个接口infos[i]中的信息,其中iiAddress成员表示IP地址,iiNetmask成员就表示其网络掩码
缘中人 2012-09-21
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20101208/14/25baaf71-f626-4dde-abba-93a58518643a.html

这里有个例子,你解析字段改一下就可以了
缘中人 2012-09-21
  • 打赏
  • 举报
回复
通过命名管道,运行cmd命令,ipconfig/all,输出文件,然后解析改文件Subnet Mask后面就是了
hyz_cs 2012-09-21
  • 打赏
  • 举报
回复
OK(内容不短了)
ccrun.com 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
直接调用windows的iphlpapi.dll还是要iphlpapi.lib.[/Quote]

使劲刷新,查看7楼代码即可。
hyz_cs 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:
这个命令在中文系统上是不是也显示的是中文的字符,我在win7上试是这样的,不知道别的语言的系统会不会又是别的.


运行ipconfig输出的结果,在中文Win7中是以中文输出的,在XP以及英文的Win7上则是以英文输出的。所以说,通过ipconfig的输出结果来获取IP信息是不靠谱的(万一客户安装的是阿拉伯文的Win7呢)。

IPHlpAPI已经提供了便……
[/Quote]

直接调用windows的iphlpapi.dll还是要iphlpapi.lib.
ccrun.com 2012-09-21
  • 打赏
  • 举报
回复
好事做到底,直接上代码:
#include <tchar.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma link "iphlpapi.lib"

void __fastcall TForm1::Button1Click(TObject *Sender)
{
PMIB_IPADDRTABLE pIPTable = NULL;
DWORD dwSize = 0;
::GetIpAddrTable(pIPTable, &dwSize, TRUE);

pIPTable = (PMIB_IPADDRTABLE)::GlobalAlloc(GPTR, dwSize);
::GetIpAddrTable(pIPTable, &dwSize, TRUE);

TCHAR szIPAddr[17], szSubMask[17];
for (DWORD i=0; i < pIPTable->dwNumEntries; i++)
{
// IP
memset(szIPAddr, 0x0, sizeof(szIPAddr));
_stprintf(szIPAddr, TEXT("%d.%d.%d.%d"),
LOWORD(pIPTable->table[i].dwAddr) & 0x00FF,
LOWORD(pIPTable->table[i].dwAddr) >> 8,
HIWORD(pIPTable->table[i].dwAddr) & 0x00FF,
HIWORD(pIPTable->table[i].dwAddr) >> 8);

// Subnet Mask
memset(szSubMask, 0x0, sizeof(szSubMask));
_stprintf(szSubMask, TEXT("%d.%d.%d.%d"),
LOWORD(pIPTable->table[i].dwMask) & 0x00FF,
LOWORD(pIPTable->table[i].dwMask) >> 8,
HIWORD(pIPTable->table[i].dwMask) & 0x00FF,
HIWORD(pIPTable->table[i].dwMask) >> 8);

Memo1->Lines->Add(String().sprintf(TEXT("IP: %s 子网掩码: %s"),
szIPAddr, szSubMask));
}

::GlobalFree(pIPTable);
}


注意一点:需要在工程选项的lib路径中添加:$(BCB)\lib\psdk 否则报找不到iphlpapi.lib

以上代码在C++Builder6中编译测试。在高版本中,需要适当更改,方可编译。
ccrun.com 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
这个命令在中文系统上是不是也显示的是中文的字符,我在win7上试是这样的,不知道别的语言的系统会不会又是别的.
[/Quote]

运行ipconfig输出的结果,在中文Win7中是以中文输出的,在XP以及英文的Win7上则是以英文输出的。所以说,通过ipconfig的输出结果来获取IP信息是不靠谱的(万一客户安装的是阿拉伯文的Win7呢)。

IPHlpAPI已经提供了便捷可靠的方法,为什么不用呢?
hyz_cs 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

通过命名管道,运行cmd命令,ipconfig/all,输出文件,然后解析改文件Subnet Mask后面就是了
[/Quote]

这个命令在中文系统上是不是也显示的是中文的字符,我在win7上试是这样的,不知道别的语言的系统会不会又是别的.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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