首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • VC6下,如何获得子网掩码? [已结帖,结帖人:kyonsmith]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kyonsmith
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-21 15:22:30 楼主
    要求:仅使用VC6及WINSOCK下提供的函数。别跟我提GetIpAddrTable()和WinpCap之类的东东。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hurryboylqs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 16:31:411楼 得分:5
    用 GetAdaptersInfo 6.0的SDK更新下,有车为什么不坐,偏要步行??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greatws
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 23:39:302楼 得分:5
    直接用LoadLibrary加载iphlpapi.dll,再用GetProcAdderss导出函数GetAdaptersInfo,然后调用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kyonsmith
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 08:59:193楼 得分:0
    看来我没说明白。。。
    我要求不用其它任何iphlpapi.dll之类的库或SDK,,因为不是所有的计算机都装了这些东西。。
    我这篇代码,要求放到任一计算机上,都能立即编译,甚至可以脱离MFC平台。。。。
    这是为了通用性和可移植性,这不算过分吧???
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dux003
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:10:124楼 得分:5
    iphlpapi.dll应该在所有的系统中都有,直接用LoadLibrary加载iphlpapi.dll,再用GetProcAdderss导出函数GetAdaptersInfo,然后调用的方法应该满足你的要求
    另外读注册表好像也可以
    还有一种保险的方法,利用CreateProcess执行ipconfig命令,利用管道读取它的输出,然后从输出结果中定位掩码
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hurryboylqs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:12:315楼 得分:0
    所有计算机?? 有点过分,既然你是在VC6下编译的那就基本是跑在windows平台下....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kyonsmith
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:26:116楼 得分:0
    感谢几位的回答,我对这些库什么的,的确了解很少,先试试看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kyonsmith
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:56:457楼 得分:0
    需要Iptypes.h头文件,还不是得下SDK?或者光把那个头文件COPY下来,能行吗??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • JazzDynasty
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 11:14:478楼 得分:5
    C/C++ code
    #inclue "stdafx.h" #include <windows.h> #include <stdio.h> #include "Iphlpapi.h" #pragma comment(lib, "Iphlpapi.lib") #pragma comment(lib, "WS2_32.lib") ///////////////////////////////////////// // 全局数据 u_char g_ucLocalMac[6]; // 本地MAC地址 DWORD g_dwGatewayIP; // 网关IP地址 DWORD g_dwLocalIP; // 本地IP地址 DWORD g_dwMask; // 子网掩码 BOOL GetGlobalData() { PIP_ADAPTER_INFO pAdapterInfo = NULL; ULONG ulLen = 0; // 为适配器结构申请内存 ::GetAdaptersInfo(pAdapterInfo,&ulLen); pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR, ulLen); // 取得本地适配器结构信息 if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS) { if(pAdapterInfo != NULL) { memcpy(g_ucLocalMac, pAdapterInfo->Address, 6); g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String); g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String); g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String); } } printf(" \n -------------------- 本地主机信息 -----------------------\n\n"); in_addr in; in.S_un.S_addr = g_dwLocalIP; printf(" IP Address : %s \n", ::inet_ntoa(in)); in.S_un.S_addr = g_dwMask; printf(" Subnet Mask : %s \n", ::inet_ntoa(in)); in.S_un.S_addr = g_dwGatewayIP; printf(" Default Gateway : %s \n", ::inet_ntoa(in)); u_char *p = g_ucLocalMac; printf(" MAC Address : %02X-%02X-%02X-%02X-%02X-%02X \n", p[0], p[1], p[2], p[3], p[4], p[5]); printf(" \n \n "); return TRUE; } int main() { // 获取全局数据 GetGlobalData(); getchar(); return 0; }

    这个直接复制应该就可以运行了,主机IP、子网掩码、网关、MAC地址都有了!
    随便哪本书上都有的例程啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kyonsmith
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 11:20:409楼 得分:0
    楼上的回答很详细,先谢过,但是#pragma comment(lib, "Iphlpapi.lib")这句里出了问题。
    Iphlpapi.lib在VC6里没有。从VC7拷过来的话,就降低了可移植性,不符合项目需求。
    补充一点,我这段代码是写在.c文件里的。
    还有没有别的解决办法……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • JazzDynasty
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 12:24:5110楼 得分:0
    Inphlpapi.lib 是WINDOWS SERVER 2003 PLATFORM SDK里的库,可以去MICROSOFT的网站下,不过现在的版本好象不支持VC6了,你可以找一个老一点的版本.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hurryboylqs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:43:4511楼 得分:0
    跟你说VC6的SDK很老了!98年的,现在谁还用98?只要你的windows是2000及以上,用上面的函数不成问题的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kyonsmith
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:17:1812楼 得分:0
    有些东西老,但是好用。我在的项目组,主要是做嵌入式的,VC只是用来辅助编辑,用VC98就足够了。。。
    结贴给分吧~
    就没别的办法了吗?????
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zwzqfx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:49:3113楼 得分:0
    vckbase上有個例子,你自已找一下
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved