日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 获取本机的所有IP地址

發布時間:2025/3/15 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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地址的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。