获得本地IP的三种方法

Windows Socket 网络编程——第九章 socket信息与控制 主要介绍了socket的一些属性,以及这些属性对socket的影响等。 阅读详情
  • 方法1,windows平台能拿到所有网卡IP,linux只能获得 "127.0.0.1"
int m_get_localIP(char** ipList, int num)
{
	int i = 0;
	const char* ip = NULL;
	struct hostent* h = NULL;
	char hostname[128] = {0};
	
	if(gethostname(hostname, sizeof(hostname)) != 0 || (h = gethostbyname(hostname)) == NULL)
	{
		return -1;
	}
	//get the ip address if it has multiple
	for(i = 0;i < num && h->h_addr_list[i];i++)
	{
		ip = inet_ntoa(*(struct in_addr*)h->h_addr_list[i]);
		if(strcmp(ip, "127.0.0.1") != 0)
		{
			strcpy(ipList[i++], ip);
		}
	}
	return i;
}
  • 方法2,linux平台可以拿到所有网卡IP,windows没有定义SIOCGIFCONF 和SIOCGIFADDR
int m_get_localIP(char** ipList, int num)
{
	int fd = -1;
	int i = -1, ret = 0;
	const char* ip = NULL;
	struct ifconf ifc = {0}; ///if.h
	struct ifreq* buf = NULL;

	if((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
	{
		return -1;
	}
	ifc.ifc_len = num * sizeof(struct ifreq);
	buf = (struct ifreq*)malloc(ifc.ifc_len);
	ifc.ifc_buf = (caddr_t)buf;
	if(ioctl(fd, SIOCGIFCONF, (char*)&ifc) == 0) //ioctl.h
	{
		i = 0;
		ret = ifc.ifc_len / sizeof(struct ifreq);
		while(ret-- > 0 && i < num)
		{
			if((ioctl(fd, SIOCGIFADDR, (char*)&buf[ret])) == 0)
			{
				ip = (inet_ntoa(((struct sockaddr_in*)(&buf[ret].ifr_addr))->sin_addr));//types
				if(strcmp(ip, "127.0.0.1") != 0)
				{
					strcpy(ipList[i++], ip);
				}
			}
		}
	}
	close(fd);
	free(buf);
	return i;
}
  • 方法三,各平台通用,但是只能获得系统分配的网卡IP,不能拿到所有网卡IP

int m_get_localIP(char** ipList, int num)
{
    int fd = -1;  
    int i = -1, ret = 0;  
    const char* ip = NULL;  
    struct sockaddr_in addr = {0};  
  
    if((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)  
    {  
        return -1;  
    }  
    memset(&addr, 0, sizeof(addr));  
    addr.sin_family = AF_INET;  
    addr.sin_addr.s_addr = inet_addr("8.8.8.8");  
    addr.sin_port = htons(80);  
    ret = sizeof(addr);  
    ret = connect(fd, (struct sockaddr*)&addr, ret);  
    i = 0;  
    ret = sizeof(addr);  
    if(getsockname(fd, (struct sockaddr*)&addr, (int*)&ret) == 0)  
    {  
        fprintf(stdout, "ip=%s\n", inet_ntoa(addr.sin_addr));  
    }  
    close(fd);  
    return i;  
}



qt获得本地IP的方法 阅读详情

相关推荐

Fluent后台计算中Journal文件的自动化编写与优化实践

本文深入探讨了Fluent在Linux/Unix环境下进行后台计算时,Journal文件的自动化编写与优化实践。Journal文件作为Fluent后台计算的“灵魂”,是实现仿真流程自动化、保证计算可重复性与准确性的关键。文章从基础脚本骨架搭建、命令简写技巧,到进阶的参数化研究与批量计算实现,提供了详实的实战指南,帮助工程师大幅提升仿真效率。

postgres8guard的博客 754

网络编程之 Socket函数 (二)

1. 概述              在《网络编程之 socket函数 (一)》 中所讲到的所有socket函数并不涉及设置socket属性,而只是定义了客户端和服务器端的socket流程。服务器端和客户端的使用流程如下:             客户端:                  socket()->connect()->send()/recv()->close()

理性的幻想 2341

ControlCAN.dll开发适配USBCAN_E/2E_U设备

摘要:本文提供了USBCAN_E/2E_U设备的配置指南:1)安装专用驱动;2)获取最新的ControlCAN.dll文件;3)修改VCI调用顺序,新增VCI_SetReference函数设置波特率;4)使用工具计算波特率配置值,并给出了常见波特率对应的代码参考值(如500K对应0x060007)。配置过程强调使用特定工具计算精确的波特率参数,并提供了相关软件下载链接。

weixin_43969033的博客 387

如何使用Windows C++发送以太网(Ethernet)帧

Objective To send an arbitrary Ethernet frame using an AF_PACKET socket Background Ethernet is a link layer protocol. Most networking programs interact with the network stack at the transport lay

srzhz的专栏 9855

3D视觉引导技术在机器人焊接中的应用

通过对比传统的2D视觉和3D视觉技术在焊接领域的应用差异,探讨了3D视觉引导技术在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势。本文对3D视觉引导技术在机器人焊接中的应用进行了深入探讨,总结了其在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势,并通过应用案例展示了其在焊接路径规划、焊缝检测和焊接质量控制等方面的重要作用。1. 提高焊接精度:3D视觉引导技术能够精确测量焊接工件的三维形状和位置,为机器人提供精准的焊接路径规划和跟踪,从而提高焊接精度。三、3D视觉引导技术概述。

2302_79273122的博客 1835

避开ego_planner仿真的第一个坑:深度相机、点云与odom话题配置全指南

本文详细解析了ego_planner仿真中深度相机、点云与odom话题配置的关键问题,帮助开发者避开常见陷阱。从数据流架构到具体配置细节,包括深度相机的内外参匹配、点云数据规范要求以及odom话题的验证方法,提供了全面的实战指南和优化建议。

weixin_30335575的博客 492

IE浏览器如何获取本地ip地址

function GetAdapterInfo() { // var locator = new ActiveXObject(“WbemScripting.SWbemLocator”); var service = locator.ConnectServer("."); //连接本机服务器 var properties = service.ExecQuery(“SELECT * FROM Win...

HuangZeJunXXX的博客 1971

36. 在 SAP Integration Suite 里打通入站 HTTP:iFlow 端点鉴权、角色授权与多节点 403 排障实战

本文探讨了SAP Cloud Integration中HTTP入站连接的认证与授权机制。在Cloud Foundry环境下,认证(证明身份)和授权(权限控制)需分开处理:认证可采用Basic、OAuth或mTLS等方式,授权则通过角色实现。文章详细解析了两种主流配置路径:基于IdP用户的Basic认证(需配置Role Collection)和基于OAuth Client/Service Instance的系统调用(通过Service Key管理权限)。特别指出ABAP系统在多节点环境下可能因cookie编码

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 319

c# 获得本地ip地址的三种方法

网上有很多种方法可以获取到本地的IP地址。一线常用的有这么些: 枚举本地网卡 using System.Net.NetworkInformation; using System.Net.Sockets; foreach (NetworkInterface netif in NetworkInterface.GetAllNetworkInterfaces() .Where(a => a.SupportsMulticast) .Where(a => a.OperationalStatus =

chinaherolts2008的博客 5647

1、电路分析知识全解析:从基础到实践应用

本博客全面解析电路分析知识体系,涵盖从基础的电压、电流、电阻概念到复杂的交流电路、瞬态分析和高级应用如滤波器与变压器等内容。适合电子技术专业学生和技术爱好者学习,提供详细的知识结构、学习路径、实践示例以及丰富的学习资源,包括计算机模拟工具Multisim和PSpice的使用指导。通过理论与实践结合,帮助学习者掌握电路分析的核心技能,为电子工程和电力系统等相关领域打下坚实基础。

iii12的专栏 159

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

本文介绍如何在高速通信情况下解决串口接收的数据来不及处理的问题,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 6806

Python获得IP的三种方法

获取本机所有 IP 地址。# 获取IP地址信息。

2301_81967414的博客 2564

ShengBTE热导计算:利用ShengBTE计算热导显示NAN的原因是什么?算出的热导不随平均声子自由程变化

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 962

Linux的三种配置 IP方法

nmcli是NetworkManager的一个命令行工具,它提供了使用命令行配置由NetworkManager管理网络连接的方法。其中,OBJECT选项可以是general、networking、radio、connection或device等。在日常使用中,最常使用的是-t, --terse(用于脚本)、-p, --pretty选项(用于用户)及-h, --help选项,用户可以使用“ nmcli help”获取更多参数及使用信息。

江天飞鸟的博客 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python获取本地ip_python 获取本机IP的三种方式

python获取本机IP的方式第一种:#!/usr/bin/pythonimport socketimport fcntlimport structdef get_ip_address(ifname):s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)return socket.inet_ntoa(fcntl.ioctl(s.fileno(),...

weixin_39866646的博客 1303

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

用ioctl获得本地ip地址

<br /><br />用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人<br />来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助<br />理解的方法,在描述中可能会有一些地方与真实定义有所出入,仅供参考.<br />首先先认识一下ifconf和ifreq://ifconf通常是用来保存所有接口信息的//if.hstruct ifconf {int ifc_len; /* size of buffer */

星愿心愿的专栏 1139

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

如何查询公网ip地址?通过内网获得公网ip的方法

这里小编跟大家分享一下如果查询本地公网IP地址,与内网IP区别,及如果获得公网IP方法和无公网IP使用nat123映射外网访问通用方法。3、在新的设置端口映射窗口中,先选择映射类型(如80、443、非80、同端口等),再填写内网映射信息(包括主机ip以及开放的端口)和填写外网地址绑定的域名(自动生成二级域名可用,或修改使用自己的域名);-如果路由WAN显示的是公网IP段范围的,同时与百度搜索“IP”结果(或三方本地IP查询到的)一样,表示自己本地的是公网IP。私有IP是在本地局域网上的IP。

csghdn的博客 1946

获得本地IP地址

用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人 来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助 理解的方法,在描述中可能会有一些地方与真实定义有所出入,仅供参考. 首先先认识一下ifconf和ifreq

aican_yu的专栏 447

学习笔记——【JS浏览器获取本地IP的方法】

学习使我快乐,沉迷学习,日渐消瘦! JS获取用户本地IP 通常情况下,出于安全性考虑,浏览器是不允许随意获取用户本地IP的。但是架不住你的上司跟你说,来咱们做个统计功能,包括统计用户IP。 为了五斗米,还是要折腰的,于是苦逼的我们…… 获取本地IP的方法 目前通过浏览器获取IP的方法主要有以下三种: 1、IE浏览器的ActiveX插件运行的情况下,可以利用ActiveObject获取。 2、利用第三方平台的接口返回,比如新浪、天平洋的接口。、 3、利用WebRTC技术获取。 当然了,这三种方法都有着非常.

qq_35855343的博客 1万+

Python获取IP地址的三种方法

在python中获取IP地址的方法很简单,我们只和gethostbyname和gethostbyname_ex两个函数可以实现了,当然也可以利用公网api来实现。   使用拨号上网的话,一般都有一个本地ip和一个外网ip,使用python可以很容易的得到这两个ip   使用gethostbyname和gethostbyname_ex两个函数可以实现  代码如下  

csdnhundan的专栏 6578

java代码获得公网ip_一、java获取公网ip和本地ip

一、java常用-java获取公网ip和本地ip获取本地ip代码:本地ip获取相对简单/*** 方法描述:获取操作的本机ip*@param request*@return*/public static String getLocalhostIpAddr() {String addr = null;try {addr = InetAddress.getLocalHost().getHostAddre...

weixin_30533109的博客 3039

linux获得本地IP

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <linux/types.h> #include <string.h> #include <sys/socket.h> #include <netinet/i...

aobu0171的博客 202
上一篇: 环形缓冲区(ring buffer),环形队列(ring queue) 原理
下一篇: 绘制三角形序列的三种方式 :GL_TRIANGLES、GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值