- 博客(69)
- 资源 (9)
- 收藏
- 关注
原创 python全自动爬取m3u8网页视频(各类网站都通用)
M3U8 是一种基于文本的播放列表文件格式,主要用于 HTTP Live Streaming(HLS)流媒体协议,由苹果公司开发并广泛应用于在线视频和音频传输中。M3U8它实际上就是用一个文本文件(一般为.m3u8后缀)来定义视频和音频等流媒体的播放行为。我们能不能做成一个通用的视频下载脚本,自动获取分析网页,自动获取M3U8文件,自动下载ts视频文件,自动合并视频文件呢。当前可以的。可以捕获当前页面的所有M3U8视频进行自动下载
2025-05-04 16:15:14
2549
原创 虚拟硬盘数据恢复(vmdk、vdi、vhd等虚拟磁盘文件)
首先给自己做了难么多尝试后总结一些经验,可能让很多对磁盘分区,文件系统不熟悉的读者遇到类似的问题时少走很多弯路。(1)很多磁盘恢复、磁盘分区工具是可以直接读取虚拟机使用的虚拟磁盘文件(包括vdi,vmdk,vhd等格式的虚拟磁盘文件)的。比如windows下的diskgenius磁盘恢复工具,就可以直接打开这些虚拟磁盘文件,但是diskgenius并不支持所有的文件系统类型,比如Linux下常用的LVM文件系统类型,diakgenius就只能显示出虚拟磁盘文件里面的分区信息,无法读取分区里面的数据。
2024-09-24 23:11:13
5391
1
原创 加密隧道技术
在现在的互联网上传输数据,首要考虑的就是安全。这关乎到你的隐私,个人信息,财产安全等等重大问题。如果你的程序本身传输的信息没有加密,也可以通过其他辅助方式让你的通信加密。一些工具的就是为了解决这样的场景的,即数据先通过源端代理,让你的所有通信数据都加密,然后到达目的后再使用目的端代理进行解密后转发给目标进程。即加密隧道的简单示意图如下所示:加密隧道的起始即为源端代理和目的端代理。其中数据发送进程和源端代理可以是同在一个主机的不同进程,也可以是分属不同的主机。目的端代理和数据接收进程也一样。
2024-03-02 18:33:43
2432
原创 openvpn配置使用静态密钥
openvpn客户端在和服务端建立连接时,一般建立ssl通信,流量都需要经过加密。正常建立ssl连接的时候,流程是很复杂的,需要握手信息,需要验证证书,需要协商和交换对称加密密钥。这个对称加密密钥是用来做什么的呢?其实ssl在建立连接前期的协商步骤中使用非对称加密算法(一般为RSA算法),是为了交换某些生成后续对称加密密钥所必须的信息,避免在网络中明文传输对称加密的密钥。一旦协商完成,对称密钥也就交换完成,后续的通信,都是使用对称加密来通信。为什么不能全程都使用非对称加密来加解密数据?
2024-02-25 15:07:24
3785
原创 VirtualBox 网络连接配置
我们在windows上使用linux虚拟机,一般网络需要两个要求:1、虚拟机里面要能访问到外网(互联网) 2、能从宿主机连接进入到虚拟机 在virtalbox的设计看来,这两个需求是独立的,因此就设计了不同的网络连接方式。最常用的是 网络地址转换(NAT)和 仅主机(Host-Only)网络。其中网络地址转换(NAT)是为了使虚拟机能通过虚拟的 NAT设备接入外网,而仅主机(Host-Only)网络就是为了能从宿主机能访问到虚拟机。
2023-12-28 15:09:49
2778
1
原创 std::cin C++标准输入流
用了那么久的c++,都没有深入去学习一下c++的标准输入流(cin),标准输出流的(cout)的用法,一般只是简单的使用去获取一个字符串或者几个整型输入。但是发现如果遇到了比较复杂的输入,这简单的三板斧就不够用了,需要考虑空白符(空格,tab,换行符等)的影响。而c++又提供了cin.get,cin.getline,std::getline,等不同的类方法和全局函数,没深入的了解的咋一看就有点晕,这几个函数到底有啥区别?又有哪些坑?下面是我自己的一些补充。
2023-06-11 15:57:23
1643
原创 linux C/C++ 后端服务问题排查(gdb, pstack,valgrind)
在linux上运行的c/c++程序,一般是没有界面的,一般都需要打印运行日志,通过日志来定位问题。但是日志不是万能的,有时候日志没有输出我们的想要的信息,如果增加日志还要程序重新编译部署发布,如果是生产上的服务,为了排查一个问题就要发布版本,那这肯定是得不偿失的。除了日志,linux上我们还有很多手段去帮助我们排查程序问题,就是linux提供了很多有用的命令行工具让我们查找问题。这里我总结了经常使用的几个命令的用法,gdb, pstack,valgrind。
2023-03-02 18:50:32
1324
原创 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
5223
原创 基于 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
10731
17
原创 解决Linux多个动态库间的符号冲突问题
那linux下有没有类似window下的显式导出功能呢,有的。下面是介绍一种常用的只导出指定符号的方法。 1、加编译器选项fvisibility=hidden,加了这个选项后,默认的符号都不会导出 2、在需要导出的函数或者类名前加__attribute__ ((visibility("default")))一种是在编译期解决,就是在编译动态库的是加参数-Wl,-Bsymbolic 这个参数是传给链接器的,这个编译参数的作用是:优先使用本动态库中的符号,而不是全局符号。
2022-04-12 18:42:33
8991
原创 解决window下使用git clone时没有提示输入用户名密码认证的问题(gitlab使用https协议)
最近在我的windows电脑上,使用了一个新的gitlab账号去拉取新建的git project代码,使用git clone xxxx.git 的时候直接提示找不到项目或者该账号没有权限查看,连提示输入用户名密码验证的步骤都没有,很纳闷,这个项目就是我自己在网页端建的,不可能不存在或者没有权限,在网上找了下原因,原来是 window保存的凭据在作怪。因为之前用其他同事的账号在gitlab上拉过其他项目的代码,window就记住了这个用户名密码,后面再访问gitlab的时候,因为默认使用的是windows保存
2022-04-10 15:04:00
8668
原创 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
1097
原创 windows 下查看库文件符号的工具dumpbin(类似linux的nm)
1、对于静态库dumpbin -SYMBOLS 库文件在命令行中使用上述指令查看库中的显示函数和数据对象。2、对于动态库dumpbin -EXPORTS 库文件在命令行中使用上述指令查看库中的显示函数和数据对象。只要安装了vs,就有这个工具,这个工具不能在一般的命令提示符下执行,因为找不到这个命令。可以在“vs 命令提示符”中执行,怎么打开这个命令提示符呢?如下:开始->所有程序->Microsoft Visual Studio 2010->Visual Studio
2021-07-23 15:38:18
3446
1
原创 解决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
3226
原创 vscode远程开发 配置
vscode 强大的功能,可以在远程机器上开发c++ go等,跟在本地开发一样,下面是我参考别人的博文进行配置的VSCODE远程开发 golang环境配置
2021-07-16 22:49:42
156
原创 解决 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
1120
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
4363
原创 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
679
原创 使用互斥锁和条件变量实现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
410
1
原创 c++移动语义(std::move)
c++11 引入了左值,右值,移动构造函数,移动赋值函数等新概念,其实都是为了支持移动语义而引入的c++11引入了左值和右值的概念:左值:能取使用&获取到地址的都为左值 右值:不能获取地址的为右值,匿名变量一律为右值 std::move()函数将左值转化成右值 右值引用主要用于移动语义(move)和完美转发移动构造函数的功能:1.移动构造函数一般是在类中需要深拷贝(即成员变量含有指针类型,内容存放在堆中)的时候才需要用,移动构造函数的功能跟拷贝构造函数的功能类似,有一点不同.
2021-02-27 13:48:15
871
原创 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
2687
原创 关于goroutine调度器是否是抢占式的问题
最近在看协程的实现,想弄明白go的调度器是不是抢占式,如果某个goroutine运行的时间太久,并且没有主动让出cpu,go调度器是否会切换到其他goroutine运行。看了一些其他的文章,总结了一下,go的调度器勉强算的上是抢占式的,但是不是在所有情况下都能抢占。按照go调度器的设计,最终还是让长时间运行的goroutine自己放弃cpu的,以主动放弃达到抢占的目的。go调度器会起一个守护线程去监控各个协程的运行时间,一旦某个协程运行超时,就给这个协程的栈空间设置一个超时的标志位,协程在运行...
2021-01-27 17:03:06
1047
原创 使用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
3252
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
5886
2
原创 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
4685
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
3211
原创 C++11实现的单例工厂模式
工厂模式的主要目的是将具体类的实例化延迟到子类,但是一般的工厂方法模式,如果新增加一种产品,必须先要增加一个相应的工厂类。现在发现可以用c++的模板来实现,新增一种产品不需要新增一个工厂类/************************************************************************* > File Name: factory.cpp > Author: ma6174 > Mail: ma6174@163.co
2020-05-16 11:49:36
896
原创 STL vector容器迭代器失效的几种情况
vector迭代器失效,最常见的是在删除元素(erase())的时候,然鹅根据vector的实现原理,在vector扩容的时候应该也会出现迭代器失效的情况。看下面的例子:#include <vector>#include <iostream>#include <algorithm>#include <functional>u...
2020-04-23 19:51:38
1312
原创 C++实现二叉查找树,有兴趣的可以互相交流
最近在研究数据结构这本书,自己动手实现的一个二叉查找排序树的类BinSortTree,实现数据的插入,查找,删除,层序遍历,中序遍历等操作,熟悉数据结构的朋友都知道,根据二叉排序树的定义,中序遍历后得到的序列就是按照从小到大的顺序排列的,而最后删除二叉排序树的时候,要先删除子节点,才能删除父节点,其实就是一个后续遍历的过程。现在把代码分享一下,供大家参考学习。其实这个跟stl的set容器已经十分相...
2020-04-03 11:43:14
196
原创 排列组合 c++实现
首先说排列,可以根据递归定义,从n个元素里面选m个进行排列,第一步先从n个元素里面选任意一个元素,然后再在剩下的n-1个元素里面选m-1个元素进行排列。这个就是递归定义。因为是任意一个元素,因此必须进行一个从第0个元素到n-1个元素的循环。比如从集合[1,2,3]中取2个数进行排列(1)第一个循环,取出元素1作为集合的第一个排列数;然后再利用递归从剩下的元素[2,3]中取1个元素进行...
2020-03-21 22:39:46
1831
原创 求一个集合的所有子集(c++实现)
求一个集合的所有子集就是很简单的一道关于组合的题目,是一个集合内的元素的任意组合。一接触这类的题目,感觉头都大,让我找出三个数的任意组合我都担心找不全,更别提更多的数的组合了。在网上查了解决方法,发现他们的想法真的很神奇,顿时有种豁然开朗的感觉。首先如果一个n个元素的的集合,子集的个数一共有多少个呢,是2^n个,为什么是2^n个呢,转换一下思路,我们就把有n个元素的集合看作是一个有n位的整型数...
2020-01-12 15:14:48
7350
2
原创 虚拟机里的 centos 使用静态ip地址
自己装了个虚拟机运行centos版本的linux,有时候启动linux的时候分配的ip地址往往不一样,都要重新查看ip地址后才能用xshell连接,很麻烦,因此想把linux机器的ip地址配置成静态的。其实配置静态ip地址是很简单的,只需要修改一下网卡配置文件,但是是新手,往往出现这样那样的问题配置不成功。折腾了一阵终于可以了,记录一下操作步骤1、进入目录:/etc/sysconfig/net...
2019-10-15 14:36:21
430
原创 总结避免死锁的几种方法
最近项目中用到一些多线程的知识,涉及到一个线程需要锁住多个资源的情况,这就会涉及到多线程的死锁问题。特此总结一下死锁产生的方式有好几种,并不是只有一个线程涉及多个锁才会出现死锁的情况,单个锁也有可能出现死锁。1、第一种常见的情况是加锁之后没有解锁。有可能是lock之后真的忘了unlock,这种比较少见也容易发现。但是有时候程序并不是跟我们预想的一样一帆风顺的走完流程,可能是在lock和un...
2019-10-14 18:04:45
15424
1
原创 centos 配置git
linux上配置git和在windows上的配置都差不多,主要是配置用户名和邮箱,如果要配置远程仓库的话,先用openssl生成ssh的密钥对,然后把公钥复制到git远程仓库上。当然,首先要安装git,如果是centos的话用命令yum install git就能自动安装了。1、配置用户名和密码git config --global user.name "你的用户名"git confi...
2019-10-13 13:25:56
2601
原创 使用websocket++库监听端口失败:asio listen error: system:97 (Address family not supported by protocol)
最近使用websocket++这个库来与网页保持长连接通信,这个库的底层使用的是boost库中的asio来进行socket通信。我在windows上编译之后可以正常监听端口,通信也正常,但是编译成linux版本,在centos 版本2.6.32-696.10.1.el6.x86_64上运行,端口监听时会报asio listen error: system:97 (Address family no...
2019-09-27 15:19:05
2541
1
原创 linux 打包(tar)和复制(cp)中的软链接问题
在linux下会有软链接(也叫符号链接),类似于windows的快捷方式。在复制或者打包带有软链接的文件时,稍不注意就会出错。如果没有特殊的参数,打包或者复制命令会把符号链接文件替换为真实的文件。正确的做法为:当使用tar命令时加参数p来保持软连接当使用cp命令时加参数P(大写的)来保持软连接...
2019-09-23 11:52:31
8377
转载 【转】如何判断一个.lib文件是静态库还是动态库的导入库,很有帮助
使用VS自带的一个工具 -lib.exe。打开目录“C:\Program Files\Microsoft Visual Studio 10.0\VC\bin”就会看到这个工具(具体存在位置根据vs安装路径)运行 lib /list hello.lib如果输出: hello.obj,则是静态库如果输出: hello.dll,则是动态库的导入库。找到以.lib结尾的所有文件并保存到1...
2019-08-29 10:42:50
611
boost_1_70_0.tar.gz
2019-07-09
MFC自绘按钮,可以方便的改变按钮的背景颜色和文本颜色
2017-08-29
FTP文件传输以及即时通信
2014-07-15
redis安装脚本setup.sh
2019-08-19
二叉查找排序树的实现代码
2018-05-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅