CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

如何获得计算机内所有网卡的型号??

楼主hotmalx()2005-04-01 16:53:33 在 VC/MFC / 网络编程 提问

如题 问题点数:0、回复次数:3Top

1 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-01 19:04:17 得分 0

GetNetworkParam()枚举网卡Top

2 楼ChangYong(石头)回复于 2005-04-01 19:39:30 得分 0

我也对这个感兴趣,能给出代码吗Top

3 楼juststone(灰虫轨迹)回复于 2005-04-01 21:44:37 得分 0

是Mac地址吗?  
  ********************************取得本地MAC地址********************************  
   
  #include   <lm.h>  
  #pragma   comment(lib,"NetApi32.lib")  
   
  void   CDDlg::OnButton2()    
  {  
  unsigned   char   macdata[8];  
  WKSTA_TRANSPORT_INFO_0   *   pwkti;  
  DWORD   dwe,dwt;  
  BYTE   *pb;  
  NET_API_STATUS   dws=NetWkstaTransportEnum(  
  NULL,  
  0,  
  &pb,  
  MAX_PREFERRED_LENGTH,  
  &dwe,  
  &dwt,  
  NULL);  
  pwkti=(WKSTA_TRANSPORT_INFO_0   *)pb;  
  CString   cs;  
  for(DWORD   i=1;i<dwe;i++)  
  {  
  swscanf((wchar_t   *)pwkti[i].wkti0_transport_address,L"%2hx%2hx%2hx%2hx%2hx%2hx",&macdata[0],  
  &macdata[1],&macdata[2],&macdata[3],&macdata[4],&macdata[5]);  
  cs.Format("%02x%02x%02x%02x%02x%02x",macdata[0],  
  macdata[1],macdata[2],macdata[3],macdata[4],macdata[5]);  
  MessageBox(cs);  
  }  
  NetApiBufferFree(pb);  
  }  
   
   
  ----------------------------------------------------------------------------------  
  1.you   can   use   sendarp   function   to   get   mac   address   in   local.  
  2.if   you   want   to   use   netbios   code,give   you   an   example:  
  /   ResolveThread.cpp   :   implementation   file  
  //  
   
  #include   "stdafx.h"  
  #include   <nb30.h>  
  #include   <string.h>  
  #include   "pinger.h"  
  #include   "ResolveThread.h"  
   
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]   =   __FILE__;  
  #endif  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   CResolveThread  
   
  IMPLEMENT_DYNCREATE(CResolveThread,   CWinThread)  
   
  CResolveThread::CResolveThread()  
  {  
  m_dwTimeout   =   2000;  
  m_dwCount   =   3;  
  }  
   
  CResolveThread::CResolveThread(DWORD   dwTimeout,   DWORD   dwCount)  
  {  
  m_dwTimeout   =   dwTimeout;  
  m_dwCount   =   dwCount;  
  }  
   
  CResolveThread::~CResolveThread()  
  {  
  }  
   
  BOOL   CResolveThread::InitInstance()  
  {  
  //   TODO:     perform   and   per-thread   initialization   here  
  m_sockNbt   =   WSASocket(AF_INET,   SOCK_DGRAM,   IPPROTO_UDP,   NULL,   0,   WSA_FLAG_OVERLAPPED);  
  if   (INVALID_SOCKET   ==   m_sockNbt)  
  {  
  return   FALSE;  
  }  
   
  int   nTimeout   =   (int)m_dwTimeout;  
  if   (SOCKET_ERROR   ==   setsockopt(m_sockNbt,   SOL_SOCKET,   SO_SNDTIMEO,   (char*)(&nTimeout),   sizeof(nTimeout)))  
  {  
  closesocket(m_sockNbt);  
  return   FALSE;  
  }  
   
  m_nUniID   =   (USHORT)m_nThreadID;  
   
  return   TRUE;  
  }  
   
  int   CResolveThread::ExitInstance()  
  {  
  //   TODO:     perform   any   per-thread   cleanup   here  
  return   CWinThread::ExitInstance();  
  }  
   
  BEGIN_MESSAGE_MAP(CResolveThread,   CWinThread)  
  //{{AFX_MSG_MAP(CResolveThread)  
  //   NOTE   -   the   ClassWizard   will   add   and   remove   mapping   macros   here.  
  ON_THREAD_MESSAGE(UM_RESOLVE_HOST_NAME,   OnResolveHostName)  
  ON_THREAD_MESSAGE(UM_DESTROY_THREAD,   OnDestroyThread)  
  //}}AFX_MSG_MAP  
  END_MESSAGE_MAP()  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   CResolveThread   message   handlers  
   
  void   CResolveThread::OnResolveHostName(WPARAM   /*   wParam   */,   LPARAM   lParam)  
  {  
  RESOLVE_HOST_NAME_MESSAGE   *   pResolveHostNameMessage   =   (RESOLVE_HOST_NAME_MESSAGE   *)lParam;  
  DWORD   dwIpAddress   =   pResolveHostNameMessage->dwIpAddress;  
   
  sockaddr_in   to_addr;  
  sockaddr_in   from_addr;  
  int   from_addr_len   =   sizeof(from_addr);  
  to_addr.sin_addr.s_addr   =   dwIpAddress;  
  to_addr.sin_port   =   htons(137);  
  to_addr.sin_family   =   AF_INET;  
   
  NBTSTAT_REQUEST_PACKET   *   pRequest   =   (NBTSTAT_REQUEST_PACKET*)m_pSendBuf;  
  memset(pRequest,   0,   sizeof(NBTSTAT_REQUEST_PACKET));  
  pRequest->question_count   =   htons(1);  
  pRequest->name_len   =   0x20;  
  memcpy(pRequest->name,   NETBIOS_QUERY_NAME,   32);  
  pRequest->type   =   htons(0x21);  
  pRequest->protocol   =   htons(1);  
   
  BOOL   bNetBiosNameResolved   =   FALSE;  
   
  for   (DWORD   i=0;   i<3/*m_dwCount*/;   i++)  
  {  
  int   nRet;  
  int   nTimeout   =   (int)m_dwTimeout;  
   
  pRequest->id   =   ++m_nUniID;  
   
  if   (SOCKET_ERROR   ==   sendto(m_sockNbt,   (char*)m_pSendBuf,   sizeof(NBTSTAT_REQUEST_PACKET),   0,   (struct   sockaddr*)(&to_addr),   sizeof(to_addr)))  
  {  
  continue;  
  }  
   
  if   (SOCKET_ERROR   ==   setsockopt(m_sockNbt,   SOL_SOCKET,   SO_RCVTIMEO,   (char*)(&nTimeout),   sizeof(nTimeout)))  
  {  
  continue;  
  }  
   
  nRet   =   recvfrom(m_sockNbt,   (char*)m_pRecvBuf,   BUFFER_SIZE,   0,   (struct   sockaddr*)(&from_addr),   &from_addr_len);  
  if   (nRet   ==   SOCKET_ERROR)  
  {  
  continue;  
  }  
  else  
  {  
  PNBTSTAT_RESPONSE_HEADER   pResponseHeader   =   (PNBTSTAT_RESPONSE_HEADER)m_pRecvBuf;  
  PNETBIOS_NAME_ENTRY   pNameEntry   =   (PNETBIOS_NAME_ENTRY)(m_pRecvBuf   +   sizeof(NBTSTAT_RESPONSE_HEADER));  
  if   (pResponseHeader->id   ==   m_nUniID   &&   pResponseHeader->name_number   !=   0   &&   pResponseHeader->name_number   <   64   &&   pNameEntry->name_term   ==   0)  
  {  
  CHAR   szNetBiosName[64];  
   
  char   *   pNameEnd   =   strchr((char*)(pNameEntry->name),   0x20);  
  if   (NULL   !=   pNameEnd)    
  {  
  pNameEnd[0]   =   0;  
  }  
  else  
  {  
  szNetBiosName[15]   =   0;  
  }  
   
  strncpy(szNetBiosName,   (char*)(pNameEntry->name),   15);  
   
  for   (USHORT   j=0;   j<pResponseHeader->name_number;   j++)  
  {  
  if   (0   ==   memcmp(pNameEntry[j].name,   "\x01\x02__MSBROWSE__\x02\x01",   16))  
  {  
  strcat(szNetBiosName,   "!");  
  }  
  }  
   
  *(pResolveHostNameMessage->pstrHostName)   =   szNetBiosName;  
  bNetBiosNameResolved   =   TRUE;  
  break;  
  }  
  }  
  }  
  /*  
  if   (FALSE   ==   bNetBiosNameResolved)  
  {  
  HOSTENT   *   pHostEnt   =   gethostbyaddr((char*)&dwIpAddress,   sizeof(dwIpAddress),   AF_INET);  
  if   (NULL   !=   pHostEnt)  
  {  
  *(pResolveHostNameMessage->pstrHostName)   =   pHostEnt->h_name;  
  }  
  }  
  */  
  SetEvent(pResolveHostNameMessage->hEvent);  
  }  
   
  void   CResolveThread::OnDestroyThread(WPARAM   wParam,   LPARAM   lParam)  
  {  
  PostThreadMessage(WM_QUIT,   0,   0);  
  }  
  Top

相关问题

  • 如何编程获得远程计算机的网卡的MAC地址?来者有分
  • 加急加急,有谁知道怎么通过API获得本机网卡IP或者与我连接方计算机的网卡IP
  • 如何获得网卡(多个网卡)各自的型号及对应的IP地址?MAC地址
  • 求求大家:有谁知道如何获得网卡或计算机唯一ID的方法,请赐教!谢谢!!!
  • 一台计算机上可以使用几块网卡?
  • 如何通过网卡远程唤醒计算机?
  • 请问如何用网卡将两台计算机相连?
  • 如何获得计算机的计算机名
  • 请问怎样获得计算机名
  • 如何取得计算机中两张网卡的IP地址?(在线等待)

关键词

  • pb
  • socket
  • null
  • cresolvethread
  • socknbt
  • sznetbiosname
  • pnameentry
  • presponseheader
  • ntimeout
  • dwtimeout

得分解答快速导航

  • 帖主:hotmalx

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo