linux C如何获取服务器节点上所有网口的ip地址

http://blog.csdn.net/weiyuefei/article/details/22198659

 之前项目原因,需要获取当前服务器节点上所有网口的ip地址,但是当时由于时间比较紧,一直没搞出来,最近没那么忙了,又在网上找了一下,终于实现了这一个功能,因此记录下来,以备不时之需。

    这种获取所有ip的方法主要是通过遍历所有网口信息而获取的,即首先通过函数ioctl获取所有网口的信息,然后再逐一遍历每个网口,解析出网口对应的ip地址。下面是实现代码是经过验证的。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/types.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>

//获取地址
//返回IP地址字符串
//返回:0=成功,-1=失败
int get_all_localip()
{
 int i = 0;
 int sockfd;
 struct ifconf ifconf;
 char buf[512];
 struct ifreq *ifreq;
 char *ip;
 //初始化ifconf
 ifconf.ifc_len = 512;
 ifconf.ifc_buf = buf;

 if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
 {
  return -1;
 }

 ioctl(sockfd, SIOCGIFCONF, &ifconf);    //获取所有接口信息
 close(sockfd);
 
 //接下来一个一个的获取IP地址
 ifreq = (struct ifreq*)buf;
 for(i = (ifconf.ifc_len / sizeof(struct ifreq)); i > 0; i--)
 {
  ip = inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr);
  if(strcmp(ip,"127.0.0.1") == 0)  //排除127.0.0.1,继续下一个
  {
   ifreq++;
   continue;
  }

  printf("IP地址: %s\n", ip);
  ip = NULL;
  ifreq++;
 }

 return 0;
}

int main() {

 get_all_localip();
 return 0;
}

 

以上参考:http://zhumeng8337797.blog.163.com/blog/static/1007689142012311082638/


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU1573-模线性方程

模线性方程的模板题。&#xff08;卡了一会&#xff0c;发现读入弄错了&#xff09; #include<cstdio> #include<cstring> #include<algorithm> #include<climits> #include<cmath> #include<cstdlib> #include<ctime> #include<…

java中引用传递

基本概念 栈内存 所谓的栈内存就是存储进程在运行过程中变量的内存空间 堆内存 所谓的堆内存就是存储系统中数据的内存空间 数组相关的引用传递 先来看一段代码 public class ArrayDemo {public static void main(String[] args) {int[] x null;x new int[3];System.o…

(原创)C++11改进我们的程序之右值引用

http://www.cnblogs.com/qicosmos/p/3369940.html 本次主要讲c11中的右值引用&#xff0c;后面还会讲到右值引用如何结合std::move优化我们的程序。 c11增加了一个新的类型&#xff0c;称作右值引用(R-value reference)&#xff0c;标记为T &&&#xff0c;说到右值引用…

(原创)C++11改进我们的程序之move和完美转发

http://www.cnblogs.com/qicosmos/p/3376241.html 本次要讲的是右值引用相关的几个函数&#xff1a;std::move, std::forward和成员的emplace_back&#xff0c;通过这些函数我们可以避免不必要的拷贝&#xff0c;提高程序性能。move是将对象的状态或者所有权从一个对象转移到另…

微型个人博客服务器

Http相关简介 Http是应用层的基于请求响应的一个协议, 其中Http的请求响应可以分为四部分. 请求行, 请求报头,空行, 请求正文.其中请求行包括了请求方法, url, 版本号, 请求报头包括请求属性, 冒分割的键值对, 每组属性之间都以换行的形式分开, 最后一空行作为请求的结束标识.…

HDU6428-Calculate-数论函数

并不知道为什么同样一份代码早上超时下午就A了…好像数据是随机的? 做的第一道不是简单板题的数论函数题.果然做不出来… 在网上研究了好久,才算稍微研究明白.看到了两种推导的思路.(写了半天发现讲起来好麻烦,有时间再来更新) #include<cstdio> #include<cstring&g…

[C/C++]关于C++11中的std::move和std::forward

http://blog.sina.com.cn/s/blog_53b7ddf00101p5t0.htmlstd::move是一个用于提示优化的函数&#xff0c;过去的c98中&#xff0c;由于无法将作为右值的临时变量从左值当中区别出来&#xff0c;所以程序运行时有大量临时变量白白的创建后又立刻销毁&#xff0c;其中又尤其是返回…

BZOJ3930-莫比乌斯反演+杜教筛

题目的意思很简单&#xff0c;求给定区间内的gcdk的个数&#xff0c;这应该是传统的莫比乌斯反演了。 有两种思路&#xff0c;一种是直接将里面变成gcd1&#xff0c;然后里面看作元函数用莫比乌斯函数和恒等函数展开&#xff0c;然后改变求和顺序。 还有一种是构造两个函数&…

HDU1999不可摸数-暴力打表

看到这约数和第一反应是约数和函数&#xff0c;然后仔细一看不是正经的约数和函数&#xff0c;就去推去了&#xff0c;然后推的有点小复杂。&#xff08;数论函数那部分做多了&#xff09; 然后观察也没有用到什么数论部分的特殊知识啊&#xff0c;难不成真的要暴力&#xff1f…

BZOJ2818-莫比乌斯反演/欧拉函数

这道题之前没有看数论函数的时候搞懂了,想到直接用欧拉函数做,现在再来看第一个想法就是这不是莫比乌斯反演嘛. 但还是能用简单数论知识直接做出来的还是尽量做简单一点. 两种方法想到后都写的差不多对了,都爆long long 了.万恶的long long .实在是烦.切记切记,只要是乘积,或…

epoll用法整理 实现回声服务端

http://blog.csdn.net/chenxun_2010/article/details/504934811、epoll是什么&#xff1f; epoll是当前在Linux下开发大规模并发网络程序的热门人选&#xff0c;epoll 在Linux2.6内核中正式引入&#xff0c;和select相似&#xff0c;都是I/O多路复用(IO multiplexing)技术。 Li…

HDU3430-扩展中国剩余定理

刚开始一直把题意看错了。。。体测完智商急剧下降 正确理解题意以后自己写一直wa&#xff0c;而且并不知道是哪里的问题&#xff0c;在网上看了一下其他人写的改了改自己的就过了&#xff0c;可是之前的还是不知道为什么不对。 题意大概就是有一个置换群&#xff0c;问运算多…

linux shell编程多线程和wait命令学习

http://blog.csdn.net/shuanghujushi/article/details/38186303最近在使用shell做一些部署工作&#xff0c;在使用过程中&#xff0c;效率一直不高。想提高效率&#xff0c;经过分析发现&#xff0c;并不是所有操作都是需要串行的&#xff0c;一些操作是可以进行并行操作的。经…

#ifndef的作用

#ifndef是一条预编译指令&#xff0c;就是说实在编译的时候就会运行的指令。这个指令的作用很简单&#xff0c;就是字面意思&#xff0c;如果没有定义的话&#xff0c;但是却经常使用。 因为使用这个可以避免一个源文件中两次两次包含同一个文件&#xff0c;或者一个工程文件中…

C++中结构体和类的区别和联系

最主要的不同点就是结构体的访问权限为public而且不能改变&#xff0c;而类的访问权限可以改变&#xff0c;public的类和结构体基本一样。 继承上同样表现出这样的特点&#xff0c;struct是public继承的&#xff0c;而class是private继承的&#xff0c;继承的子类的访问权限取…

poll函数实现多路复用

http://blog.csdn.net/xluren/article/details/8206371 结构体pollfd struct pollfd { int fd; //file descriptor short event; //event of interest on fd short reven; //event that occurred on fd } 每一个pollfd结构体指定了一个被监视的文件描述符&…

抽象类(纯虚函数、虚函数)和虚基类(虚继承)

C多态 C的多态包括静态多态和动态多态&#xff0c;静态多态包括函数重载和泛型编程&#xff0c;动态多态包括虚函数。静态多态实在编译期间就能确定&#xff0c;动态多态实直在程序运行时才能确定。 抽象类 虚函数 在默认情况下对函数成员调用实施的是静态连编&#xff0c;…

socket通信之最简单的socket通信

http://blog.csdn.net/xluren/article/details/8043484#t15 套接字有三种类型 流式套接字&#xff08;SOCK_STREAM&#xff09;&#xff0c;数据报套接字&#xff08;SOCK_DGRAM&#xff09;及原始套接字。 1.流式套接字提供面向连接、可靠的数据传输服务&#xff0c;数据按字节…

Java环境配置

自己安装的时候按照一般的安装方法先配置了JDK的环境&#xff0c;能够成功显示java版本后我在安装eclipse的时候一直提示错误&#xff1a; Unfortunately the Java version needed to run Eclipse Installer couldn’t be found on your system. You need the following versio…

Linux I/O复用之select函数详解

http://blog.csdn.net/y396397735/article/details/55004775 select函数的功能和调用顺序 使用select函数时统一监视多个文件描述符的&#xff1a; 1、 是否存在套接字接收数据&#xff1f; 2、 无需阻塞传输数据的套接字有哪些? 3、 哪些套接字发生了异常&#xff1f; sel…