導航:首頁 > 配伺服器 > 查找本機伺服器的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地址相關的資料

熱點內容
建築考二建刷視頻用什麼app 瀏覽:233
取消紙質文件夾密碼 瀏覽:769
程序員級別提升 瀏覽:432
編譯運行後停止工作 瀏覽:779
白虎通pdf 瀏覽:673
linux開啟關閉埠 瀏覽:228
單片機加一個晶元 瀏覽:723
vs編譯方式 瀏覽:211
安卓的掌盟盒子可以查什麼 瀏覽:864
上下學app有什麼好處 瀏覽:363
程序員做信貸項目的好跳槽嗎 瀏覽:252
粘土伺服器的禮盒為什麼開不了 瀏覽:506
樂高機器人pdf 瀏覽:863
退出scala命令 瀏覽:366
不管什麼情況下軍人必須服從命令 瀏覽:267
雲計算和伺服器模式有什麼區別 瀏覽:524
s型增長速率演算法 瀏覽:978
c語言迷宮演算法入門 瀏覽:241
android列表動畫 瀏覽:362
外企演算法面試 瀏覽:321