linux獲取MAC位址程式設計

2021-07-04 09:01:02 字數 2392 閱讀 7166

**:

1、ifconfig -a 其中 hwaddr欄位就是mac位址

2、cat /sys/class/net/eth0/address 

檢視eth0的mac位址

3、cat /proc/net/arp 檢視連線到本機的遠端ip的mac位址

4、程式中使用

siocgifhwaddr

的ioctl命令獲取mac位址

mac位址是唯一的,可以用來識別不同的硬體機。下面講述如何在linux下獲取自身的mac位址。

在linux下編寫獲取本機網絡卡位址的程式,比較簡單的方法是利用套介面(socket)和io介面(ioctl)函式來獲取網絡卡資訊,需要引用如下檔案:

#include 

#include 

#include 

#include 

#include 

socket函式的原型是:

int socket(int domain,int type, int protocol)

引數:domain引數:表示所使用的協議族;

type引數:表示套介面的型別;

protocol引數:表示所使用的協議族中某個特定的協議。

返回值:

如果函式呼叫成功,套介面的描述符(非負整數)就作為函式的返回值,假如返回值為-1,就表明有錯誤發生。

利用socket函式來獲取網絡卡mac資訊時,domain引數取值af_inet,表示採用internet協議族;type引數指定為sock_dgram,表示採用資料報型別套介面,也可以使用sock_stream,protocol引數在這種組合下只有唯一選擇,故用0填充。

i/o控制函式ioctl用於對檔案進行底層控制,這裡的檔案包含網絡卡、終端、磁帶機、套介面等軟硬體設施,實際的操作來自各個裝置自己提供的ioctl介面。ioctl函式的原型如下:

int ioctl(int d,int request,…)

這裡,引數d取值套介面的描述符,第乙個request引數指定通過socket傳輸的i/o型別。本實驗可以取值 

siocgifhwaddr(0x8927),表示取硬體位址。其他取值及其含義詳見/usr/include/linux/sockios.h

。其後的 request引數用於為實現i/o控制所必須傳入或傳出的引數。本實驗需要用ifr結構傳入網絡卡裝置名,並傳出6b的mac位址。

下面示例獲取本機mac位址並列印出來:

#include

#include

#include

#include

#include

#include

#include

void main(void)

} 例項二:

#include   #include   

#include

#include

in.h>#include

if.h>#include

int main(int argc, char *argv)

if((sock=socket(af_inet,sock_stream,0)) <0

)

strcpy(ifreq.ifr_name,argv[

1]);

if(ioctl(sock,siocgifhwaddr,&ifreq) <0

)

printf(

"%02x:%02x:%02x:%02x:%02x:%02x\n ",

(unsigned

char)ifreq.ifr_hwaddr.sa_data[0

], (unsigned

char)ifreq.ifr_hwaddr.sa_data[1

], (unsigned

char)ifreq.ifr_hwaddr.sa_data[2

], (unsigned

char)ifreq.ifr_hwaddr.sa_data[3

], (unsigned

char)ifreq.ifr_hwaddr.sa_data[4

], (unsigned

char)ifreq.ifr_hwaddr.sa_data[5

]); 

return 0;

}

在設置mac位址之前,要先把網絡卡down掉,設定好了以後,再up起來

獲取MAC位址

簡單的辦法是在控制台輸入ping 目標ip,然後用 arp a 來檢視.或者下面的 記下來以備後用 private declare function inet addr function inet addr lib wsock32.dll byval s as string as int32 pri...

LINUX下獲取IP位址和MAC位址

include include include include include include include include ifdef solaris include endif define maxinte ces 16 main argc,argv register int argc reg...

LINUX下獲取IP位址和MAC位址

判斷網絡卡狀態 if buf int ce ifr flags iff up else 獲取當前網絡卡的ip位址 if ioctl fd,siocgifaddr,char buf int ce else this section can t get hardware address,i don t ...