当前位置: 首页 > news >正文

C/C++ 不要使用 boost::asio::ip::address::from_string 函数来转换字符串为IP地址

如本文标题所示,不要使用 boost::asio::ip::address::from_string 函数来转换字符串为IP地址,它可能导致崩溃。

这是因为 boost::asio::ip::address::from_string 函数实现并不安全有问题,在 Android 平台NDK优化编译的情况下,100%会导致程序各种崩溃。

无论是传递 char*、还是 std::string,都会导致崩溃,跟字符串长度、或者结尾NULL字节是没有任何关系的。

即便是在 GCC/VC++ 上面也有一定崩溃的风险,代替  boost::asio::ip::address::from_string 函数的实现可以参考本文下述的 C/C++ 安全实现。


即;通过C语言 posix/socket 函数库来处理,并且把结果在转换成 boost::asio::ip::address 就可以了。

源实现:

    // On the Android platform, call: boost::asio::ip::address::from_string function will lead to collapse, // Only is to compile the Release code and opened the compiler code optimization.boost::asio::ip::address StringToAddress(const char* s, boost::system::error_code& ec) noexcept {ec = boost::asio::error::invalid_argument;if (NULL == s || *s == '\x0') {return boost::asio::ip::address_v4::any();}struct in_addr addr4;struct in6_addr addr6;if (inet_pton(AF_INET6, s, &addr6) > 0) {boost::asio::ip::address_v6::bytes_type bytes;memcpy(bytes.data(), addr6.s6_addr, bytes.size());ec.clear();return boost::asio::ip::address_v6(bytes);}else if (inet_pton(AF_INET, s, &addr4) > 0) {ec.clear();return boost::asio::ip::address_v4(htonl(addr4.s_addr));}else {return boost::asio::ip::address_v4::any(); }}
}

相关文章:

C/C++ 不要使用 boost::asio::ip::address::from_string 函数来转换字符串为IP地址

如本文标题所示,不要使用 boost::asio::ip::address::from_string 函数来转换字符串为IP地址,它可能导致崩溃。 这是因为 boost::asio::ip::address::from_string 函数实现并不安全有问题,在 Android 平台NDK优化编译的情况下,100…...

【Java多线程】4——特定场景解决办法

4 特定场景解决方法 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记仓库👉https://github.com/A-BigTree/tree-learning-notes 个人主页👉https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个st…...

Python:语法糖

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 在编程世界中,有一个词语听起来既甜蜜又神秘:语法糖(Syntactic Sugar)。这个术语并不是指真正的糖…...

nginx mirror 流量镜像

流量镜像 (Traffic Mirroring),也称为流量影子 (Traffic Shadowing),是一种强大的、无风险的测试应用版本的方法,它将实时流量的副本发送给被镜像的服务。 采用这种方法,您可以搭建一个与原环境类似的环境以进行验收测试&#xff…...

霉霉说地道中文,口型、卡点几乎完美,网友:配音时代结束了?

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站 每天给大家更新可用的国内可用chatGPT资源 更多资源欢迎关注 「给电影配音的时代即将结束了。」 AI 的发展让很多人直呼饭碗被抢了,以前是艺术家、程序员…… 现在配音员也要失业了&a…...

【生活】相机/图像各参数

文章目录 专业模式图片编辑-滤镜实体滤镜软件模拟滤镜 图片编辑-增强曝光亮度对比度饱和度自然饱和度色温色调高光阴影HSL色调分离褪色颗粒锐化晕影清晰度暗角 参考 专业模式 第一个参数WB是白平衡,调节色彩的。 第二个是对焦F,近距离拍摄物体&#xf…...

白酒:浓香型白酒的典型代表与特点

云仓酒庄的豪迈白酒作为白酒的品牌,具有一系列与众不同的特点和优势。下面云仓酒庄的豪迈白酒将从典型性、品质、口感和包装等方面深入分析白酒的特点,以及它如何体现浓香型白酒的魅力。 浓香型白酒是中国白酒的重要分支,以浓郁的香味和与众不…...

百万组通用编码器 L1527芯片产品介绍,重码率很低

L1527 是 CMOS 结构的预烧内码(遥控中的地址码)通用编码器,内有 20 位可预烧写 100 万组内码组合,使得重码率很低,具有更高安全性。芯片内集成误操作禁止功能,在按键输入有效且状态不变时,芯片连…...

2024年有哪些证书值得考?推荐这四个

一句老话说得好,技多不压身,在工作中,也能够提升自身的竞争力。对于大多数人来说,考“证”也许是另一种提升自己的途径。那么在新的一年中,有哪些证书值得我们去拼一拼呢?一起来看看吧! 免费送备考资料。联系我们&am…...

下载最新VMware,专业版本

VMware - Delivering a Digital Foundation For BusinessesRun any app on any cloud on any device with a digital foundation built on VMware solutions for modern apps, multi-cloud, digital workspace, security & networking.https://www.vmware.com/ 官网地址...

卷积神经网络-卷积层

卷积神经网络-卷积层 1多层感知机(MLP)2卷积神经网络(CNN)3MLP和CNN关系与区别4仍然有人使用MLP的原因:5MLP的局限性:MLP的应用领域:总结:6全连接到卷积全连接层 vs 卷积层结构差异应…...

yolov8 pose keypoint解读

yolov8进行关键点检测的代码如下: from ultralytics import YOLO# Load a model model YOLO(yolov8n.pt) # pretrained YOLOv8n model# Run batched inference on a list of images results model([im1.jpg, im2.jpg]) # return a list of Results objects# Pr…...

kubernetes-Pod基于污点、容忍度、亲和性的多种调度策略(一)

Pod调度策略 一.标签1.什么是标签2.给Pod资源打标签3.给Node节点打标签4.查看标签资源 二.Node选择器1.nodeName(指定Pod调度到指定Node节点)2.nodeSelector(指定Pod调度到具有指定标签的Node节点) 三.亲和性1.Node亲和性-nodeAffinity2.Pod亲和性-pod-Affinity3.Pod反亲和性-p…...

Jenkins磁盘空间批量清理脚本

一、简介 Jenkins如果没有设置保留构建历史数,磁盘会随着使用次数增加而越来越满,于是需要批量清理一下。 二、清理脚本 找到Script Console 输入脚本,并点击执行,需要注意期望删除的构建历史编号(可以查看下面的效果…...

FFmpeg拉取RTSP流并定时生成10秒短视频

生成效果: 视频时长为10秒 生成格式为FLV 输出日志: 完整实现代码如下: 需要在Mac和终端先安装FFmpeg brew install ffmpeg CMake文件配置: cmake_minimum_required(VERSION 3.27) project(ffmpeg_open_stream) set(CMAKE_CXX_STANDARD 17)#头文件包目录 include_director…...

【boost_search搜索引擎】2.正排索引和倒排索引

首先,要制作搜索引擎,我们首先要了解,什么是正排索引,什么是倒排索引,这是一个搜索引擎的关键。 1.正排索引 正排索引,其实就是我们的每一个文档,对应一个文档id。 正如vector容器一样&#xf…...

Java与Go:字符串转IP

在本文中,我们将了解如何将简单的对比Java和Go是如何将字符串解析为IP地址。 Java 在Java中,将字符串转换为IP地址最无脑的一个方法: import java.net.InetAddress; import java.net.UnknownHostException;public class Main {public stat…...

SlerfTools:简化操作,激发Solana生态创新潜能

在区块链世界的快速演变中,Solana生态系统以其独特的高性能吸引了全球的目光。然而,随着生态系统的蓬勃发展,用户和开发者面临的挑战也日渐增多。正是在这样的背景下,一个名为SlerfTools的新星项目应运而生,它承诺将为Solana带来一场革命性的变革。 项目的诞生 SlerfTools并非…...

AI视频风格转换动漫风:Stable Diffusion+TemporalKit

话不多说,直接开干。 基本方法 首先通过 Temporal-Kit 这个插件提取视频中的关键帧图片,然后使用 Stable Diffusion WebUI 重绘关键帧图片,然后再使用 Temporal-Kit 处理转换后的关键帧图片,它会自动补充关键帧之间的图片&#…...

MongoDB 7.x 绑定多个IP(bindIp)和IP范围段(IP/24)

早上安装了最新版的MOngoDB7.0,仅仅是想测试一些功能,暂无复杂操作的想法。 于是在远程的机器上,安装启动,一切正常。 网上找了教程,绑定IP的做法基本是修改mongod.cfg文件中的bindIp属性: Windows系统的…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...