vc6.0获得本机IP\MAC

include

include “nb30.h”

pragma comment(lib,”ws2_32.lib”)//连接ws2_32.lib库.只要程序中用到Winsock API 函数,都要用到 Ws2_32.lib

pragma comment(lib, “netapi32”) //连接Netapi32.lib库,MAC获取中用到了NetApi32.DLL的功能

//在Win32平台上的Winsock编程都要经过下列的基本步骤:定义变量->获得Winsock版本->加载Winsock库->
//初始化->创建套接字->设置套接字选项->关闭套接字->卸载Winsock库,释放所有资源。
void CheckIP(void) //定义checkIP函数,用于取本机的ip地址
{
WSADATA wsaData;
char name[155]; //定义用于存放获得主机名的变量
char *ip; //定义IP地址变量
PHOSTENT hostinfo;

//调用MAKEWORD()获得Winsocl版本的正确值,用于下面的加载Winscok库  
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 )   
{   //加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续往下执行  
    if( gethostname ( name, sizeof(name)) == 0)   
    { //如果成功,将本地主机名存放入由name参数指定的缓冲区中  
        if((hostinfo = gethostbyname(name)) != NULL)   
        { //这是获取主机,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo为PHOSTENT型的变量。  
            ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);   
            //inet_addr()函数把地址串转换为IP地址  
            //调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的IP地址(如202.197.11.12.)  
            theApp.m_strIP = CString::CString(ip);
        }   
    }   
    WSACleanup( );         //卸载Winsock库,并释放所有资源  
}   

}

int getMACAddress()
{
char * mac = new char(100);
CString cs_mac;

NCB ncb;     
typedef struct _ASTAT_     
{
    ADAPTER_STATUS   adapt;  
    NAME_BUFFER   NameBuff   [30];     
}ASTAT,   *   PASTAT;     
ASTAT Adapter;     

typedef struct _LANA_ENUM     
{   //   le 
    UCHAR   length;  
    UCHAR   lana[MAX_LANA];     
}LANA_ENUM   ;     
LANA_ENUM lana_enum;     

UCHAR uRetCode;     
memset(&ncb, 0, sizeof(ncb));     
memset(&lana_enum, 0, sizeof(lana_enum));     

ncb.ncb_command = NCBENUM;     
ncb.ncb_buffer = (unsigned char *)&lana_enum;     
ncb.ncb_length = sizeof(LANA_ENUM);     
uRetCode = Netbios(&ncb);     
if(uRetCode != NRC_GOODRET)     
    return uRetCode;     

for(int lana=0; lana<lana_enum.length; lana++)     
{
    ncb.ncb_command = NCBRESET; 
    ncb.ncb_lana_num = lana_enum.lana[lana]; 
    uRetCode = Netbios(&ncb);   
    if(uRetCode == NRC_GOODRET)  
        break; 
} 
if(uRetCode != NRC_GOODRET)
    return uRetCode;     

memset(&ncb, 0, sizeof(ncb));  
ncb.ncb_command = NCBASTAT;  
ncb.ncb_lana_num = lana_enum.lana[0];
strcpy((char*)ncb.ncb_callname, "*"); 
ncb.ncb_buffer = (unsigned char *)&Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios(&ncb);  
if(uRetCode != NRC_GOODRET)   
    return uRetCode;     


cs_mac = CString::CString(mac);
cs_mac.Format("%02X-%02X-%02X-%02X-%02X-%02X",     
    Adapter.adapt.adapter_address[0],     
    Adapter.adapt.adapter_address[1],     
    Adapter.adapt.adapter_address[2],     
    Adapter.adapt.adapter_address[3],     
    Adapter.adapt.adapter_address[4],     
    Adapter.adapt.adapter_address[5]);

theApp.m_strMAC = cs_mac; 
return 0;   

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值