- 博客(92)
- 资源 (9)
- 收藏
- 关注
原创 虚拟硬盘数据恢复(vmdk、vdi、vhd等虚拟磁盘文件)
首先给自己做了难么多尝试后总结一些经验,可能让很多对磁盘分区,文件系统不熟悉的读者遇到类似的问题时少走很多弯路。(1)很多磁盘恢复、磁盘分区工具是可以直接读取虚拟机使用的虚拟磁盘文件(包括vdi,vmdk,vhd等格式的虚拟磁盘文件)的。比如windows下的diskgenius磁盘恢复工具,就可以直接打开这些虚拟磁盘文件,但是diskgenius并不支持所有的文件系统类型,比如Linux下常用的LVM文件系统类型,diakgenius就只能显示出虚拟磁盘文件里面的分区信息,无法读取分区里面的数据。
2024-09-24 23:11:13
3503
1
原创 加密隧道技术
在现在的互联网上传输数据,首要考虑的就是安全。这关乎到你的隐私,个人信息,财产安全等等重大问题。如果你的程序本身传输的信息没有加密,也可以通过其他辅助方式让你的通信加密。一些工具的就是为了解决这样的场景的,即数据先通过源端代理,让你的所有通信数据都加密,然后到达目的后再使用目的端代理进行解密后转发给目标进程。即加密隧道的简单示意图如下所示:加密隧道的起始即为源端代理和目的端代理。其中数据发送进程和源端代理可以是同在一个主机的不同进程,也可以是分属不同的主机。目的端代理和数据接收进程也一样。
2024-03-02 18:33:43
1939
原创 openvpn配置使用静态密钥
openvpn客户端在和服务端建立连接时,一般建立ssl通信,流量都需要经过加密。正常建立ssl连接的时候,流程是很复杂的,需要握手信息,需要验证证书,需要协商和交换对称加密密钥。这个对称加密密钥是用来做什么的呢?其实ssl在建立连接前期的协商步骤中使用非对称加密算法(一般为RSA算法),是为了交换某些生成后续对称加密密钥所必须的信息,避免在网络中明文传输对称加密的密钥。一旦协商完成,对称密钥也就交换完成,后续的通信,都是使用对称加密来通信。为什么不能全程都使用非对称加密来加解密数据?
2024-02-25 15:07:24
3046
原创 VirtualBox 网络连接配置
我们在windows上使用linux虚拟机,一般网络需要两个要求:1、虚拟机里面要能访问到外网(互联网) 2、能从宿主机连接进入到虚拟机 在virtalbox的设计看来,这两个需求是独立的,因此就设计了不同的网络连接方式。最常用的是 网络地址转换(NAT)和 仅主机(Host-Only)网络。其中网络地址转换(NAT)是为了使虚拟机能通过虚拟的 NAT设备接入外网,而仅主机(Host-Only)网络就是为了能从宿主机能访问到虚拟机。
2023-12-28 15:09:49
2496
1
原创 std::cin C++标准输入流
用了那么久的c++,都没有深入去学习一下c++的标准输入流(cin),标准输出流的(cout)的用法,一般只是简单的使用去获取一个字符串或者几个整型输入。但是发现如果遇到了比较复杂的输入,这简单的三板斧就不够用了,需要考虑空白符(空格,tab,换行符等)的影响。而c++又提供了cin.get,cin.getline,std::getline,等不同的类方法和全局函数,没深入的了解的咋一看就有点晕,这几个函数到底有啥区别?又有哪些坑?下面是我自己的一些补充。
2023-06-11 15:57:23
1527
原创 linux C/C++ 后端服务问题排查(gdb, pstack,valgrind)
在linux上运行的c/c++程序,一般是没有界面的,一般都需要打印运行日志,通过日志来定位问题。但是日志不是万能的,有时候日志没有输出我们的想要的信息,如果增加日志还要程序重新编译部署发布,如果是生产上的服务,为了排查一个问题就要发布版本,那这肯定是得不偿失的。除了日志,linux上我们还有很多手段去帮助我们排查程序问题,就是linux提供了很多有用的命令行工具让我们查找问题。这里我总结了经常使用的几个命令的用法,gdb, pstack,valgrind。
2023-03-02 18:50:32
1226
转载 openssl库生成CA证书,服务端证书,客户端证书
openssl库生成CA证书,服务端证书,客户端证书。参考这篇博客,很详细,按着他的步骤来不会出错,可以留作以后备用。
2023-02-15 10:04:34
371
原创 windows换行符(\r\n)与unix换行符(\n)互转
因为windows下文本的换行符为\r\n,而unix下只为\n,因此windows换行符(\r\n)与unix换行符(\n)互转,最直观的做法是直接用sed替换。windows换行符转unix换行符:sed -i -e 's/\r\n/\n/g' test.txtunix换行符转windows换行符:sed -i -e 's/\n/\r\n/g' test.txt
2022-05-14 12:23:16
4926
原创 基于 gmssl实现的sm2加密(C++)
项目中需要用到sm2加密,在网上搜索了一下相关的库,发现只有openssl和gmssl这两个库可以用,于是基于gmssl库做了封装,gmssl的版本是:GmSSL 2.5.4 - OpenSSL 1.1.0d 19 Jun 2019搞这个库的确要费不少功夫,现在分享出来给需要的人。目前我是用在linux环境中,因此编译成linux动态库,并且屏蔽相关库的头文件和符号,只暴露sm2加解密相关的接口符号,gmssl库通过静态库的方式引用。...
2022-04-16 11:47:55
10000
17
原创 解决Linux多个动态库间的符号冲突问题
那linux下有没有类似window下的显式导出功能呢,有的。下面是介绍一种常用的只导出指定符号的方法。 1、加编译器选项fvisibility=hidden,加了这个选项后,默认的符号都不会导出 2、在需要导出的函数或者类名前加__attribute__ ((visibility("default")))一种是在编译期解决,就是在编译动态库的是加参数-Wl,-Bsymbolic 这个参数是传给链接器的,这个编译参数的作用是:优先使用本动态库中的符号,而不是全局符号。
2022-04-12 18:42:33
8274
原创 解决window下使用git clone时没有提示输入用户名密码认证的问题(gitlab使用https协议)
最近在我的windows电脑上,使用了一个新的gitlab账号去拉取新建的git project代码,使用git clone xxxx.git 的时候直接提示找不到项目或者该账号没有权限查看,连提示输入用户名密码验证的步骤都没有,很纳闷,这个项目就是我自己在网页端建的,不可能不存在或者没有权限,在网上找了下原因,原来是 window保存的凭据在作怪。因为之前用其他同事的账号在gitlab上拉过其他项目的代码,window就记住了这个用户名密码,后面再访问gitlab的时候,因为默认使用的是windows保存
2022-04-10 15:04:00
7755
原创 awk 命令使用示例
1、 如何在awk脚本内部调用shell命令2、awk 脚本内部如何获取外部变量3、awk 数组4、使用awk 去除重复行比较简洁的写法是下面这样:echo -e "aaa\nbbb\naaa"| awk '!a[$0]++'但是上面的写法比较难理解,比较易懂的写法如下:echo -e "aaa\nbbb\naaa" | awk '{ if (!a[$0]++) { print $0 } }'5、awk 脚本内部给外部变量赋值
2022-04-07 16:34:49
1015
原创 boost asio实现的TCP客户端(同时支持ssl)
因为要开发TCP客户端用于网络通信,用c++来写,要实现跨平台在window和linux都能用的话,自己去封装原始的套接字操作,要兼容linux和window两个平台,有点困难,工作量也不小,于是用了现有的别人封装好的库,boost的asio来封装一个TCP客户端。 boost 的asio是一个优秀的全异步跨平台的网络通信库,不过源码都是用模板来写的,看起来比较吃力。因为通信也有需要用到SSL的情况,所以设计的TcpClient兼容普通的套接字通信和ssl通信,可以作为初学者的借鉴,分为4个文件,代码如下:
2022-02-15 15:01:06
5719
1
原创 windows 下查看库文件符号的工具dumpbin(类似linux的nm)
1、对于静态库dumpbin -SYMBOLS 库文件在命令行中使用上述指令查看库中的显示函数和数据对象。2、对于动态库dumpbin -EXPORTS 库文件在命令行中使用上述指令查看库中的显示函数和数据对象。只要安装了vs,就有这个工具,这个工具不能在一般的命令提示符下执行,因为找不到这个命令。可以在“vs 命令提示符”中执行,怎么打开这个命令提示符呢?如下:开始->所有程序->Microsoft Visual Studio 2010->Visual Studio
2021-07-23 15:38:18
3077
1
原创 解决ycm超时问题
vim在编辑文件的时候,经常会 报错: HTTPConnectionPool(host='127.0.0.1', port=58833): Read timed out. (read timeout=30)导致编辑器卡住,无法编辑,在网上搜了一下,是我安装的ycm插件问题,通过使用 --system-libclang 编译 YouCompleteMe 解决::cd ~/.vim/bundle/YouCompleteMe/./install.sh --system-libclang --clang.
2021-07-18 00:05:24
641
原创 解决centos ssh可以使用却无法传文件的问题
今天想在宿主机windows和虚拟机linux里面传文件,发现无论是用sz还是pscp,都无法使用,提示是SFTP的问题,上网百度了一下,解决办法是修改/etc/ssh/sshd_config文件将Subsystem sftp /usr/libexec/openssh/sftp-server改为Subsystem sftp internal-sftp重启后就可以了,不知道这是啥原理,之前是好好的可以用,这个虚拟机是从vm ware 移植到virtual bo...
2021-07-17 09:41:12
2921
原创 vscode远程开发 配置
vscode 强大的功能,可以在远程机器上开发c++ go等,跟在本地开发一样,下面是我参考别人的博文进行配置的VSCODE远程开发 golang环境配置
2021-07-16 22:49:42
130
原创 解决 vscode下载go相关插件失败的问题
很多初学者使用vscode的时候,出现最多的问题就是插件安装失败的问题,而插件安装失败最多的问题就是下载失败,本文主要解决go插件安装失败的问题因为一般go是插件都是国外网站上的,我们国内很多时候是下载不下来的,因此可以使用一个代理去访问,只需要在安装go的机器上执行下面这两条命令go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.io,direct第一个命令是开启go的模块管理功能,这是go新引入的一种包管理方式,是基于go.m
2021-07-13 21:29:34
1029
3
原创 解决vscode在编译c++文件时控制台输出乱码问题
刚使用vscode的时候,配置就花了不少功夫,刚开始编译c++文件的时候就出现了乱码,后来自己摸索了一下解决了,贴一下解决过程,希望能帮到遇到同样问题的朋友。前提是我使用的MSVC编译器cl.exe这个乱码的原因应该是编译器cl.exe输出的编码是GBK,而如果使用vscode的powershell,默认是UTF8编码,这样的话,cl.exe的错误信息在powershell上输出,就是乱码,解决问题的关键就是指明使用window的命令提示符shell,而不是使用vscode自带的powershell
2021-04-09 09:17:32
4088
原创 vscode c++开发配置
我原来使用的是Microsoft Visual Studio进行c++程序开发的,最近想试试用vscode来开发,vs毕竟太庞大了,vscode更轻便一些,使用过一段时间后,发现vscode还是不错的。首选说明,vscode只是一个代码编辑工具,代码的编译和调试,还需要安装其他的编译调试工具,比如微软的MSVC,或者使用gcc+gdb,MinGW等等。这里贴一下官方的文档:https://code.visualstudio.com/docs/languages/cpp--这个是vscode 做c+.
2021-04-05 19:07:30
554
原创 使用互斥锁和条件变量实现windows的Event
#include<iostream>#include<unistd.h>#include<pthread.h>using namespace std;class DEvent{ public: DEvent(bool bSet):bSet(bSet) { pthread_mutex_init(&mutex, NULL); pthread_cond_init(&cond, NULL); } ~DEvent().
2021-02-27 18:18:21
355
1
原创 c++移动语义(std::move)
c++11 引入了左值,右值,移动构造函数,移动赋值函数等新概念,其实都是为了支持移动语义而引入的c++11引入了左值和右值的概念:左值:能取使用&获取到地址的都为左值 右值:不能获取地址的为右值,匿名变量一律为右值 std::move()函数将左值转化成右值 右值引用主要用于移动语义(move)和完美转发移动构造函数的功能:1.移动构造函数一般是在类中需要深拷贝(即成员变量含有指针类型,内容存放在堆中)的时候才需要用,移动构造函数的功能跟拷贝构造函数的功能类似,有一点不同.
2021-02-27 13:48:15
800
原创 boost asio异步服务端实现步骤
(1)首先要初始化一个io_serviceboost::asio::io_service iosrv;(2)然后需要用一个iosrv的实例来初始化一个acceptorboost::asio::ip::tcp::acceptor acceptor(iosrv);(3)然后需要调用acceptor对象的open函数boost::system::error_code ec;acceptor.open(boost::asio::ip::tcp::v4(), ec);(4)然后调用acce
2021-02-26 23:31:54
2329
原创 关于goroutine调度器是否是抢占式的问题
最近在看协程的实现,想弄明白go的调度器是不是抢占式,如果某个goroutine运行的时间太久,并且没有主动让出cpu,go调度器是否会切换到其他goroutine运行。看了一些其他的文章,总结了一下,go的调度器勉强算的上是抢占式的,但是不是在所有情况下都能抢占。按照go调度器的设计,最终还是让长时间运行的goroutine自己放弃cpu的,以主动放弃达到抢占的目的。go调度器会起一个守护线程去监控各个协程的运行时间,一旦某个协程运行超时,就给这个协程的栈空间设置一个超时的标志位,协程在运行...
2021-01-27 17:03:06
986
原创 使用websocket++/websocketpp库在服务重启后报[info] asio listen error: system:98 (地址已在使用)端口重用的问题
项目在使用websocket++这个开源库,作为websocket的服务器端来跟网页通信,虽然可以使用,但是有个问题就是在linux下的服务每次在关闭后马上启动,就会报端口重用的错误:[2020-07-22 11:10:13] [info] asio listen error: system:98 (地址已在使用)如果把服务停掉等待一分多钟后启动,就不会报这个错误了,说明端口已经被释放。如果监听的套接字设置套接字选项SO_REUSEADDR,就能解决,一般而言,作为服务器监听的套接字都必须设置这个套
2020-07-23 14:44:28
3026
3
原创 websocketpp/websocket++库教程/服务端代码封装
websocketpp这个库是开源的,我在项目中引用,感觉还是把代码开源出来给需要的人比较好。我自己对这个库进行了简单的封装,可以做出动态库或者so库,使用起来也方便。我只提供封装后的代码,至于websocket库的编译和项目配置需要自己去做。web_sock_server.h头文件#pragma once#include "pch.h"#include <string>#include <boost/thread.hpp>#include <boost/fu
2020-07-23 14:36:26
5747
2
转载 基础背包问题动态规划解法详细解答【转】
最近在刷大厂的编程题,发现很多题目都需要用到动态规划去求解,自己都是只知道用穷举的方式去解,实在是low。学习动态规划,看了别人说的背包问题九讲.pdf,依然是云里雾里。对我这样的小白来说,感觉描述的不是很清楚。然后找到了下面的博文,终于搞清楚实现过程。特意分享出来,给和我一样小白的童鞋。01背包问题 图解+详细解析 (转载)...
2020-07-20 14:38:34
197
原创 centos 升级gcc
最近使用自己的虚拟机编译项目文件,发现报错:/root/yimi/serv_dev_camera_proxy/serv_dev/esb_middleware/output/linux/bin/libboost_locale.so:对‘std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20’未定义的引用/root/yimi/serv_dev_camera_proxy/serv_dev/esb_middleware/output/lin
2020-06-10 10:16:21
4213
1
原创 升级linux c++标准库
最近在自己的虚拟机运行某个项目用到的程序的时候,报错:./yimi_camera_proxy: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./libexport_cpp_utility.so)./yimi_camera_proxy: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./libexport_cpp_u
2020-05-19 12:27:24
3090
原创 C++11实现的单例工厂模式
工厂模式的主要目的是将具体类的实例化延迟到子类,但是一般的工厂方法模式,如果新增加一种产品,必须先要增加一个相应的工厂类。现在发现可以用c++的模板来实现,新增一种产品不需要新增一个工厂类/************************************************************************* > File Name: factory.cpp > Author: ma6174 > Mail: ma6174@163.co
2020-05-16 11:49:36
852
原创 STL vector容器迭代器失效的几种情况
vector迭代器失效,最常见的是在删除元素(erase())的时候,然鹅根据vector的实现原理,在vector扩容的时候应该也会出现迭代器失效的情况。看下面的例子:#include <vector>#include <iostream>#include <algorithm>#include <functional>u...
2020-04-23 19:51:38
1251
redis安装脚本setup.sh
2019-08-19
boost_1_70_0.tar.gz
2019-07-09
二叉查找排序树的实现代码
2018-05-30
MFC自绘按钮,可以方便的改变按钮的背景颜色和文本颜色
2017-08-29
FTP文件传输以及即时通信
2014-07-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人