linux 获取本机的所有IP地址
生活随笔
收集整理的這篇文章主要介紹了
linux 获取本机的所有IP地址
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
linux下獲取本地的ip地址,我這里只介紹一種,親測有效,包括你虛擬出來的IP地址也可以顯示出來。
先說一下可能大家都有聽過的使用 gethostname 函數和 gethostbyname 函數獲得本機的IP地址,其實獲得的是127.0.0.1,是一個回環的地址。而不是真正的本機IP地址。
示例代碼:
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <net/if.h> #include <net/if_arp.h> #include <arpa/inet.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netdb.h> #include <netinet/in.h> #include <linux/sockios.h> #include <ifaddrs.h>int GetIP_v4_and_v6_linux(int family,char *address,int size) {struct ifaddrs *ifap0,*ifap;char buf[NI_MAXHOST];struct sockaddr_in *addr4;struct sockaddr_in6 *addr6;int ret;if(NULL == address){printf("in address"); return -1;} //getifaddrs可以獲取到本地所以得網卡名字,可以打印出來看看if(getifaddrs(&ifap0)){return -1;}for(ifap = ifap0;ifap!=NULL;ifap=ifap->ifa_next){if(ifap->ifa_addr == NULL) continue;if((ifap->ifa_flags & IFF_UP) == 0) continue; //協議簇好像不只是v4 v6還有個packet什么的 ,好像是原始套接字,沒特別注意if(family!=ifap->ifa_addr->sa_family) continue;if(AF_INET == ifap->ifa_addr->sa_family){ addr4 = (struct sockaddr_in *)ifap->ifa_addr; //講網絡字節序轉換成點分十進制 if(NULL != inet_ntop(ifap->ifa_addr->sa_family,(void *)&(addr4->sin_addr),buf,NI_MAXHOST)){if(size <=strlen(buf)) break;strcpy(address,buf);printf("address %s\n",address);}else break;}else if(AF_INET6 == ifap->ifa_addr->sa_family)//這里就是v6的版本,其實是一樣的{addr6 = (struct sockaddr_in6*) ifap->ifa_addr;if(IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr)){continue;}if(IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)){continue;}if(IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr)){continue;}if(IN6_IS_ADDR_UNSPECIFIED(&addr6->sin6_addr)){continue;}if(IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr)){continue;}if(NULL != inet_ntop(ifap->ifa_addr->sa_family,(void *)&(addr6->sin6_addr),buf,NI_MAXHOST)){if(size <= strlen(buf)) break;strcpy(address,buf);printf("address %s\n",address);}else break; } }freeifaddrs(ifap0);return -1; } int main(void) {char ip_addr[16];char *ip ;ip= ip_addr;GetIP_v4_and_v6_linux(AF_INET,ip,16);printf("ip addrss %s\n", ip);}總結
以上是生活随笔為你收集整理的linux 获取本机的所有IP地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js ie 6,7,8 使用不了 fir
- 下一篇: [转]Create Custom Exc