导航:首页 > 配服务器 > 查找本机服务器的mac地址

查找本机服务器的mac地址

发布时间:2022-02-23 01:53:32

⑴ 如何获取本机MAC地址 和 IP

1. 利用UUID获取
在Windows操作系统下,以Client-Sever模式进行通信时,运行时间库为了区分每个接口,需要为个接口建立一个UUID(Universally Unique Identifiers),在Windows95/98版本下,UUID的创建是通过调用函数UuidCreate()完成的,其中的第2至8字节包含了用户的MAC地址。因此,一种比较快的获取MAC地址的方法是创建一个UUID,然后分析UUID结构的第2至8字节,既可获取本机的MAC地址。示例程序如下:
static void GetMACaddress(void)
{
unsigned char MACData[6];
UUID uuid;
UuidCreate( &uuid ); // 要求操作系统创建一个新的UUID
for (int i=2; i<8; i++) // 获取本机MAC地址
MACData[i - 2] = uuid.Data4[i];
PrintMACaddress(MACData);
}
void PrintMACaddress(unsigned char MACData[])
{
printf("MAC Address: X-X-X-X-X-X\n",
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}
这种方法只能用于Windows95/98操作系统。因为从安全的角度来看,在网络上散布本机的MAC地址存在着安全隐患,因此在Windows2000/xp操作系统中,微软对函数UuidCreate()进行了修正,使之在生成UUID时,不借助于本机的MAC地址。原来UuidCreate()完成的功能由函数UuidCreateSequential()完成。因此,如果在新的系统中采用这种方法,可用UuidCreateSequential()代替上述程序中的UuidCreate()函数。
另外,需要说明的是,这种方式只能用于单网卡主机。
2. 利用Net Bios协议获取
这种方法在Windows 95/98/Me/NT/2000/XP下都适用,不过它要求网卡必须安装正确,绑定了NetBios协议,并且机器正联接在一个运行正常的NetBios网络上。如果主机未接在网上,即使用网卡运行正常,运行下述代码,用户也不会得到任何信息。
static void GetMACaddress(void)
{
unsigned char MAC Data[8]; // 定义存放 MAC地址的缓冲区 (至少6字节)
WKSTA_TRANSPORT_INFO_0 *pwkti;
DWORD dwEntriesRead;
DWORD dwTotalEntries;
BYTE *pbBuffer;

// 通过 NetBIOS的枚举函数获取MAC地址
NET_API_STATUS dwStatus = NetWkstaTransportEnum(
NULL, // [input] 服务器名,0指本机
0, // [input] 0指函数返回指向WKSTA_TRANSPORT_INFO_0结构的指针
&pbBuffer, // [output] 指向缓冲区指针
MAX_PREFERRED_LENGTH, // [input] 缓冲区最大长度
&dwEntriesRead, // [output] 用于记录实际元素个数
&dwTotalEntries, //
NULL); //[input/output] 恢复句柄
assert(dwStatus == NERR_Success);
pwkti = (WKSTA_TRANSPORT_INFO_0 *)pbBuffer; // 指针类型转换
for(DWORD i=0; i< dwEntriesRead; i++)
{ // 读取并打印MAC地址
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]);
PrintMACaddress(MACData);
}
// 释放缓冲区
dwStatus = NetApiBufferFree(pbBuffer);
assert(dwStatus == NERR_Success);
}
3. 利用GetAdaptersInfo()函数获取
此方法利用了Windows SDK 中的函数GetAdaptersInfo(),对于用户来讲,编程很简单,而且适用于Windows 95/98/Me/NT/XP等操作系统,并且不要求主机必须接在网络上,要求的只有一点,就是网卡在Windows下必须是可用的。同时,需要说明的是,GetAdaptersInfo()是一个功能非常强大的函数,它不但可以得到本机的MAC地址,而且可以得到许多其它相关信息。详细内容可参见MSDN中有关IP_ADAPTER_INFO结构的说明。
static void GetMACaddress(void)
{
IP_ADAPTER_INFO AdapterInfo[16]; // 定义网卡信息存贮区。
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD dwStatus = GetAdaptersInfo(
AdapterInfo, // [output] 指向接收数据缓冲指针
&dwBufLen); // [input] 缓冲区大小
assert(dwStatus == ERROR_SUCCESS); // 此处是个trap,用来保证返回值有效
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
do {
PrintMACaddress(pAdapterInfo->Address); // 打印MAC地址
pAdapterInfo = pAdapterInfo->Next;
}
while(pAdapterInfo);
}
本程序中定义了一个长度为16的IP_ADAPTER_INFO结构类型的数组,因此用户主机安装的网卡数不能超过16块,这在一般情况下都是可以满足的,如果出现超过16块的情况,用户需修改此项设置,或采用动态申请存贮空间的方式解决。
4.结束语
以上三种方法均在Visual C++ 6.0、Windows2000 环境下编译通过并工作正常。需要说明的是,示例程序只是提供了一种解决问题的思路,从软件工程的角度来看,有些不尽人意的地方,读者可以根据自己的编程需要进行修改。
5,获取IP
void CheckIP(void)
{
WSADATA wsaData;
char name[155];
char *ip;
PHOSTENT hostinfo;
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 ) {
if( gethostname ( name, sizeof(name)) == 0) {
if((hostinfo = gethostbyname(name)) != NULL) { //这些就是获得IP的函数
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
printf("%s\n",ip);
}
}
WSACleanup( );
} }

linux中怎么获取本机的mac地址

如果你是要修改linux的mac地址这很简单 再/etc/sysconfig/network-scripts/ifcfg-ethX (X是表示你的哪一张网卡) 修改其中的mac,修改成服务器能通过的mac就可以了,修改后,重启下网卡,为了将缓存中的mac地址修改

⑶ 如何获取本地和远程主机的IP及MAC地址

向大家介绍一下我们将如何获得一台主机的IP地址。在Win32 API中我们可以使用NetWork API完成这项工作,但是在.Net平台下我们应当如何做呢?其实操作方法与API差不多,只是大家要理解一下Namespace与Class。本站这方面的文章很多,关于Namespace与Class的内容就不介绍了。
.Net平台存在System.Net命名空间,其中的DNS类,提供了一些方法可以获取服务器的服务名或者是IP地址。DNS是一个静态类,所以它能够直接创建类实例。闲话少说,我们来看具体的程序:
namespace NKUtilities
{
using System;
using System.Net;
public class DNSUtility
{
public static int Main (string [] args)
{
String strHostName = new String ("");
if (args.Length == 0)
{
// 获得本地的IP地址
//首先获了本地机的主机名
strHostName = DNS.GetHostName ();
Console.WriteLine ("Local Machine''s Host Name: " + strHostName);
}
else
{
strHostName = args[0];
}
// 接着使用主机名,获取IP地址列表
// 一台主机可能不只一个IP哦,不要被某些人误导了,呵呵,想想以前的163与169就知道了
IPHostEntry ipEntry = DNS.GetHostByName (strHostName);
IPAddress [] addr = ipEntry.AddressList;
for (int i = 0; i < addr.Length; i++)
{
Console.WriteLine ("IP Address {0}: {1} ", i, addr[i].ToString ());
}
return 0;
}
}
}
如果你想获得主机名,你可以使用不带参数的GetHostName方法,接着使用这个主机名作为参数交给GetHostByName方法,以获取IPAddress列表。最后是输出列表中的IP地址。
C#编程之 如何获取本地和远程主机的IP及MAC地址
利用dns类和WMI规范获取IP及MAC地址
在C#编程中,要获取主机名和主机IP地址,是比较容易的.它提供的Dns类,可以轻松的取得主机名和IP地址.

示例:
string strHostName = Dns.GetHostName(); //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
string strAddr = ipEntry.AddressList[0].ToString(); //假设本地主机为单网卡

在这段代码中使用了两个类,一个是Dns类,另一个为IPHostEntry类,二者都存在于命名空间System.Net中.
Dns类主要是从域名系统(DNS)中检索关于特定主机的信息,上面的代码第一行就从本地的DNS中检索出本地主机名.
IPHostEntry类则将一个域名系统或主机名与一组IP地址相关联,它与DNS类一起使用,用于获取主机的IP地址组.
要获取远程主机的IP地址,其方法也是大同小异.

在获取了IP地址后,如果还需要取得网卡的MAC地址,就需要进一步探究了.
这里又分两种情况,一是本机MAC地址,二是远程主机MAC地址.二者的获取是完全不同的.
在获取本机的MAC地址时,可以使用WMI规范,通过SELECT语句提取MAC地址.在.NET框架中,WMI规范的实现定义在System.Management命名空间中.
ManagementObjectSearcher类用于根据指定的查询检索管理对象的集合
ManagementObjectCollection类为管理对象的集合,下例中由检索对象返回管理对象集合赋值给它.

示例:
ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
if(mo["IPEnabled"].ToString() == "True")
mac = mo["MacAddress"].ToString();
}

获取远程主机的MAC地址时,需要借用API函数SendARP.该函数使用ARP协议,向目的主机发送ARP包,利用返回并存储在高速缓存中的IP和MAC地址对,从而获取远程主机的MAC地址.

示例:
Int32 ldest= inet_addr(remoteIP); //目的ip
Int32 lhost= inet_addr(localIP); //本地ip

try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len); //发送ARP包
return Convert.ToString(macinfo,16);
}
catch(Exception err)
{
Console.WriteLine("Error:{0}",err.Message);
}
return 0.ToString();

但使用该方式获取MAC时有一个很大的限制,就是只能获取同网段的远程主机MAC地址.因为在标准网络协议下,ARP包是不能跨网段传输的,故想通过ARP协议是无法查询跨网段设备MAC地址的。

示例程序:

using System.Net;
using System;
using System.Management;
using System.Runtime.InteropServices;

public class getIP
{
[DllImport("Iphlpapi.dll")]
private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length);
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip);

//获取本机的IP
public string getLocalIP()
{
string strHostName = Dns.GetHostName(); //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
string strAddr = ipEntry.AddressList[0].ToString();
return(strAddr);
}
//获取本机的MAC
public string getLocalMac()
{
string mac = null;
ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
if(mo["IPEnabled"].ToString() == "True")
mac = mo["MacAddress"].ToString();
}
return(mac);
}

//获取远程主机IP
public string[] getRemoteIP(string RemoteHostName)
{
IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName);
IPAddress[] IpAddr = ipEntry.AddressList;
string[] strAddr = new string[IpAddr.Length];
for (int i=0;i {
strAddr[i] = IpAddr[i].ToString();
}
return(strAddr);
}
//获取远程主机MAC
public string getRemoteMac(string localIP, string remoteIP)
{
Int32 ldest= inet_addr(remoteIP); //目的ip
Int32 lhost= inet_addr(localIP); //本地ip

try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len);
return Convert.ToString(macinfo,16);
}
catch(Exception err)
{
Console.WriteLine("Error:{0}",err.Message);
}
return 0.ToString();
}

public static void Main(string[] args)
{
getIP gi = new getIP();
Console.WriteLine("本地网卡信息:");
Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac());

Console.WriteLine("/n/r远程网卡信息:");
string[] temp = gi.getRemoteIP("scmobile-tj2");
for(int i=0;i {
Console.WriteLine(temp[i]);
}
Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"));
}
}
可以用.Net的DNS类来获取一个主机名或一个给定主机的IP地址。要想在程序中使用DNS类,就需要包含System.Net:
Include System.Net Reference
比如说想获取http://www.mindcracker.com/的IP地址,以下代码就会完成这个任务:
// Call DNS.GetHostName to get IPHostEntry and get the IP address list.
IPHostEntry ipEntry = DNS.GetHostByName ("www.mindcracker.com");
IPAddress [] IpAddr = ipEntry.AddressList;
for (int i = 0; i < IpAddr.Length; i++){
Console.WriteLine ("IP Address {0}: {1} ", i, IpAddr[i].ToString ());
}
另外,使用无参数的GetHostName可以返回本地机器的主机名:
string strHostName = DNS.GetHostName ();
然后将这个主机名作为参数传递给GetHostByName,就可以获取本地机器的IP地址信息。

⑷ 如何查询当前dns服务器的mac地址

你需要DNS的MAC地址干嘛用?好像没有什么需要用的地方......所有需要制定DNS服务器的地方都只是让你填写IP地址。

如果你需要独立的DNS,那么直接在网卡上面设定就可以了~另外如果是公众DNS的话,想探测MAC地址比较困难

⑸ 在服务器上查找网络终端计算机的MAC地址记录

MAC地址是指网卡的物理地址,是独一无二的!与电话线无关。你应该问前段时间,就是说你两台电脑一起上网的时候的两台电脑的MAC地址,然后除开A机,那剩下一个就是B机的。

⑹ 如何查看服务器MAC地址

1、按Windows键+R键呼出“运行”对话框,在对话框中输入“cmd”然后按“确定”。

⑺ 如何查看电脑的ip地址和MAC地址

例如A主机的IP地址为192.168.0.1,它现在需要与IP为192.168.0.8的主机(主机B)进行通讯,那么将进行以下动作:
A主机查询自己的ARP缓存列表,
如果发现具有对应于目的IP地址192.168.0.8的MAC地址项,则直接使用此MAC地址项构造并发送以太网数据包,如果没有发现对应的MAC地址项则继续下一步;
A主机发出ARP解析请求广播,目的MAC地址是FF:FF:FF:FF:FF:FF,请求IP为192.168.0.8的主机回复MAC地址;
B主机收到ARP解析请求广播后,回复给A主机一个ARP应答数据包,其中包含自己的IP地址和MAC地址;
A接收到B主机的ARP回复后,将B主机的MAC地址放入自己的ARP缓存列表,然后使用B主机的MAC地址作为目的MAC地址,B主机的IP地址(192.168.0.8)作为目的IP地址,
构造并发送以太网数据包;
如果A主机还要发送数据包给192.168.0.8,
由于在ARP缓存列表中已经具有IP地址192.168.0.8的MAC地址,所以A主机直接使用此MAC地址发送数据包,而不再发送ARP解析请求广播;当此缓存地址项超过两分钟没有活动(没有使用)后,此ARP缓存将超时被删除。
默认情况下ARP缓存的超时时限是两分钟,你可以在注册表中进行修改。可以修改的键值有两个,都位于
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
修改的键值:
键值1:ArpCacheLife,类型为Dword,单位为秒,默认值为120
键值2:ArpCacheMinReferencedLife,类型为Dword,单位为秒,默认值为600
注意:这些键值默认是不存在的,如果你想修改,必须自行创建;修改后重启计算机后生效。
如果ArpCacheLife的值比ArpCacheMinReferencedLife的值大,那么ARP缓存的超时时间设置为ArpCacheLife的值;如果ArpCacheLife的值不存在或者比ArpCacheMinReferencedLife的值小,那么对于未使用的ARP缓存,超时时间设置为120秒;对于正在使用的ARP缓存,超时时间则设置为ArpCacheMinReferencedLife的值。下图是我们的试验网络结构,ISA
Server作为一个边缘防火墙,内部局域网(192.168.0.0/24)通过ISA
Server接入Internet。在这个试验中,我将在ISA
Server上绑定内部客户True的IP地址192.168.0.8和MAC地址,这样,当True不在线时,另外一个内部客户Fake就算修改自己的IP地址为True的IP地址192.168.0.8,也不能通过ISA
Server来上网。
各计算机的TCP/IP设置如下,本次试验不涉及DNS解析,各服务器的DNS服务器设置为空,在试验之前已经确认了网络连接工作正常:
ISA
2004
Firewall:LAN
Interface:
IP:192.168.0.1/24
DG:None
MAC:00:03:47:F4:FC:E7

True(将离线):IP:192.168.0.8/24
DG:192.168.0.1
MAC:00:0D:60:C3:05:34

Fake(将修改IP地址为192.168.0.8):IP:192.168.0.8/24
DG:192.168.0.1
MAC:00:06:D0:06:05:47


首先,我在ISA
Server上使用ARP
-S来绑定True的IP地址和MAC地址,运行命令
ARP
-s
192.168.0.8
00-0D-60-C3-05-34
然后执行ARP
-a来查看ARP缓存列表,结果如下图所示。你可以看到在ARP缓存列表中IP地址192.168.0.8的类型为static,这表明它是静态项。此时,我们在ISA
Server上的绑定就成功了。

⑻ 如何查看本地查看电脑的IP地址和MAC地址

例如A主机的IP地址为192.168.0.1,它现在需要与IP为192.168.0.8的主机(主机B)进行通讯,那么将进行以下动作: A主机查询自己的ARP缓存列表, 如果发现具有对应于目的IP地址192.168.0.8的MAC地址项,则直接使用此MAC地址项构造并发送以太网数据包,如果没有发现对应的MAC地址项则继续下一步; A主机发出ARP解析请求广播,目的MAC地址是FF:FF:FF:FF:FF:FF,请求IP为192.168.0.8的主机回复MAC地址; B主机收到ARP解析请求广播后,回复给A主机一个ARP应答数据包,其中包含自己的IP地址和MAC地址; A接收到B主机的ARP回复后,将B主机的MAC地址放入自己的ARP缓存列表,然后使用B主机的MAC地址作为目的MAC地址,B主机的IP地址(192.168.0.8)作为目的IP地址, 构造并发送以太网数据包; 如果A主机还要发送数据包给192.168.0.8, 由于在ARP缓存列表中已经具有IP地址192.168.0.8的MAC地址,所以A主机直接使用此MAC地址发送数据包,而不再发送ARP解析请求广播;当此缓存地址项超过两分钟没有活动(没有使用)后,此ARP缓存将超时被删除。 默认情况下ARP缓存的超时时限是两分钟,你可以在注册表中进行修改。可以修改的键值有两个,都位于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 修改的键值: 键值1:ArpCacheLife,类型为Dword,单位为秒,默认值为120 键值2:ArpCacheMinReferencedLife,类型为Dword,单位为秒,默认值为600 注意:这些键值默认是不存在的,如果你想修改,必须自行创建;修改后重启计算机后生效。 如果ArpCacheLife的值比ArpCacheMinReferencedLife的值大,那么ARP缓存的超时时间设置为ArpCacheLife的值;如果ArpCacheLife的值不存在或者比ArpCacheMinReferencedLife的值小,那么对于未使用的ARP缓存,超时时间设置为120秒;对于正在使用的ARP缓存,超时时间则设置为ArpCacheMinReferencedLife的值。下图是我们的试验网络结构,ISA Server作为一个边缘防火墙,内部局域网(192.168.0.0/24)通过ISA Server接入Internet。在这个试验中,我将在ISA Server上绑定内部客户True的IP地址192.168.0.8和MAC地址,这样,当True不在线时,另外一个内部客户Fake就算修改自己的IP地址为True的IP地址192.168.0.8,也不能通过ISA Server来上网。 各计算机的TCP/IP设置如下,本次试验不涉及DNS解析,各服务器的DNS服务器设置为空,在试验之前已经确认了网络连接工作正常: ISA 2004 Firewall:LAN Interface: IP:192.168.0.1/24 DG:None MAC:00:03:47:F4:FC:E7 True(将离线):IP:192.168.0.8/24 DG:192.168.0.1 MAC:00:0D:60:C3:05:34 Fake(将修改IP地址为192.168.0.8):IP:192.168.0.8/24 DG:192.168.0.1 MAC:00:06:D0:06:05:47 首先,我在ISA Server上使用ARP -S来绑定True的IP地址和MAC地址,运行命令: ARP -s 192.168.0.8 00-0D-60-C3-05-34 然后执行ARP -a来查看ARP缓存列表,结果如下图所示。你可以看到在ARP缓存列表中IP地址192.168.0.8的类型为static,这表明它是静态项。此时,我们在ISA Server上的绑定就成功了。

阅读全文

与查找本机服务器的mac地址相关的资料

热点内容
云服务器宕机概率 浏览:227
在线买药用什么app知乎 浏览:810
ubuntu解压xz文件 浏览:674
宏杰加密时电脑关机 浏览:388
自己写单片机编译器 浏览:598
单片机按键闪烁 浏览:380
为什么icloud总是显连接服务器失败 浏览:888
如何设置域控服务器 浏览:738
想在上海租房子什么app好 浏览:184
编译程序各部分是必不可少的吗 浏览:885
编程不超过十行 浏览:763
数电编译器的作用 浏览:337
时间算法与现在有什么区别 浏览:162
7zip解压后没文件夹 浏览:903
为什么安卓送玫瑰ios收不到 浏览:8
美篇文章加密是什么意思 浏览:82
ilasm编译dll 浏览:39
呼吸灯单片机程序 浏览:954
linux域socket 浏览:250
qq分身怎么样才能加密 浏览:457