如何获得计算机内所有网卡的型号??
如题 问题点数: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




