xsocket.cpp

来自「一段根据本地机器网卡进行身份校验的源码」· C++ 代码 · 共 76 行

CPP
76
字号
#include "stdafx.h"
#include "XSocket.h"

#include "memory.h"
#include "afxconv.h"

#include <nb30.h>

#pragma comment(lib, "ws2_32.lib") 
#pragma message("Automatically linking with ws2_32.lib")

#pragma comment(lib, "netapi32.lib") 
#pragma message("Automatically linking with netapi32.lib")

//===========================================================================//
// 功能描述:将十六进制的数值转换成十六进制的字串
//
// 入参说明:
//           p_dsp : 用于存放转换后的十六进制字串,其大小必须是p_iLen的2倍
//           p_hex : 将要转换的十六进制数值
//           p_iLen: 标识p_hex的长度
//
// 例 : 
//     p_dsp = 010203040A0B0C0D
//     p_hex = 0x01 0x02 0x03 0x04 0x0A 0x0B 0x0C 0x0D
//     p_iLen= 8

LPCSTR GetHostIPXSPXAddr(void)
{
  static char szAddress[13];
  typedef struct _ASTAT_
  {
    ADAPTER_STATUS adapt;
    NAME_BUFFER NameBuff[30];
  }ASTAT;
  ASTAT adapter;

  NCB ncb;
  UCHAR uRetCode;
  LANA_ENUM lEnum;

  memset( &ncb, 0, sizeof(ncb) );
  ncb.ncb_command = NCBENUM;
  ncb.ncb_buffer = (UCHAR *)&lEnum;
  ncb.ncb_length = sizeof(lEnum);
  uRetCode = Netbios( &ncb );
  for (int index = 0; index < lEnum.length; index++)
  {
    memset(&ncb, 0, sizeof(ncb));
    ncb.ncb_command = NCBRESET;
    ncb.ncb_lana_num = lEnum.lana[index];
    uRetCode = Netbios(&ncb);

    memset(&ncb, 0, sizeof(ncb));
    ncb.ncb_command = NCBASTAT;
    ncb.ncb_lana_num = lEnum.lana[index];

    strcpy( (char*)(ncb.ncb_callname),  "*               " );
    ncb.ncb_buffer = (unsigned char *) &adapter;
    ncb.ncb_length = sizeof(adapter);

    uRetCode = Netbios(&ncb);
    if (uRetCode == 0)
    {
      sprintf(szAddress,"%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]);
    }
  }
  return szAddress;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?