一、通過流套接字去底層獲取:
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 ...