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地址相关推荐

  1. 获取本机的真实IP地址

    Code: import java.net.InetAddress; import java.net.UnknownHostException; /** * 获取本机的真实IP地址.<br> ...

  2. LabVIEW 获取本机多个ip地址

    图 1 网上见了好多设置的,都没讲清楚,在这里整理一下本机ip地址的获取问题.关键在"字符串向ip地址转换"函数的设置上面,见下图2,选择多输出就能获取本机的多个ip地址,若不选多 ...

  3. php获取本机内网ip地址

    内网ip只能用于内部通信,而不能与其它网络互连.在tcp/ip协议中,专门保留了三个网段作为私有网段地址.分别如下: 10.0.0.0/8: 10.0.0.0~10.255.255.255 172.1 ...

  4. qt准确获取本机mac和ip地址

    前言 公司服务器有多个mac地址,是用网上的代码获取时总是不准确,只能自己封装一下.qt通过QNetworkInterface类来获取网络接口的各种信息,我是通过解析QNetworkInterface ...

  5. C# 网络编程之获取本机名、ip地址、域名、物理位置

    在C#网络编程中,主机域名与ip之间能相互转换,同时DNS中有Dns类.IPHostEntry类.IPAddress类.DnsPermission类实现DNS的一些简单功能. 下面主要讲述一个C#的W ...

  6. C#获取本机名及IP地址

    using System; using System.Collections.Generic; using System.Text; using System.Net; //需要引用.Net命名空间n ...

  7. linux获取路由器wan口的ip地址,如何查看wan口ip地址_wan口ip地址怎么查?-192路由网...

    问:如何查看路由器WAN口IP地址? 答:这个问题其实很简单,要查看路由器WAN口的IP地址,只需要登录到路由器的设置页面,找到"WAN口设置"."上网设置"选 ...

  8. c#中如何获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存...

    我们在利用C#开发桌面程序(Winform)程序的时候, 经常需要获取一些跟系统相关的信息, 以下这些代码获取能有些用处. c#中如何获取本机用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统 ...

  9. netstat获取本机监听的地址列表 —— *链表实现*(sudo netstat -nl | grep -w tcp | awk '{print $4}')

    问题描述: 获取本机监听的地址列表中,协议类型为tcp的端口.(sudo netstat -nl | grep -w tcp) 知识填充: 在linux一般使用netstat 来查看系统端口使用情况步 ...

最新文章

  1. 30岁暂别职场、40岁提前退休:不上班的生活,开心吗?
  2. webloigc12服务启动不了_一键启动知多少!
  3. 每日文献:2018-01-11
  4. 【动态规划】石子合并 (ssl 2863)
  5. 遭银行账号诈骗最快最有效自救法
  6. C# 联合查询_c# 之linq——小白入门级
  7. Windows Server_2008下搭建个人下载服务器(FTP)
  8. c语言第一次作业程序题pta,c语言第一次作业程序题pta
  9. ipq806X的猜想
  10. 基于单片机的音乐盒系统设计(#0435)
  11. 产出投入表结构类型的介绍
  12. 系统端口被占用解决方法
  13. install package vif包_Go Lang 开发笔记《Golang的包管理》
  14. Unity SteamVR报错问题却影响运行的记录(Log path could not be located (112)“)
  15. mysql 查询 写入 性能极致优化 3000万数据3分钟 深层次优化大数据量
  16. Spring Boot框架入门到进阶教程(自学版)
  17. OpenBmc开发错误6:gyp ERR! configure error gyp ERR! stack Error: socket hang up
  18. 换脸上阵的路由界新面孔,联想云路由动手玩
  19. 缓冲技术之二:缓冲池BufferPool的简单实现
  20. 当今安全领域面试的几大怪现状

热门文章

  1. 强烈推荐:给去美国的新生说几句(转载),超实用
  2. Canvas X Draw for Mac7.0.2英文版
  3. AE快速景深模糊插件:Rowbyte Fast Bokeh for Mac
  4. motionVFX mRevealer Glitch Mac(fcpx插件:30个故障干扰马赛克毛刺失真特效)
  5. visual studio code怎么改成中文?Visual Studio Code Insiders for Mac中文修复版
  6. Keil | 使用Register Windows测量函数的执行时间
  7. date对象 java_Java_按照指定的日期创建 Date对象
  8. sparkstreaming 读取mysql_SparkStreaming读取Kafka的两种方式
  9. Java工作笔记-Spring boot中配置文件加密(Jasypt的使用)
  10. Java文档阅读笔记-JDBC Driver