获取linux内核所有ip
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,获取linux内核所有ip(C语言)经常遇到获取接口ip。记录一下,方便后续使用。#include #include #include #include #include #include #incl
千家信息网最后更新 2025年01月20日获取linux内核所有ip
获取linux内核所有ip(C语言)
经常遇到获取接口ip。记录一下,方便后续使用。
#include #include #include #include #include #include #include #include typedef unsigned int sf_uint32_t;typedef unsigned int in_addr_t;static inline char* print_ip1(sf_uint32_t ip){ unsigned char* ip_tmp = (unsigned char*) &ip; static char buff[20]; memset(buff ,0 ,sizeof(buff)); snprintf(buff, sizeof(buff), "%d.%d.%d.%d", ip_tmp[0], ip_tmp[1], ip_tmp[2], ip_tmp[3]); return buff;}in_addr_tget_myaddr(void){ int sd, i, lastlen = 0; struct ifconf ifc; struct ifreq *ifrp = NULL; in_addr_t addr; char *buf = NULL; if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { return 0; } /* * Cope with lots of interfaces and brokenness of ioctl SIOCGIFCONF on * some platforms; see W. R. Stevens, ``Unix Network Programming Volume * I'', p.435. */ for (i = 8;; i += 8) { buf = (char *) calloc(i, sizeof(struct ifreq)); if (buf == NULL) { close(sd); return 0; } ifc.ifc_len = i * sizeof(struct ifreq); ifc.ifc_buf = (caddr_t) buf; if (ioctl(sd, SIOCGIFCONF, (char *) &ifc) < 0) { if (errno != EINVAL || lastlen != 0) { /* * Something has gone genuinely wrong. */ free(buf); close(sd); return 0; } /* * Otherwise, it could just be that the buffer is too small. */ } else { if (ifc.ifc_len == lastlen) { /* * The length is the same as the last time; we're done. */ break; } lastlen = ifc.ifc_len; } free(buf); } for (ifrp = ifc.ifc_req; (char *)ifrp < (char *)ifc.ifc_req + ifc.ifc_len;#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN ifrp = (struct ifreq *)(((char *) ifrp) + sizeof(ifrp->ifr_name) + ifrp->ifr_addr.sa_len)#else ifrp++#endif ) { if (ifrp->ifr_addr.sa_family != AF_INET) { continue; } addr = ((struct sockaddr_in *) &(ifrp->ifr_addr))->sin_addr.s_addr; if (ioctl(sd, SIOCGIFFLAGS, (char *) ifrp) < 0) { continue; } if ((ifrp->ifr_flags & IFF_UP)#ifdef IFF_RUNNING && (ifrp->ifr_flags & IFF_RUNNING)#endif /* IFF_RUNNING */ /*&& !(ifrp->ifr_flags & IFF_LOOPBACK) && addr != LOOPBACK*/) { /* * I *really* don't understand why this is necessary. Perhaps for * some broken platform? Leave it for now. JBPN */#ifdef SYS_IOCTL_H_HAS_SIOCGIFADDR if (ioctl(sd, SIOCGIFADDR, (char *) ifrp) < 0) { continue; } addr = ((struct sockaddr_in *) &(ifrp->ifr_addr))->sin_addr. s_addr;#endif printf("current ip : %s\n",print_ip1(addr)); } } free(buf); close(sd); return 0;}int main(){ get_myaddr();}
内核
接口
语言
R.
W.
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
教育局网络安全员工资
联通使用哪一种数据库
rtmp推流服务器
数据库和空间数据库的区别
有关网络安全教育心得体会
上海智能软件开发价钱
手机服务器未响应
电脑软件开发包括哪些
网易公开课 数据库
考mysql数据库
服务器防火墙 安全狗
达梦数据库 端口
软件开发环境ast
保密法网络安全法心得体会
本科有没有计算机网络技术
超市本地服务器
数据库防火墙厂家
没有用到数据库技术的领域
西安微趋道互联网科技
宁海财务软件开发好吗
电脑开网页显示服务器拒绝连接
软件开发环境与工具pdf
链接腾讯云服务器步骤
昆明中奇联合互联网科技有限公司
云悟网络技术有限公司
计算机网络技术学习的必要性
CLDS数据库编码
山西网络时钟服务器地址
泰州免费的外贸数据库系统
大涌软件开发