c/c++ 网络编程 UDP 主机网络信息取得
程序员文章站
2022-04-12 19:50:23
网络编程 UDP 主机网络信息取得 1,if_nametoindex 通过网卡名字取得网卡编号 2,if_indextoname 通过网卡编号取得网卡名字 "github源代码" 3,getifaddrs 取得网卡的名字,取得网卡的flags,取得IP地址,取得netmask "github源代码" ......
网络编程 udp 主机网络信息取得
1,if_nametoindex 通过网卡名字取得网卡编号
2,if_indextoname 通过网卡编号取得网卡名字
#include <stdio.h> #include <string.h> #include <net/if.h> int main(){ int index; char buf[128]; //根据名字取得编号 index = if_nametoindex("enp0s3"); if(index == 0){ perror("if_nametoindex"); return 1; } printf("index:%d\n", index); memset(buf, 0, sizeof(buf)); //根据编号取得名字 if(if_indextoname(index, buf) == null){ perror("if_indextoname"); return 1; } printf("name:%s\n", buf); return 0; }
3,getifaddrs 取得网卡的名字,取得网卡的flags,取得ip地址,取得netmask
#include <stdio.h> #include <string.h> #include <ifaddrs.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(){ ifaddrs *ifa_list; ifaddrs *ifa; int n; char addrstr[256], netmaskstr[256]; n = getifaddrs(&ifa_list); if(n != 0){ return 1; } for(ifa = ifa_list; ifa != null; ifa = ifa->ifa_next){ printf("ifa_name:%s\n", ifa->ifa_name); printf("ifa_flags: 0x%.8x\n", ifa->ifa_flags); memset(addrstr, 0, sizeof(addrstr)); memset(netmaskstr, 0, sizeof(netmaskstr)); //ipv4 if(ifa->ifa_addr->sa_family == af_inet){ //ip inet_ntop(af_inet, &((sockaddr_in*)ifa->ifa_addr)->sin_addr, addrstr, sizeof(addrstr)); //mask inet_ntop(af_inet, &((sockaddr_in*)ifa->ifa_netmask)->sin_addr, netmaskstr, sizeof(netmaskstr)); printf(" ipv4: %s netmask : %s\n", addrstr, netmaskstr); } //ipv6 else if(ifa->ifa_addr->sa_family == af_inet6){ //ip inet_ntop(af_inet6, &((sockaddr_in6*)ifa->ifa_addr)->sin6_addr, addrstr, sizeof(addrstr)); //mask inet_ntop(af_inet6, &((sockaddr_in6*)ifa->ifa_netmask)->sin6_addr, netmaskstr, sizeof(netmaskstr)); printf(" ipv6: %s netmask : %s\n", addrstr, netmaskstr); } else if(ifa->ifa_addr->sa_family == af_packet){ printf(" af_packet:%d\n", ifa->ifa_addr->sa_family); } else{ printf(" else:%d\n", ifa->ifa_addr->sa_family); } printf("\n"); } freeifaddrs(ifa_list); return 0; }