java 单机接口限流处理方案
892
2022-11-05
mac地址查询API(mac地址查询设备)
本文目录一览:
public class getInfo
{
/// summary
/// 获取CPU序列号
/// /summary
/// returnsCPU序列号(string类型 )/returns
public string getCpuID()
{
string cpuInfo =" ";
ManagementClass cimobject = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
return cpuInfo.ToString();
} /// summary
/// 获取硬盘ID
/// /summary
/// returns返回硬盘ID(string类型) /returns
public string getHDid()
{
string HDid = " ";
ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
HDid = (string)mo.Properties["Model"].Value;
}
return HDid.ToString(); } /// summary
/// 获取网卡硬地址
/// /summary
/// returns返回网卡硬地址(string类型)/returns
public string GetMoAddress()
{
string MoAddress =" ";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc2 = mc.GetInstances();
foreach (ManagementObject mo in moc2)
{
if ((bool)mo["IPEnabled"] == true)
{
MoAddress = mo["MacAddress"].ToString();
mo.Dispose();
}
}
return MoAddress.ToString();
}
}/p我空间日志写过,希望能帮到你
1.NDIS(DDK)通过驱动程序获取MAC地址
ndis规范中说明,网卡驱动程序支持ioctl_ndis_query_stats接口
参数如下:
OID_802_3_PERMANENT_ADDRESS :物理地址
OID_802_3_CURRENT_ADDRESS :mac地址
于是我们的方法就得到了。
首先,看看注册表,找一找网卡有几块,分别是什么设备名。
具体位置和os有关,2000下在hlm/software/microsoft/windows nt/current version/networkcards。
然后createfile(devicename,...)注意,要用linkname,因此
还要加上"////.//device//".
接着
deviceiocontrol(hmac,IOCTL_NDIS_QUERY_STATS,
OID_802_3_PERMANENT_ADDRESS/OID_802_3_CURRENT_ADDRESS...)
具体的情况可以参看ddk下的
OID_802_3_CURRENT_ADDRESS条目
2.NetAPI-2得到MAC (MSDN推荐方法)
#include windows.h
//#include wincon.h
#include stdlib.h
#include stdio.h
#include time.h
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;
ASTAT Adapter;
int main (void)
{
NCB Ncb;
UCHAR uRetCode;
char NetName[50];
LANA_ENUM lenum;
int i;
memset( Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (UCHAR *)lenum;
Ncb.ncb_length = sizeof(lenum);
uRetCode = Netbios( Ncb );
printf( "The NCBENUM return code is: 0x%x /n", uRetCode );
for(i=0; i lenum.length ;i++)
{
memset( Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = lenum.lana;
uRetCode = Netbios( Ncb );
printf( "The NCBRESET on LANA %d return code is: 0x%x /n",
lenum.lana, uRetCode );
memset( Ncb, 0, sizeof (Ncb) );
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = lenum.lana;
strcpy( Ncb.ncb_callname, "* " );
Ncb.ncb_buffer = (char *) Adapter;
Ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( Ncb );
printf( "The NCBASTAT on LANA %d return code is: 0x%x /n",
lenum.lana, uRetCode );
if ( uRetCode == 0 )
{
printf( "The Ethernet Number on LANA %d is:%02x%02x%02x%02x%02x%02x/n",
lenum.lana,
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] );
}
}
}
3.用COM API获取网卡MAC地址
这种方法使用COM API创建一个GUID(全局唯一标识符)并从那里继承MAC地址。
GUID通常用来标识COM组件以及系统中的其他对象。它们是由MAC地址(结合其他东西)计算得来的,表面上MAC地址就包含在其中。
我说表面上是因为事实上并没有包含。我提供这种方法更多的是为了作为反面教材。您也许用这种方法能够得到MAC地址,但
有时候您只会得到随机的十六进制数值。下面的例子十分简单,无需多讲。我们使用CoCreateGuid创建GUID,并将最后六个字节
放入字符串中。它们可能是MAC地址,但并不是必然的。
uuid.cpp
#include windows.h
#include iostream
#include conio.h
using namespace std;
int main()
{
cout "MAC address is: ";
// 向COM要求一个UUID。如果机器中有以太网卡,
// UUID最后的六个字节(Data4的2-7字节)应该是本地以太网卡的MAC地址。
GUID uuid;
CoCreateGuid(uuid);
// Spit the address out
char mac_addr[18];
sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X",
uuid.Data4[2],uuid.Data4[3],uuid.Data4[4],
uuid.Data4[5],uuid.Data4[6],uuid.Data4[7]);
cout mac_addr endl;
getch();
return 0;
}
4.用NetAPI来获取网卡MAC地址
首先在头文件定义中加入#include "nb30.h"
#pragma comment(lib,"netapi32.lib")
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
} ASTAT, * PASTAT;
就可以这样调用来获取远程网卡MAC地址了:
CString GetMacAddress(CString sNetBiosName)
{
ASTAT Adapter;
NCB ncb;
UCHAR uRetCode;
memset(ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
uRetCode = Netbios(ncb);
memset(ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;
sNetBiosName.MakeUpper();
FillMemory(ncb.ncb_callname, NCBNAMSZ - 1, 0x20);
strcpy((char *)ncb.ncb_callname, (LPCTSTR) sNetBiosName);
ncb.ncb_callname[sNetBiosName.GetLength()] = 0x20;
ncb.ncb_callname[NCBNAMSZ] = 0x0;
ncb.ncb_buffer = (unsigned char *) Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios(ncb);
CString sMacAddress;
if (uRetCode == 0)
{
sMacAddress.Format(_T("%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 sMacAddress;
}
调用 API GetAdaptersInfo 获取本机适配器信息名称,IP地址,子网掩码,MAC地址要加载库文件: Iphlpapi.lib#define WIN32_LEAN_AND_MEAN#include #include #include #include #include #include #include #include #include #define MALLOC(x) Heap...
网卡MAC物理地址是“固化在网卡里的编号”,是一个12位的16进制数。
1.如果你是新买的网卡,那么有个简单的方法就是查看网卡的标签,在新网卡上面会贴有网卡的物理地址。
2.如果你的计算机已经安装好了,那么查询方法由你的操作系统决定:
(1)windows操作系统(95/98/NT):使用winipcfg.exe命令
使用开始菜单里的运行命令,然后键入winipcfg.exe命令,就可以看见一个窗口,包括网卡类型、IP地址、MAC地址、子网掩码和子网网关。 BR注意:选择类型时要选择网卡,不要选择PPP adpter。
(2)UNIX系统(linux/redhat):使用ifconfig命令。
注意:使用者必须是系统的超级用户。
(3)NCSA系统:使用网卡驱动程序命令。
在命令行里键入所使用的网卡的驱动程序命令,便会显示相应的一些信息。
3.如果你有多台计算机可以使用,那么可以互相查询:
首先在windows的DOS或者NCSA下使用ping命令,ping通相应的计算机以后,使用arp-a命令,便可以查询所ping机子的网卡MAC物理地址
mac地址查询API的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mac地址查询设备、mac地址查询API的信息别忘了在迈希泽CE认证机构进行查找喔。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~