自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 指针数组和数组指针

一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。一般一维的指针数组的一般形式为类型名*数组名[]由于[]的优先级比“*””高,因此先与[4]结合,形成p[4]形式,这显然是数组形式,表示p数组有4个元素,然后再与前面的“*””结合,“*””表示此数组是指针类型,每个数组元素(相当于一个指针变量)都可以指向一个整形。ab;ab;intret;i...

2022-07-27 22:39:43 282 1

原创 FFMPEG关键结构体——AVIOContext

这个结构体,是FFmpeg中有关io操作的顶层结构体,是avio的核心。FFmpeg支持打开本地文件路径和流媒体协议的URL。该结构体在libavformat/avio.h中定义①(*read_packet):读取音视频数据的函数。②(*write_packet):写入音视频数据的函数。③(*read_pause):暂停或恢复网络流媒体协议的播放 。在解码的情况下,buffer用于存储ffmpeg读入的数据。例如打开一个视频文件的时候,先把数据从硬盘读入buffer,然后在送给解码器用于解码。其中op

2022-07-03 17:55:59 627

原创 FFMPEG关键结构体——AVCodecContext

这是一个描述编码器上下文的数据结构,包含了众多编码器需要的参数信息该结构体在libavcodec/avcode.h中定义

2022-07-03 17:30:28 617

原创 FFMPEG关键结构体——AVFormatContext

AVFormatContext是存储音视频封装格式中包含的信息的结构体,也是FFmpeg中统领全局的结构体,对文件的封装、编码操作从这里开始。结构体的定义位于libavformat中的avformat.h

2022-07-03 17:21:13 767

原创 FFMPEG关键结构体——AVFrame

AVFrame结构体一般用于存储原始数据(即非压缩数据,例如对视频来说是YUV,RGB,对音频来说是PCM),此外还包含了一些相关的信息。比如说,解码的时候存储了宏块类型表,QP表,运动矢量表等数据。编码的时候也存储了相关的数据。因此在使用FFMPEG进行码流分析的时候,AVFrame是一个很重要的结构体。AVFramet通常在解码时包含较多的码流参数,编码时主要用于承载图像数据或者音频采样数据。结构体的定义位于libavutil/frame.h,这里介绍解码情况下的主要变量①(1)图像数据:对于pa

2022-07-03 17:08:27 6443 1

原创 FFmpeg学习——核心模块

① libavformat :用于各种音视频封装格式的生成和解析,包括获取编解码所需信息以生成编解码上下文结构和读取音视频帧等功能;②libavcodec :用于各种类型声音/图像编解码;③ libavutil :包含一些公共的工具函数;④libswscale :用于视频场景比例缩放、色彩映射转换;⑤libavfilter: 用于后期效果处理,比如添加水印等;⑥libavdevice:用于视频源的获取;...

2022-07-03 16:48:03 135

原创 H.264概念

一、H.264概念H.264是由ITU-T视频专家组和ISO/IEC动态图像专家组联合组成的联合组(JVT,Joint Video Team)提出的高度压缩数据视频编解码器标准。二、H.264的数据格式H.264是由**视频编码层(VCL)和网络适配层(NAL)**组成。①VCL:H264编码/压缩的核心,主要负责将视频数据编码/压缩,再切分。②NAL层的基本单位叫NALU(网络抽象层单元)blog.csdnimg.cn/25b161a63ce74813a55a1b090a51d6ea.png)

2022-05-28 10:39:32 420

原创 EasyCwmp源码分析

一、源码架构组成EasyCwmp设计包括两个部分:①EasyCwmp Core:它包括TR069 CWMP引擎,并负责与ACS服务器的通信。使用C语言开发。②EasyCwmp DataModel:它包含TR-06的DATAModel,并且符合某些DataModel标准,例如TR-098,TR-181,TR-104等。使用shell开发,只支持部分协议模型,在开发和维护过程效率比较低。二、EasyCwmp源码组成三、EasyCwmp文件依赖四、EasyCwmp执行流程详细代码参考easyc

2022-05-25 13:41:44 1167

原创 TR-069协议介绍

一、概念关于TR-069①协议命名TR-069, 全称“Technical Report 069”是由DSL Forum(一个非盈利性的全球行业联盟,致力于发展宽带网络范)。其成员包括通讯、设备、计算机、网络和服务提供商等行业的领先厂商,现已更名为“Broadband Forum”)修订一份技术规范,该规范是应用层的管理协议,命名为“CPE广域网管理协议(CPE WAN Management Protocol)”。②协议应用TR069协议提供了对下一代网络中家庭网络设备进行管理配置的通用框架、消息

2022-05-23 16:44:53 18051

原创 SNMP协议

一、概念SNMP(简单网络管理协议)是由互联网工程任务组定义的一套网络管理协议。该协议是基于简单网关监视协议指定的。SNMP可以使网络管理员通过一台工作站完成对计算机、路由器和其他网络设备的远程管理和监视。管理工作站可以远程管理所有支持该协议的网络设备,如监控网络状态、修改网络设备配置、接收网络事件警告等。SNMP协议能够帮助网络管理员提交网络管理效率,及时发现和解决网络问题,对网络增长做好规划。网络管理员还可以通过SNMP协议,接收网络节点的通知消息和警告事件报告等。二、SNMP架构组成SNMP

2022-05-18 14:18:24 3206

原创 使用wireshark抓包——ICMP包

一、ICMPIP协议的助手 —— ICMP 协议ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。ICMP 功能:ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。ICMP报文封装在IP数据报内部ICMP 会送请求报文:二、实验①访问可达的网络:(1)查看IP层的携带信息。类型 8 的是ICMP回送请求,类型 0 是回送响应。①访问不可达的网络:

2022-05-17 17:22:11 4974

原创 使用wireshark抓包并分析TCP四次挥手

一、四次挥手①第一次挥手:(FIN+ACK)客户端发送FIN+ACK包给服务端,用来关闭客户端到服务器的数据传送。此时客户端进入FIN_WAIT_1状态。②第二次挥手:(ACK)服务端收到FIN包后, 此时有可能服务端还在与其他客户端进行交互,但会先发送ACK包。确认字符ack=X+1,此时会发送一个新的序列号seq=Z给服务端。服务端就进入了CLOSE_WAIT(关闭等待)状态。TCP服务端通知高层的应用进程,客户端向服务端的方向就释放了,此时处于半连接状态。③第三次挥手:(FIN+ACK)

2022-05-17 14:16:51 6561 1

原创 使用wireshark抓包并分析TCP三次握手

一、实验过程1、TCP包抓取及分析过程①确认使用的协议,使用HTTP服务。选择https://www.baidu.com/作为目标地址。②启动Wireshark软件,点击开始抓包后。在浏览器地址输入https://www.baidu.com/③在Wireshark软件中使用过滤器,添加本机IP地址和TCP协议过滤条件2、开始实验①获取IP双方IP地址(便于过滤)获取本机IP地址获取https://www.baidu.com/的IP地址②在工具栏上的Filter对话框中填入过滤条件:

2022-05-17 11:55:58 11713

原创 网络编程第三方库——Libnet库(发送)

一、概念专业的构造和发送网络数据包的开发工具包,是个高层次的API函数库,允许开发者自己构造和发送网络数据包。头文件:#include<libnet.h>编译加:-lnet二、Libnet特点①隐藏了很多底层细节,省去了很多麻烦:如缓冲区管理、字节流顺序、校验和计算等问题,使开发者把重心放到程序的开发中。②可以轻松、快捷的构造任何形式的网络数据包,从而开发各种各样的网络程序。③使用非常广泛,例子著名的软件Ettercap、Firewalk、Snort、Tcpreplay等。④在1

2022-05-12 15:14:42 1456

原创 网络编程第三方库——libpcap库(接收)

一、主要作用1、补货各种数据包eg:网络流量统计2、过滤网络数据包eg:过滤掉本地的一些数据,类似防火墙3、分析网络数据包eg:分析网络协议,数据的采集4、存储网络数据包eg:保存补货的数据以为将来进行分析二、ubuntu安装指令sudo apt-get install libpcap-dev三、使用libcap库的开发步骤①打开网络设备②设备过滤规则(可选)③捕获数据④关闭网络设备头文件:#include <pcap.h>编译时需要加上: -lpcap四、

2022-05-12 11:19:16 2838

原创 原始套接字——发送UDP信息

一、报文格式信息传递:ubuntu---->windows二、组包①组MAC报头//1.组mac报文头部struct ether_header *eth_addr = (struct ether_header *)msg;//赋值mac地址memcpy(eth_addr->ether_dhost, dst_mac, 6);memcpy(eth_addr->ether_shost, src_mac, 6);//赋值帧类型eth_addr->ether_type

2022-05-09 16:01:19 1867

原创 网络编程中利用结构体方式组包(以arp攻击为例)

一、逐个元素组包//msg存放arp应答报文 unsigned char msg[]={ /*mac头部(14个字节)*/ 0x70,0x5A,0x0F,0x63,0xF5,0x9D, /*目的mac地址(xp的mac))*/ 0x00,0x00,0x00,0x00,0x00,0x00, /*源mac地址(伪装的mac)*/ 0x08,0x06, /*帧类型*/ /*ARP报文头部(28个字节)*/ 0x00,0x01, /*硬件类型*/

2022-05-06 17:23:27 383

原创 ARP攻击代码(ARP欺骗)

一、ARP攻击ARP欺骗攻击原理:ARP欺骗攻击建立在局域网主机间相互信任的基础上的。比如:假设A、B、C在同一个局域网中,网关为192.168.43.1,IP地址和MAC地址分别假设如下。假设C是攻击者。当A发广播询问:我是192.168.43.2,硬件地址macA,我想知道主机IP是192.168.43.3的硬件地址。此时B回应:我是192.168.43.3,硬件地址是macB。如果此时IP地址是192.168.43.4的C非法回应:我是IP192.168.43.3,我的硬件地址是macC

2022-05-06 15:31:51 2164 1

原创 ARP请求获得MAC地址代码

一、sendto函数sendto(sock_raw_fd, msg, msg_len, 0, (struct sockaddr*)&sll, sizeof(sll));注意:1、sock_raw_fd:原始套接字2、msg:发送的消息(封装好的数字协议)3、sll:本机网络接口,值发送的数据应该从本机的哪个网卡出去,而不是以前的目的地址原始套接字:组帧数据报文—>设置从本机的哪块网卡sendto发出去二、步骤①本地接口结构体头文件:#include <netpack.

2022-05-06 14:40:55 2644

原创 混杂模式概念

一、混杂模式1、指一台机器的网卡能够接收所以经过它的数据包,而不论其目的地址是否是它2、一般计算机网卡都工作在非混杂模式下,如果设置网卡为混杂模式需要root权限。二、Linux下设置1、设置混杂模式 ifconfig eth0 promisc2、取消混杂模式 ifconfig etho -promisc三、Linux下通过程序设置网卡混杂模式struct ifreq ethreq;strncpy(ethreq.ifr_name, "eth0", IFNAMSIZ);if(ioctl(s

2022-05-06 11:01:57 685

原创 利用C语言编写一个网络分析器

一、链路层数据格式mac报文:14个字节二、IP数据报文格式三、demo(网络分析器)recvfrom接收链路层帧数据,不经过网络层、传输层,不会给发送者的地址结构赋值,因此后两个参数为NULL。设计思路:①创建一个原始套接字。②while(1)利用recvfrom不断接收网络数据。③解析获得mac头部中的源mac和目的mac,并判断网络层的协议类型。④若是IP报文,则获得源IP和目的IP,并解析获得传输层协议类型。⑤若传输层为TCP或UDP协议,则解析报文获得数据#includ

2022-05-05 18:40:47 1865 5

原创 原始套接字和报文格式

一、原始套接字概述原始套接字(SOCK_RAW)概述:1、一种不同于SOCK_STREAM、SOCK_DGRAM的套接字,它实现于系统核心。2、可以接收本机网卡上的所以数据帧(数据包),对于监听网络流量和分析网络数据很有作用。3、开发人员可发送自己组装的数据包到网络上。4、广泛应用与高级网络编程。5、网络专家、黑客通常用此来编写奇特的网络程序。三种套接字对比:①流式套接字只能收发TCP协议的数据。②数据包套接字只能收发UDP协议的数据。③原始套接字可以收发内核没有处理的数据包,因此要

2022-05-05 11:48:39 2078

原创 路由器的工作流程

一、 网络拓扑图假设PC0 ping PC2①PC0发送报文经过网关至Router0②分析data中的目的IP是否和当前的路由器的某个接口同一个网络1.若是,数据发送给3.2的PC机(src_mac为3.1的mac,目的mac为3.2的mac)2.若否,就会立即查看路由表有没有下一跳的记录,如果有,就会分析路由器的哪个接口和下一跳设备相连。二、Packet Tracer配置流程①配置各PC机的IP地址(连接同一个交换机需在同一网段)。②配置PC机的网关,如图③打开网卡接口,使状态为UP

2022-05-03 12:46:35 2105

原创 TCP并发服务器(进程、线程、select)

一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计一般有多进程服务器、多线程服务器、I/O复用服务器等。一、进程版本优点:父子进程资源独立,某个进程结束,不会影响已有的进程,服务器更加稳定。缺点:消耗资源大demo:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/sock

2022-05-01 16:01:43 956

原创 多播的概念

一、多播概述多播:数据的收发仅仅在同一组中进行(相当于我往一个群里发,只有加入这个群的人才能收到)多播的特点:①多播地址标示一组接口。②多播可以用于广域网使用。③在IPv4,多播是可选的。二、多播地址IPv4的D类地址是多播地址十进制:244.0.0.1—239.255.255.254范围内任意一个IP地址都代表多播组。十六进制:E0.00.00.01—EF.FF.FF.FE多播地址向以太网MAC地址的映射多播的MAC地址:高24位固定,低23位将多播IP地址的低23位映射过

2022-04-28 11:50:03 2852 1

原创 广播的概念

一、广播广播:由一台主机向该主机所在子网内的所有主机发送数据的方式。广播只能用UDP或原始IP实现,不能用TCP。广播的MAC地址:ff.ff.ff.ff.ff.ff二、广播的用途单个服务器与多个服务器主机通信时减少分组流通。以下几个协议都用到广播:①地址解析协议(ARP)通过IP,获取对方的MAC地址②动态主机配置协议(DHCP)自动获取主机IP③网络时间协议(NTF)获取当前时间三、UDP广播的特点①处于同一子网的所有主机必须处理数据。②UDP数据包会沿协议向上一直到UDP

2022-04-28 10:53:03 2677

原创 TFTP协议(基于UDP)

一、TFTP简介TFTP:简单文件传送协议,最初用于引导无盘系统,被设计用来传输小文件特点: 基于UDP协议实现 不进行用户有效性认证数据传输模式: octet:二进制模式 netascii:文本模式 mail:已经不再支持二、TFTP通信过程1、服务器在69号端口等待客户端的请求2、服务器若批准此请求,则使用临时端口与客户端进行通信3、每个数据包的编号都有变化(从1开始)4、每个数据包都要得到ACK的确认如果出现超时,则需要重新发送最后的

2022-04-27 11:16:51 2142

原创 大小端字节序转换

特点①各主机的字节序可能不同,网络协议指定的通讯字节序为大端。②只有在多字节数据处理时才需要考虑字节序。③运行在同一台计算机的进程互相通信时,不需要考虑字节序。二、字节序转换函数头文件:#include <arpa/inet.h>①htonl函数(发送数据方使用)32位:(IPv4字节序的转换)uint32_t htonl(uint32_t host32bitvalue); 功能:将32位主机字节序数据转换成网络字节序数据。返回值:返回网络字节序的值。②ntohl函数(.

2022-04-24 17:45:24 6004

原创 大端存储和小端存储

一、大端存储高字节数据存储在低地址。二、 小端存储低字节数据存储在低地址注意:无论是大端存储还是小端存储,读取到的数据为0x0102030405三、大端存储或小端存储都是由系统设定的,其二者区别在于低地址存储的数据,因此可以写程序进行判断。#include <stdio.h>#include <stdlib.h>typedef union{ //共用体 成员公用一个空间,空间为共用体中的最大类型 unsigned short data;

2022-04-24 15:24:45 25126

原创 C++——STL常用算法

一、概述算法主要由头文件<algorithm>、<functional>、<numeric>组成。①<algorithm>是所以STL头文件中最大的一个,范围涉及比较、交换、查找、便利操作、复制、修改等。②<functional>体积很小,只包括几个序列上面进行简单数学计算的函数模板。③<numeric>定义了一些模板类,用于声明函数对象。二、常用遍历算法①for_each函数原型for_each(iterator be

2022-04-11 14:19:44 749

原创 C++——内建函数对象

一、内建函数对象意义①概念:STL内建了一些函数对象。②分类:算术仿函数关系仿函数逻辑仿函数③用法:这些仿函数所产生的对象,用法和一般函数完全相同。使用内建函数对象,需要引入头文件#include<functional>二、算术仿函数功能描述:实现四则运算(加减乘除)起着negate是一元运算,其他都是二元运算仿函数原型template<class T> T plus<T>; //加法仿函数template<class T>

2022-04-10 18:21:26 524

原创 C++——谓词

一、概念①返回bool类型的仿函数称为谓词。②如果operator()接受一个参数,那么叫做一元谓词。③如果operator()接受两个参数,那么叫做二元谓词。一元谓词#include <iostream>#include <string>#include <vector>#include<deque>#include<stack>#include<list>#include<set>#include

2022-04-10 17:46:12 921

原创 C++——STL函数对象

一、概念①重载函数调用操作符的类,其对象称为函数对象。②函数对象使用重载的()时,行为类似函数调用,也叫仿函数。本质:函数对象是一个类,不是一个函数。二、函数对象的使用特点:①函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值。②函数对象超出普通函数的概念,函数对象可以有自己的状态。③函数对象可以作为参数传递。eg:#include <iostream>#include <string>#include <vector>#incl

2022-04-10 17:13:48 883

原创 C++——STL案例

代码:#include <iostream>#include <string>#include <vector>#include<deque>#include<stack>#include<list>#include<set>#include<map>#include <algorithm>using namespace std;#define CHEHUA 0#defin.

2022-04-10 16:53:29 803

原创 C++——map/multimap容器

一、map基本概念简介:①map中所以的元素都是pair②pair中第一个元素为key(键值),起到索引左右,第二个元素为value(实值)③所以元素都会根据元素的键值自动排序本质:map/multimap属于关联式容器,底层结构是用二叉树实现。优点:①可以根据key值快速找到value值。map和multimap区别:①map不允许容器中有重复的key值元素。②multimap允许容器中有重复的key值。二、map的构造和赋值include <iostream>#i

2022-04-09 18:16:04 564

原创 C++——set/multiset容器

一、set基本概念简介:所以元素都会在插入时自动被排序。本质:set/multiset属于关联式容器,底层结构使用二叉树实现。二、set构造和赋值函数原型构造函数:set<T> st; //默认构造函数set(const set &st); //拷贝构造函数赋值:set& operator=(const set &st); //重载等号操作符三、set的大小和交换函数原型:size(); //返回容器中元素的数目empty();

2022-04-08 20:12:28 573

原创 C++——list容器

一、基本概念①功能:将数据进行链式存储链表(list):是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表的指针链接实现的链表的组成:链表由一系列结点组成。结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。STL中的链表是一个双向循环链表(两个指针,一个指向前一个结点,一个指向后一个结点)。链表的迭代器只支持前移和后移,属于双向迭代器。②优缺点优点:采用动态分配,不会造成内存浪费和溢出。指向插入和删除操作方便,只需修改指针即可。缺点:容器遍

2022-04-08 19:42:41 345

原创 C++——queue容器

一、基本概念概念:queue是一种先进先出的数据结构。一端插入数据,一端移出数据。队头:出队 pop队尾:入队 push只有队头队尾数据能被访问,不允许有遍历行为二、基本接口①构造函数函数原型queue<T> que; //queue采用模板类实现,queue对象的默认构造形式queue<const queue &que); //拷贝构造函数②赋值操作函数原型queue& operator=(const queue &que);

2022-04-08 17:03:31 644

原创 C++——stack容器

一、基本概念概念:stack是一种后进先出的数据结构,只有一个出口。不允许有遍历行为。可以判断容器是否为空,元素个数二、常用接口①构造函数函数原型stack<T> stk; //stack采用模板类实现,stack对象的默认构造形式stack<const stack &stk>; //拷贝构造函数②赋值操作函数原型stack& operator=(const stack &stk); //重载等号操作符③数据存取函数原型

2022-04-08 16:51:59 637

原创 C++——deque容器

一、基本概念功能:双端数组,可以对头端进行插入删除操作deque与vector区别:①vector对于头部的插入效率低,数据量越大,效率越低。②deque相对而言,对头部的插入删除速度会比vector块。③vector访问元素时的速度会比deque块,这和两者内部实现有关。工作原理:deque内部有个中控器,维护每段缓冲区的内容,缓冲区中存放真实数据,中控区维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间。二、构造函数功能描述:deque容器构造函数原型:deque

2022-04-07 16:14:47 184

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除