本地網絡卡資訊獲取的 方法

2021-07-02 03:04:56 字數 1993 閱讀 3011

一、通過流套接字去底層獲取:

1、建立流套接字;

2、使用ioctl()和獲取匹配指定的巨集獲取 指定的資訊;

3、取出資訊進行儲存 和 使用。

intnetgetmac(char *pinte***ce, unsigned char *pmac);

//建立與底層互動的套接字

if((sockfd =socket(asf_inet, sock_stream, 0)) < 0)

strcpy(ifreq.ifr_name, pinte***ce);

通過ioctl()獲取指定資訊

if(icotl(sockfd,siocgifhwaddr, &ifreq) < 0)

//儲存資訊

memcpy(mac, ifreq.ifr_hwaddr.sa_data, 6);

printf("mac:02x-02x-02x-02x-02x-02x\n");

if(null != pmac)

close(sockfd);

return 0;

}intnetgetip(char *inte***ce, unsigned int *ip)

memset(&ifr, 0, sizeof(ifr));

strncpy(ifr.ifr_name, inte***ce, ifnamsiz);

//建立與底層互動的套接字

sockfd =socket(af_inet, sock_dgram, 0);

if(sockfd <= 0)

((struct sockaddr_in *)&ifr.ifr_addr)->sin_family = pf_inet;

通過ioctl()獲取指定資訊

if(ioctl(sockfd,siocgifaddr, &ifr) < 0)

else

close(sockfd);

return 0;

}方法二:使用getifaddrs(&ifaddr)

getifaddrs(&ifaddr) 必須與 freeifaddrs(ifaddr);配套使用

int getincinfo()

{struct

ifaddrs *ifaddr =null, *ifa = null; 

if(getifaddrs(&ifaddr) == -1)   

for(ifa = ifaddr; ifa != null; ifa = ifa->ifa_next) 

return 0; }

struct ifaddrs 

ifa_ifu; 

#define              ifa_broadaddr ifa_ifu.ifu_broadaddr 

#define              ifa_dstaddr   ifa_ifu.ifu_dstaddr 

void            *ifa_data;    /* address-specific data */ 

}; 

在linux環境下,結構體struct sockaddr在/usr/include/linux/socket.h中定義,具體如下:

typedef unsigned short sa_family_t;

struct sockaddr ;

struct sockaddr是通用的套接字位址,而struct sockaddr_in則是internet環境下套接字的位址形式,

二者長度一樣,都是16個位元組。二者是並列結構,指向sockaddr_in結構的指標也可以指向sockaddr。一般情況下,需要把sockaddr_in結構強制轉換成sockaddr結構再傳入系統呼叫函式中。

本地網絡卡失而復得

我總結了一下具體恢復的步驟 1 以管理員許可權執行cmd,輸入指令 sfc scannow 進行掃瞄修復 檢查資源是否衝突 2 以管理員許可權執行cmd,輸入指令 regsvr32 netshell.dll regsvr32 netcfx.dll regsvr32 netman.dll 進行註冊與網...

Qt下如何獲得本地網絡卡IP

include include include include getipv4 getipv4 qtextcodec setcodecforcstrings qtextcodec codecforname utf 8 qlistvaddresslist qnetworkinte ce alladdr...

設定本地網絡卡IP位址的批處理

這是乙個很好用的批處理命令集,可以設定自動獲得,可以手動設定,可以預先設定好後儲存。方案1 set a num 1 set project num 測試網路 set nname lan num 本地連線 set addr lan num 192.168.0.142 set mask lan num ...