C socket實現獲取本機IP MAC

2021-06-25 20:42:33 字數 1513 閱讀 3097

#include //該標頭檔案定義了socket程式設計的功能

#include //該標頭檔案宣告了輸入輸出流函式

#include //該標頭檔案定義了一些通用函式

#include //該標頭檔案支援http請求

#include //該標頭檔案定義了windows的所有資料基本型態

#include //該標頭檔案宣告了netbios的所有的函式

#pragma comment(lib,"ws2_32.lib")          //連線ws2_32.lib庫.只要程式中用到winsock api 函式,都要用到 ws2_32.lib

#pragma comment(lib,"netapi32.lib")        //連線netapi32.lib庫,mac獲取中用到了netapi32.dll的功能

using namespace system;

//通過windowsnt/win2000中內建的netapi32.dll的功能來實現的。首先通過傳送ncbenum命令,獲取網絡卡的

//數目和每張網絡卡的內部編號,然後對每個網絡卡標號傳送ncbastat命令獲取其mac位址。

int getmac(char * mac)                    //用netapi來獲取網絡卡mac位址

astat, *pastat;

astat adapter;  

typedef struct _lana_enum    

lana_enum;    

lana_enum lana_enum;  

//取得網絡卡資訊列表    

uchar uretcode;    

memset(&ncb, 0, sizeof(ncb));             //將已開闢記憶體空間ncb 的值均設為值 0

memset(&lana_enum, 0, sizeof(lana_enum));                //清空乙個結構型別的變數lana_enum,賦值為0

//對結構體變數ncb賦值

ncb.ncb_command = ncbenum;           //統計系統中網絡卡的數量

ncb.ncb_buffer = (unsigned char *)&lana_enum;                   //ncb_buffer成員指向由lana_enum結構填充的緩衝區

ncb.ncb_length = sizeof(lana_enum);  

//向網絡卡傳送ncbenum命令,以獲取當前機器的網絡卡資訊,如有多少個網絡卡,每個網絡卡的編號(mac位址)

uretcode = netbios(&ncb);              //呼叫netbois(ncb)獲取網絡卡序列號   

if(uretcode != nrc_goodret)    

return uretcode;    

//對每乙個網絡卡,以其網絡卡編號為輸入編號,獲取其mac位址  

for(int lana=0; lana

int main()

獲取本機IP

獲取本機ip char name 255 gethostname name,sizeof name cstring ip lphostent lphost lphost gethostbyname name in addr ppaddr in addr lphost h addr list in a...

獲取本機IP位址

cstring strlocalip char szhostname 64 memset szhostname,0x00,sizeof szhostname gethostname szhostname,sizeof szhostname phostent phost gethostbyname s...

獲取本機IP位址

第一步 載入winsock2靜態鏈結庫檔案。include pragma comment lib,ws2 32.lib bool loadwinsock 第二步 獲取本地的主機名稱。hostent phostent null char szhostname 256 memset szhostname...