分类目录归档:编程入门和放弃

海外环境下HTTP异常分析

1.背景

使用紫光展锐W307芯片(uws6130e),在海外环境使用海外sim卡(英国网络O2, Three运营商), 在使用使用过程中发现了,HTTP网络请求异常。

2.O2运营商卡

O2运营商卡,http出现的网络现象,socket建立连接后,一旦发送数据,立马会得到对端RST+ACK回复 (也就是无效请求,被拒绝)。其实服务端进行抓包,数据并未到达服务端,由于使用运营商网络 中间节点较多,我们只能从无效请求分析,猜测这个无效请求是由于什么造成的,我们使用python socket 进行尝试模拟这个请求(其实在中国请求正常,在英国这个O2运营商网络上不正常)。 最后锁定了HTTP hea

Read more

HTTPS简要说明

HTTPS的使用现在是越来越广泛,从技术角度HTTPS在HTTP协议基础上,增加了SSL加密 传输,使用非对称加密协商对称加密的密钥,来保证传输的安全性。

1. 证书签发

1)服务方S向第三方机构CA提交信息(公钥,组织信息,个人信息等等)并申请认证
2)CA确认申请者的相关信息
3)信息审核通过,CA向申请者签发认证文件---证书
备注:证书包含,申请者公钥,申请者的组织信息,个人信息,签发机构CA的信息,有效时间
    证书序列号等信息的明文,同时还有一个签名。(也就是明文+CA的签名)
这个签名算法,是使用散列函数计算公开的明文信息摘要,然后采用CA的私钥对信息摘要进行
加密,密文就是

Read more

Wireshark分析HTTPS

1.说明

主要是通过wireshark抓包分析HTTPS通信过程,了解一下HTTPS通信交互流程。 可以较清晰看到TCP的三次握手,四次挥手。

2.实际抓包结果分析

备注:举例的例子,是访问海外服务环境,其实际信号较差,不光可以看到基本握手流程, 也包含了TCP的重传(超时重传、虚假重传)。

2.1 TCP握手流程

上面是TCP的三次握手,1207为客户端,建立的端口,443为服务端HTTPS的端口 1)SYN同步 1207--> 443 2)SYN,ACK 443--> 1207 3)ACK 1207--> 443 连接建立成功 上述过程信号较差(数据连接较不稳定,超时重

Read more

C++多继承内存模型

1.说明

C++允许多继承(区别于java,不能多继承,需要使用接口),但是C++的多继承也带来了 用户层面理解盲区(例如:内存布局等)

2.代码测试

实现一个基础的继承

class A{
public:
    int a;
    int b;
    virtual void function1()
    {
        cout<<"this is class A ,function1 !"<<endl;
    }
};

class B{
public:
    int a;
    int b;
    virtual void 

Read more

Makefile语法

1.make讲解

make命令执行时,需要一个Makefile文件,Makefile文件告诉make命令需要怎么样编译和 链接程序。Makefile文件指引make工具执行。

2.makefile常见模板

###########  target name
# compile all .c file in $(PWD)
SRCS:=$(wildcard ./*.c)   #通配符会自动展开,获取目录下所有c文件列表
#OBJS := $(SRCS:.c=.o) #?????
OBJS = $(patsubst %.c, %.o, $(SRCS)) #替换通配符
OUT := bpool
OUT_

Read more

卡尔曼Kalman算法使用简述

1.卡尔曼作用简述

卡尔曼滤波是一种递归的最优状态估计算法,用于传感器数据融合、导航系统和机器人 领域,核心思想,通过预测-更新循环,结合系统动态模型和当前测量值,对系统状态 做出最优估计。

2.卡尔曼核心步骤

2.1 预测步骤

状态预测 误差协方差预测

2.2 更新步骤

卡尔曼增益计算 状态更新 误差协方差更新

3.关键性参数

3.1 初始化状态估计X

系统初始状态的给定值(猜测),对于心率之类的,例如给定一个正常值。 若不准确,较大的初始化误差协方差,可使滤波器快速收敛。

3.2 初始误差协方差P

初始话状态估计的不确定性,值越大越不确定。 如果是初始化状态已经很明确,可以设置较小值,如果

Read more

C++ 的显式转换static_cast和dynamic_cast (下

1.dynamic_cast的使用

dynamic_cast主要是针对多态场景(虚函数)。运行时会进行类型检查,所以dynamic_cast判断一下 转换是否成功,再进行下一步操作。

2.实际上代码理解

//基础控件类
class UiElement{
public:
        virtual void handle_msg(string &msg) = 0;  //消息改成引用模式
        virtual ~UiElement(){}
};

//具体文本类
class TextElement : public UiElement{
public:
    void h

Read more

C++ 的显式转换static_cast和dynamic_cast (上)

1.概念差异

static_cast:在编译时进行静态类型转换,不进行运行时检查,适用于非多态类型转换有效。 dynamic_cast:运行时通过RTTI(运行时类型信息),验证对象实际类型,确保转换的合法性,主要确保 多态类型的安全机制。

2.安全机制方面

对于常见的向上类型转换(本身安全,例如:父类指针指向子类对象),但是对于向下转型, static_cast 不安全,需要手动进行验证,但是对于dynamic_cast就是安全且自动检查的, 可以判断出,转换是否有效。

3.作用范围方面

static_cast,支持基本的类型转换,类继承层次的上行转换,但是无法处理多态类型的交叉转换。(零运

Read more

pkg-config工具使用

工具作用简述

Linux下,一个用户获取某个库、模块的所有编译相关信息的工具,作用在于可以通过 该工具,轻松获取库、模块的头文件路径信息、动态链接库路径信息。极大的提升了 开发过程中,指明使用的库、模块的各种信息。

pkg-config工具获取

对于部分Linux环境,默认有,对于没有,可以使用源码进行安装pkg-config工具。

pkg-config工作机制

第一种:获取系统/usr/lib下所有的*.pc 文件(文件里面含有库、模块信息) 第二种:PKG_CONFIG_PATH环境变量所指向的路径下的所有*.pc 文件 以opencv 的 pc文件示例: '''

Package Info

Read more

搭建和部署django服务器

本文主要是记录简单的创建一个基于django的webserver服务器。

0.环境搭建

python安装

下载python3代码,以下纪录从源码安装 默认源码没有ssl模块,需要先安装好openssl组件 将python3源码中

django安装

安装django,比较麻烦的是对应的requirement

1.django工程创建

django-admin startproject djtest
创建好的工程目录结构
创建的工程在workspace下面
/djtest        #新创建的工程
manage.py  #manage.py 工程管理文件
djtest     #创建的第一个a

Read more