获取linux内核所有ip
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,获取linux内核所有ip(C语言)经常遇到获取接口ip。记录一下,方便后续使用。#include #include #include #include #include #include #incl
千家信息网最后更新 2025年12月02日获取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安全错误
数据库的锁怎样保障安全
云端数据库密码加密
松江区网络技术服务收费
2020网络安全宣传折页
程序员数据库工程师
上海天朔网络技术有限公司
新型的手机软件开发
门户服务器地址未设置
默认服务器ip地址查询
保定erp系统软件开发
max提示服务器出现问题
网络技术培训记录
软件开发行业财务制度
我的世界呆呆联机服务器
软件开发问题解决方案
只狼单机为什么一直在登录服务器
苏州天通网络技术有限公司电话
上海安卓软件开发要多少钱
购买服务器是否记入固定资产
曾小勇软件开发
泰拉瑞亚如何制造一个服务器
维普科技期刊数据库
云架构网络安全平台
无锡网络安全员证报名
西门子s7服务器正在运行中
钢琴跟弹软件开发
翼猫网络安全测评
数据库极限查询
长沙聚鑫网络技术有限公司
湖南郴州市安卓软件开发学费
DellT430服务器加硬盘