获取本机网卡信息
/*獲取本地ip地址,子網掩碼,默認網關,mac地址,網絡適配器信息,hostname,域名dns,網絡接口信息*/ #include<WinSock2.h> #include<IPHlpApi.h> #include<stdio.h>#pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"iphlpapi.lib")void main() {/*typedef struct _IP_ADAPTER_INFO {struct _IP_ADAPTER_INFO* Next;DWORD ComboIndex;char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];UINT AddressLength;BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];DWORD Index;UINT Type;UINT DhcpEnabled;PIP_ADDR_STRING CurrentIpAddress;IP_ADDR_STRING IpAddressList;IP_ADDR_STRING GatewayList;IP_ADDR_STRING DhcpServer;BOOL HaveWins;IP_ADDR_STRING PrimaryWinsServer;IP_ADDR_STRING SecondaryWinsServer;time_t LeaseObtained;time_t LeaseExpires; } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;*/IP_ADAPTER_INFO* pAdapterInfo;PIP_ADAPTER_INFO pAdapter;ULONG bufferLength;DWORD status;pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));bufferLength = sizeof(IP_ADAPTER_INFO);//根據該函數先故意失敗獲取,得到鏈表真正大小if (GetAdaptersInfo(pAdapterInfo, &bufferLength)!=ERROR_SUCCESS){free(pAdapterInfo);pAdapterInfo = (IP_ADAPTER_INFO*)malloc(bufferLength);}//獲取網卡信息結構體第一個節點.if (GetAdaptersInfo(pAdapterInfo, &bufferLength) != ERROR_SUCCESS){printf("error\n");}//因為網卡之間鏈接成一個單鏈表,通過一個指針遍歷該鏈表pAdapter = pAdapterInfo;while (pAdapter){printf("網卡名: %s\n", pAdapter->AdapterName);printf("網卡描述: %s\n", pAdapter->Description);printf("網卡MAC地址: ");for (int i = 0; i < pAdapter->AddressLength; i++){if (i == (pAdapter->AddressLength - 1))printf("%.2x\n", (int)pAdapter->Address[i]);elseprintf("%.2x-", (int)pAdapter->Address[i]);}printf("ip地址: %s\n", pAdapter->IpAddressList.IpAddress.String);printf("子網掩碼: %s\n", pAdapter->IpAddressList.IpMask.String);printf("網關: %s\n", pAdapter->GatewayList.IpAddress.String);if (pAdapter->DhcpEnabled){printf("啟用DHCP: 是\n");printf("DHCP服務器地址: %s\n\n", pAdapter->DhcpServer.IpAddress.String);}else{printf("啟用DHCP: 否\n\n");}pAdapter = pAdapter->Next;}if (pAdapterInfo)free(pAdapterInfo);getchar();}
?
?
?
獲取dns相關信息:
#include<WinSock2.h> #include<IPHlpApi.h> #include<stdio.h>#pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"iphlpapi.lib")void main() { ULONG bufferLength;DWORD status;FIXED_INFO* fixedInfo;IP_ADDR_STRING* pIpAddr;/*typedef struct {char HostName[MAX_HOSTNAME_LEN + 4] ;char DomainName[MAX_DOMAIN_NAME_LEN + 4];PIP_ADDR_STRING CurrentDnsServer;IP_ADDR_STRING DnsServerList;UINT NodeType;char ScopeId[MAX_SCOPE_ID_LEN + 4];UINT EnableRouting;UINT EnableProxy;UINT EnableDns;} FIXED_INFO_W2KSP1, *PFIXED_INFO_W2KSP1;*/fixedInfo = (FIXED_INFO*)GlobalAlloc(GPTR, sizeof(FIXED_INFO));bufferLength = sizeof(FIXED_INFO);if (ERROR_BUFFER_OVERFLOW == GetNetworkParams(fixedInfo, &bufferLength)){GlobalFree(fixedInfo);fixedInfo = (FIXED_INFO*)GlobalAlloc(GPTR, sizeof(FIXED_INFO));}if (GetNetworkParams(fixedInfo, &bufferLength) != ERROR_SUCCESS){printf("error\n");}else{printf("主機名: %s\n", fixedInfo->HostName);printf("域名: %s\n", fixedInfo->HostName);char* nodeType;switch (fixedInfo->NodeType){case BROADCAST_NODETYPE:nodeType = "broadcase node";break;case PEER_TO_PEER_NODETYPE:nodeType = "peertopeer node";break;case MIXED_NODETYPE:nodeType = "mixed node";break;case HYBRID_NODETYPE:nodeType = "hybrid node";break;default:nodeType = "unkowntype node";break;}printf("節點類型 %d - %s\n", fixedInfo->NodeType, nodeType);printf("是否啟用路由功能 %s\n", fixedInfo->EnableRouting ? "是" : "否");printf("是否啟用arp代理功能 %s\n", fixedInfo->EnableProxy ? "是" : "否");printf("是否啟用dns服務器 %s\n", fixedInfo->EnableDns ? "是" : "否");printf("dns服務器列表\n");printf("%s\n", fixedInfo->DnsServerList.IpAddress.String);pIpAddr = fixedInfo->DnsServerList.Next;while (pIpAddr){printf("%s\n", pIpAddr->IpAddress.String);pIpAddr = pIpAddr->Next;}}getchar();}?
獲取網絡接口數量API: GetNumberOfInterfaces(pdwNumIf)
轉載于:https://www.cnblogs.com/freesec/p/6193957.html
總結
- 上一篇: hihoCoder太阁最新面经算法竞赛1
- 下一篇: ************起步科技****