# study_notes **Repository Path**: caticat/study_notes ## Basic Information - **Project Name**: study_notes - **Description**: 学习笔记 - **Primary Language**: 其他 - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-04-10 - **Last Updated**: 2025-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 学习笔记 因项目过大,gitee的lfs系统需要收费,项目迁移至[github](https://github.com/caticat/study_note.git)上去了 - [./](README.md) - [asm](asm/README.md) - [cs](cs/README.md) - [cpp](cpp/README.md) - [go](go/README.md) - [lua](lua/README.md) - [regexp](regexp/README.md) - [signal](signal/README.md) - [network](network/README.md) - [data_struct](data_struct/README.md) - [cheat_engine](cheat_engine/README.md) ## TODO - 增加技术的实际应用 - 服务器框架搭建 - golang - etcd - docker - 游戏制作 - unity - xlua - python抓包拦截发包 - redis - [主从集群学习](https://www.zhihu.com/question/60883638/answer/2972223083) - k8s - docker - electron - 服务发现/配置中心 - zookeeper - etcd - nacos - kafka - hadoop - hbase - nginx - unity - xlua - gdb - [学习地址:https://github.com/hellogcc/100-gdb-tips](https://github.com/hellogcc/100-gdb-tips) - 网络基础知识 ## 学习顺序 [参考视频](https://www.bilibili.com/video/BV1MU4y1D7xj/?spm_id_from=333.337.search-card.all.click&vd_source=84355e8137646ee1e7eea0757bac6c20) - 计算机组成原理 - [x] [计算机科学速成课](https://www.bilibili.com/video/BV1EW411u7th?p=40&vd_source=84355e8137646ee1e7eea0757bac6c20) - 书 - 计算机是怎样跑起来的 - 程序是怎样跑起来的 - 补充视频 - 物理速成科 - Crash Course Physics - Crash Course Games - Crash Course Study Skills - `http://thecrashcourse.com/courses` - 操作系统 - [【哈工大】操作系统 李治军(全32讲)](https://www.bilibili.com/video/BV19r4y1b7Aw/?spm_id_from=333.337.search-card.all.click) - 书 - 操作系统导论 - 深入理解计算机系统 - 数学之美-吴军 - 编译原理 - 计算机网络 - [计算机网络微课堂(有字幕无背景音乐版)](https://www.bilibili.com/video/BV1c4411d7jb/?spm_id_from=333.337.search-card.all.click&vd_source=84355e8137646ee1e7eea0757bac6c20) - 书 - 计算机网络-自顶向下方法 - TCP/IP详解 卷一:协议 - 数据结构 - [浙江大学数据结构 陈越](https://www.bilibili.com/video/BV1H4411N7oD/?spm_id_from=333.337.search-card.all.click&vd_source=84355e8137646ee1e7eea0757bac6c20) - 书 - 大话数据结构 - 数据结构与算法之美 - leetbook - 数据库系统 - [【公开课】数据库系统概论(王珊老师)(完结)](https://www.bilibili.com/video/BV1pW411W7Do/?spm_id_from=333.337.search-card.all.click&vd_source=84355e8137646ee1e7eea0757bac6c20) - 书 - mysql必知必会 - mysql技术内幕--innodb存储引擎 ## c++学习目录 ```txt 第1章 如何才能学好C++,如何高效学习? 1-1 如何才能学好C++ 第2章 开始学习C++ 2-1 准备开发环境 2-2 第一个C++程序 2-3 C++输出数据 2-4 程序的注释 2-5 使用变量 2-6 使用常量 2-7 标识符的命名 第3章 C++的运算 3-1 C++输入数据 3-2 算术运算 3-3 自增和自减 3-4 赋值运算 3-5 C++11初始化赋值 3-6 关系运算 3-7 逻辑运算 3-8 逗号运算 3-9 运算的优先级 第4章 C++ 条件分支结构 4-1 if语句的基本结构 4-2 if语句的注意事项 4-3 嵌套使用if语句 4-4 多条件的if语句 4-5 if语句中的逻辑表达式 4-6 三目运算 4-7 switch语句 第5章 C++循环结构 5-1 while循环语句 5-2 循环的跳转 5-3 for循环语句 5-4 嵌套使用循环 5-5 do…while循环语句 5-6 goto语句 第6章 C++基础函数 6-1 函数的声明和定义 6-2 函数的调用 6-3 变量的作用域 6-4 函数参数的传递 6-5 函数分文件编写 6-6 在VS中调试程序 6-7 递归函数 第7章 C++的数据类型 7-1 sizeof关键字 7-2 整型的基本概念 7-3 整数的书写 7-4 C++11的long long类型 7-5 浮点数 7-6 字符型的基本概念 7-7 转义字符 7-8 C++11的原始字面量 7-9 字符串型 7-10 布尔型 7-11 数据类型的转换 7-12 数据类型的别名typedef 第8章 C++指针 8-1 指针的基本概念 8-2 使用指针 8-3 指针用于函数的参数 8-4 用const修饰指针 8-5 void关键字 8-6 C++内存模型 8-7 动态分配内存new和delete 8-8 二级指针 8-9 空指针 8-10 野指针 8-11 函数指针和回调函数 第9章 C++数组 9-1 一维数组的基本概念 9-2 一维数组和指针 9-3 一维数组的越界 9-4 一维数组用于函数的参数 9-5 用new动态创建一维数组 9-6 一维数组的排序qsort 9-7 一维数组的查找-折半查找 9-8 C风格字符串 9-9 二维数组 9-10 二维数组用于函数的参数 9-11 多维数组 第10章 C++结构体、共同体、枚举 10-1 结构体的基本概念 10-2 结构体指针 10-3 结构体数组 10-4 结构体嵌入数组和结构体 10-5 结构体中的指针 10-6 简单链表 10-7 共同体 10-8 枚举 第11章 C++引用 11-1 引用的基本概念 11-2 引用的本质 11-3 引用用于函数的参数 11-4 引用的形参和const_ 11-5 引用用于函数的返回值 11-6 各种形参的使用场景 第12章 C++函数重载、内联函数 12-1 函数的默认参数 12-2 函数的重载的基本概念 12-4 内联函数 第13章 高质量作业实践-C++常规题 13-1 如何掌握一门编程语言 13-2 选出妃子、宫女和嬷嬷 13-3 根据数字判断月份 13-4 循环计数 13-5 循环选数 13-6 玩转字符 13-7 计算字符串的长度 13-8 显示字符串中的字符 13-9 字符串反转 13-10 二维数组的应用 13-11 把整数转换成字符串 13-12 把字符串转换成整数 13-13 实现strcpy()和strncpy()函数 13-14 实现strcat()和strncat() 13-15 实现strchr()和strrchr() 13-16 实现strcmp()和strncmp() 13-17 实现strstr() 13-18 删除字符串右边指定的字符 13-19 删除字符串左边指定的字符 13-20 删除字符串中间的字符串 13-21 统计字符串的字数 13-22 拆分字符串 13-23 解析xml字符串(上) 13-24 解析xml字符串(下) 13-25 随机数 13-26 随机发牌 第14章 高质量作业实践-C++数据结构 14-1 数据结构概要 14-2 静态顺序表 14-3 动态顺序表 14-4 单链表的建立 14-5 单链表的其它操作 14-6 双链表 14-7 栈 14-8 队列 14-9 冒泡排序 14-10 选择排序 14-11 插入排序 14-12 希尔排序 14-13 快速排序 14-14 计数排序 14-15 桶排序 第15章 C++的类和对象 15-1 从结构体到类 15-2 类的访问权限 15-3 简单使用类 15-4 构造函数和析构函数 15-6 拷贝构造函数 15-7 浅拷贝和深拷贝 15-8 初始化列表 15-9 const修饰成员函数 15-10 this指针 15-11 静态成员 15-12 简单对象模型 15-13 友元 第16章 C++中的运算符重载、类型转换 16-1 运算符重载基础 16-2 重载关系运算符 16-3 重载左移运算符 16-4 重载下标运算符 16-5 重载赋值运算符 16-6 重载new&delete运算符 16-7 实现简单的内存池 16-8 重载括号运算符 16-9 重载一元运算符 16-10 自动类型转换 16-11 转换函数 第17章 C++的继承与派生 17-1 继承的基本概念 17-2 继承方式 17-3 继承的对象模型 17-4 如何构造基类 17-5 名字遮蔽与类作用域 17-6 继承的特殊关系 17-7 多继承与虚继承 17-8 多态的基本概念 17-9 多态的应用场景 17-10 多态的对象模型 17-11 如何析构派生类 17-12 纯虚函数和抽象类 17-13 运行阶段类型识别dynamic_cast 17-14 typeid运算符和type_info类 第18章 C++的函数模板 18-1 自动推导类型auto 18-2 函数模板的基本概念 18-3 函数模板的注意事项 18-4 函数模板的具体化 18-5 函数模板分文件编写 18-6 函数模板高级 第19章 C++的类模板 19-1 模板类的基本概念 19-2 模板类的示例-栈 19-3 模板类的示例-数组 19-4 嵌套使用模板类 19-5 模板类具体化 19-6 模板类与继承 19-7 模板类与函数 19-8 模板类与友元 19-9 模板类的成员模板 19-10 将模板类用作参数 第20章 预处理、编译、命名空间、类型转换 20-1 编译预处理 20-2 编译和链接 20-3 C++命名空间 20-4 C++类型转换static_cast 第21章 STL容器 21-1 string容器基础 21-2 string容器的设计目标 21-3 string容器的操作 21-4 vector容器 21-5 迭代器 21-6 基于范围的for循环 21-7 list容器的构造 21-8 list容器的操作 21-9 pair键值对 21-10 红黑树 21-11 map容器 21-12 哈希表 21-13 unordered_map容器 21-14 queue容器 21-15 STL其它容器 第22章 STL算法 22-1 STL算法for_each 22-2 STL算法find_if 22-3 STL算法sort 22-4 STL算法总结 第23章 智能指针 23-1 智能指针unique_ptr基础 23-2 智能指针unique_ptr更多技巧 23-3 智能指针shared_ptr 23-4 智能指针的删除器 23-5 智能指针weak_ptr 第24章 文件操作 24-1 文件操作-写入文本文件 24-2 文件操作-读取文本文件 24-3 文件操作-写入二进制文件 24-4 文件操作-读取二进制文件 24-6 文件操作-fstream类 24-7 文件操作-随机存取 24-8 文件操作-缓冲区和流状态 第25章 异常、断言 25-1 C++异常 25-2 如何避免异常 25-3 C++断言 第26章 C++11新标准 26-1 C++11新标准 26-2 委托构造和继承构造 26-3 lambda函数 26-4 右值引用 26-5 移动语义 26-6 完美转发 26-7 可变参数模板 26-8 时间操作chrono库 第27章 C++11线程 27-1 创建线程 27-2 线程资源的回收 27-3 this_thread的全局函数 27-4 call_once函数 27-5 native_handle函数 27-6 线程安全 27-7 互斥锁 27-8 条件变量-生产消费者模型 27-9 生产消费者模型代码分析 27-10 原子类型atomic 第28章 可调用对象的绑定器和包装器 28-1 可调用对象 28-2 包装器function 28-3 绑定器bind 28-4 可变函数和参数 28-5 回调函数的实现 28-6 如何取代虚函数 第29章 Linux编程 29-1 Linux的Hello world 29-2 静态库和动态库 29-3 makefile 29-4 main函数的参数 29-5 gdb常用命令 29-6 gdb调试core文件 29-7 gdb调试正在运行中的程序 29-8 Linux的时间操作 29-9 Linux的目录操作 29-10 Linux的系统错误 29-11 目录和文件的更多操作 第30章 进程和进程控制 30-1 Linux的信号 30-2 进程终止 30-3 调用可执行程序 30-4 创建进程 30-5 僵尸进程 30-6 多进程与信号 30-7 共享内存 30-8 循环队列 30-9 信号量 30-10 多进程的生产消费者模型 30-11 UNIX环境高级编程 第31章 网络编程基础 31-1 第一个网络通讯程序 31-2 基于Linux的文件操作 31-3 socket函数详解 31-5 万恶的结构体 31-6 封装socket客户端 31-7 封装socket服务端 31-8 多进程的服务端 31-9 实现文件传输功能 31-10 三次握手与四次挥手_ 31-11 TCP缓存 第32章 课程总结 32-1 课程总结 ``` ## 临时记录 ```txt http://t.zoukankan.com/dongxixi-p-13193572.html python实现抓包、解析流程,超过瘾! 今日又无聊~~~感觉浏览器检查太麻烦,于是乎想搞个抓包脚本监听本地网卡~~~~代码贴上,复制即可使用~不行那就装个包哦!嘿嘿 import os import dpkt import socket import datetime import uuid from scapy.sendrecv import sniff from scapy.utils import wrpcap def get_local_ip(): hostname = socket.gethostname() # 获取本机内网ip local_ips = socket.gethostbyname_ex(hostname)[-1] return local_ips def body_transfer(body): str_body = body.decode() body_ls = str_body.split("&") for item in body_ls: key_, value_ = item.split("=") print(" %s: %s"% (key_, value_)) def get_dpkt(): dpkt_ = sniff(count = 100) #这里是针对单网卡的机子,多网卡的可以在参数中指定网卡,例:iface=Qualcomm QCA9377 802.11ac Wireless Adapter _uuid = uuid.uuid1() filename = f"{_uuid}.pcap" wrpcap(filename, dpkt_) return filename def print_pcap(pcap): try: local_ips = get_local_ip() for timestamp, buf in pcap: eth = dpkt.ethernet.Ethernet(buf) #获得以太包,即数据链路层包 # print("ip layer:"+eth.data.__class__.__name__) #以太包的数据既是网络层包 # print("tcp layer:"+eth.data.data.__class__.__name__) #网络层包的数据既是传输层包 # print("http layer:" + eth.data.data.data.__class__.__name__) #传输层包的数据既是应用层包 # # print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打印出包的抓取时间 if not isinstance(eth.data, dpkt.ip.IP): print('Non IP Packet type not supported %s' % eth.data.__class__.__name__) continue ip = eth.data src_ip = socket.inet_ntoa(ip.src) dst_ip = socket.inet_ntoa(ip.dst) do_not_fragment =bool(ip.off & dpkt.ip.IP_DF) more_fragments =bool(ip.off & dpkt.ip.IP_MF) fragment_offset = ip.off & dpkt.ip.IP_OFFMASK if isinstance(ip.data, dpkt.tcp.TCP): # Set the TCP data tcp = ip.data # Now see if we can parse the contents as a HTTP request # 看看是否可以将内容解析为HTTP请求 try: request = dpkt.http.Request(tcp.data) print('IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)' % (src_ip + "(本机)" if src_ip in local_ips else src_ip, dst_ip, ip.len, ip.ttl, do_not_fragment, more_fragments,fragment_offset)) print("URL: %s" % request.headers.get("host") + request.uri) print("METHOD: %s" % request.method.upper()) print("Headers: ") for key, value in request.headers.items(): print(" %s: %s" %(key, value)) print("Body:") body_transfer(request.body) print("Data:") body_transfer(request.data) # print('HTTP request: %s ' % repr(request)) print() except (dpkt.dpkt.NeedData, dpkt.dpkt.UnpackError): continue # Pull out fragment information (flags and offset all packed into off field, so use bitmasks) except Exception as error: pass def main(): while True: filename = get_dpkt() with open(filename, "rb") as f: pcap = dpkt.pcap.Reader(f) print_pcap(pcap) os.remove(filename) if __name__ =='__main__': main() 实现输出: IP: 192.168.8.4(本机) -> 101.226.211.223 (len=770 ttl=128 DF=1 MF=0 offset=0) URL: client.show.qq.com/cgi-bin/qqshow_user_props_info METHOD: POST Headers: accept: */* accept-language: zh-CN x-flash-version: 32,0,0,330 content-type: application/x-www-form-urlencoded content-length: 115 accept-encoding: gzip, deflate user-agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E) host: client.show.qq.com connection: Keep-Alive cache-control: no-cache cookie: pgv_pvid=3799000690; euin_cookie=640439D46CDC58665AB4F5F3B323373956EAFBBF9BF51FDF; ptcz=5d07117027510d320908125b0ef4126ddda91a6d014acaf2f052391f96270a23; pgv_pvi=2758768640; uin_cookie=207223216; RK=3QRly54pcL Body: senduin: 24350438 uin: 20722321 sVersion: 2014 ckey: B2A96E6CCA568A891AA2FEFF214DC03A73FC7D583079467F01117641FAD33BA9 Data: ```