2
A
回答
3
在使用IPHelper窗口。
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */
int __cdecl main()
{
PIP_ADAPTER_INFO pAdapterInfo;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
printf("\tIP Mask: \t%s\n", pAdapterInfo->IpAddressList.IpMask.String);
}
if (pAdapterInfo)
FREE(pAdapterInfo);
return 0;
}
5
在Unix的使用getifaddrs
struct ifaddrs
富人名爲ifa_netmask
(接口的網絡掩碼)構件
#include <arpa/inet.h>
#include <sys/socket.h>
#include <ifaddrs.h>
#include <stdio.h>
int main()
{
struct ifaddrs *ifap, *ifa;
struct sockaddr_in *sa;
char *addr;
getifaddrs (&ifap);
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
if (ifa->ifa_addr->sa_family==AF_INET) {
sa = (struct sockaddr_in *) ifa->ifa_netmask;
addr = inet_ntoa(sa->sin_addr);
printf("Interface: %s\tAddress: %s\n", ifa->ifa_name, addr);
}
}
freeifaddrs(ifap);
return 0;
}
輸出
Interface: lo Address: 255.0.0.0
Interface: eth0 Address: 255.255.255.0
2
從Linux手冊頁
借來的代碼,並從Keine Lust簡稱代碼:
#define _GNU_SOURCE /* To get defns of NI_MAXSERV and NI_MAXHOST */
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#include <ifaddrs.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/if_link.h>
#include <string.h> /* strcasecmp() */
int get_addr_and_netmask_using_ifaddrs(const char* ifa_name,
char *addr, char *netmask)
{
struct ifaddrs *ifap, *ifa;
struct sockaddr_in *sa;
char *s;
int found = 0;
if (getifaddrs(&ifap) == -1) {
perror("getifaddrs");
exit(EXIT_FAILURE);
}
for (ifa = ifap; ifa && !found; ifa = ifa->ifa_next) {
if (ifa->ifa_addr == NULL)
continue;
if (strcasecmp(ifa_name, ifa->ifa_name))
continue;
/* IPv4 */
if (ifa->ifa_addr->sa_family != AF_INET)
continue;
sa = (struct sockaddr_in *) ifa->ifa_addr;
s = inet_ntoa(sa->sin_addr);
strcpy(addr, s);
sa = (struct sockaddr_in *) ifa->ifa_netmask;
s = inet_ntoa(sa->sin_addr);
strcpy(netmask, s);
found = 1;
}
freeifaddrs(ifap);
if (found)
return EXIT_SUCCESS;
return EXIT_FAILURE;
}
int main(void)
{
char *addr = malloc(NI_MAXHOST);
char *netmask = malloc(NI_MAXHOST);
if (!get_addr_and_netmask_using_ifaddrs ("enp6s0", addr, netmask))
printf("[%s]%s %s\n", __func__, addr, netmask);
else
printf("interface error.\n");
free(addr);
free(netmask);
return 0;
}
相關問題
- 1. 獲取在c#
- 2. 在C#中獲取System.InvalidCastException
- 3. 在C#中獲取SHA-256#
- 4. 在c中獲取Header GET#
- 5. 在C中獲取方法#
- 6. RegExpr在C#中獲取值
- 7. 在C++中獲取錯誤
- 8. 在C/C++中獲取網關地址
- 9. 如何在C/C++中獲取HTML
- 10. 在C/C++中獲取圖像?
- 11. 在C#中GridView中獲取boundfield的值#
- 12. 在C#中獲取iframe元素#
- 13. 在C中獲取項目的路徑#
- 14. 在C#中獲取網址值mvc
- 15. 在C#列表中獲取最大值#
- 16. 如何在C#中獲取IP範圍?
- 17. openCV在C中獲取子圖像
- 18. 獲取字節[]從在C++中的char *
- 19. 獲取域名在C#中的URL/.NET
- 20. 在C中獲取SOAP請求#
- 21. 如何在C#中獲取進程CurrentThreadId?
- 22. 在C++中獲取twitter #hashtag帖子
- 23. 在C#中獲取Tfs通知/提醒#
- 24. 在C中獲取多個字體#
- 25. 在C++中獲取對象ID
- 26. 在Python中獲取返回值C API
- 27. 在C中獲取數據集信息#
- 28. 在C++中獲取「範圍」錯誤
- 29. NSOpenPanel在Objective-C中獲取文件名?
- 30. 在Twitterizer中獲取趨勢C#