网络安全项目实战(二)--报文检测

4. 源码管理系统

  • 目标
    • 了解源码管理
    • 了解源码管理的工具
    • 了解源码管理流程
    • 了解git源码管理的分支

4.1. 源码管理简述

在现代软件开发项目中,要成为一个有效的软件开发人员,我们必须能够与其他项目贡献者并行进行开发。

源代码管理(SCM)系统不是什么新思想。为了编写一些能够更快速、简单地开发以后软件项目的软件,已经进行了很多尝试。

最新的源代码解决方案都包含了版本控制系统,它可以对源代码的修改进行回滚,从而将有害的代码剔除出项目之外,或者简单地跟踪哪些人修改了代码的哪些行的内容。版本控制系统试图解决开发人员在试图同时对某个文件进行修改时所出现的冲突问题,可以防止用户覆盖其他人所作的修改。源代码管理使用的很多流行解决方案都试图解决以前 SCM 解决方案中的失效问题。

集中化的版本控制系统通常采用两种方式:

  • 有些提供了文件锁来防止多个用户的并行访问。这些系统对文件进行加锁,这样在某个时间只有一个开发人员对中心仓库具有写入权限。
  • 另外一些工具,例如 CVS,允许多个开发人员同时对相同的文件进行编辑,并提供了一些机制稍后合并这些修改。

流行的版本控制系统包括:

  • CVS
  • Subversion
  • Arch
  • Bazaar
  • BitKeeper

4.2. Git

4.2.1. 什么是 Git?

非常简单地说,Git 是 Linus Torvalds 最近实现的源代码管理软件。正如所提供的文档中说的一样,“Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。”

Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如,X.org 最近就迁移到 Git 上来了,很多 Freedesktop.org 的项目也迁移到了 Git 上。

Git 目前主要由寻找 CVS 或专有代码管理解决方案替代物的软件开发人员所使用。Git 与 CVS 有很多区别:

  • 分支更快、更容易。
  • 支持离线工作;本地提交可以稍后提交到服务器上。
  • Git 提交都是原子的,且是整个项目范围的,而不像 CVS 中一样是对每个文件的。
  • Git 中的每个工作树都包含一个具有完整项目历史的仓库。
  • 没有哪一个 Git 仓库会天生比其他仓库更重要。

4.3. Git源码管理的中的流程

  • 源码复制和传播
    • 源代码向研发部门以外复制必须获得”总经理“的书面授权。并必需记录复制人、批准人、复制时间、复制目的、文件流向、文件版本或内容。
    • 源代码的借阅、复制必须进行详细的登记,必需记录借阅人、批准人、借阅时间、借阅目的、文件流向、文件版本或内容、归还时间。
    • 对于因合作需要,需要向外复制、传播、分发源代码的,不论是全部还是部分代码和资料,均必需和对方签订技术、源码的保密协定,明确对方应当承担的对源码保密的责任和义务。
  • 源码的版本管理

    • 版本号:由“<主版本号>.<次版本号>.<修订号>”三段组成,中间是点号分开。
  • 源码的提交管理

    • 源码修改完成后,提交到”非主分支“, 分支命名可关联bug编号(建议)
    • 提交源码评审, 一般评审人员具有一票否决。
    • 评审通过后,提交源码merge申请,
    • 专人(配置管理员)或源码的Maintainer负责合并

4.4. 成功的Git分趾模型

4.4.1. 主要分支

在核心上,开发模式受到现有模型的极大启发。中央回购拥有两个主要的分支,无限生命:

  • 主分支
    • master
  • 开发分支
    • develop
  • 发布分支
    • release-* 每个Git用户应该熟悉该master分支origin。与master分支并行,存在另一个分支develop。

我们认为origin/master是源代码HEAD总是反映生产就绪状态的主要分支 。

我们认为origin/develop是主要的分支,源代码 HEAD总是反映出下一个版本的最新交付发展变化的状态。有人会称之为“整合分支”。这是每个自动夜间建造的地方。

当develop分支中的源代码达到稳定点并准备释放时,所有这些更改都应该以master 某种方式合并,然后用发布号标记。将详细讨论如何做到这一点。

因此,每次将更改合并到一起时master,根据定义,这是一个新的生产版本。我们往往对此非常严格,所以理论上,我们可以使用Git钩子脚本在每次提交时自动构建和推出我们的软件到我们的生产服务器 master。

5. pcap文件解析

  • 目标
    • 了解 使用tcpdump生成pcap文件的方式
    • 掌握 使用wireshark生成pcap文件的方式
    • 掌握 pcap文件的格式,
    • 应用编码会解析pcap文件

5.1. 获取pcap文件

5.1.1. pcap是什么

pcap是一种数据流格式,wireshark软件可以直接把网络数据流变成这种格式。

在Linux里,pcap可以说是一种通用的数据流格式,很多开源的项目都需要用到这种格式的文件。

5.1.2. 如何获取 pcap文件

一般通过tcpdump或者 wireshark工具获取pcap文件。

  • 使用tcpdump命令获取pcap文件

  • tcpdump基本用法 tcpdump [ -i interface ] [ -w file ] [ expression ]

    • -i : 监听 interface. 如果 不指定 接口, tcpdump 在 系统 的 接口 清单 中, 寻找 号码最小, 已经 配置好的 接口 (loopback 除外)
    • -w 把 原始报文 存进 file, 不做 分析 和 显示. 它们 可以 以后 用 -r 选项 显示. 如果 file 是 -'', 就 写往 标准输出.
    • -v (稍微多一点) 繁琐的输出. 例如, 显示 IP 数据报 中的 生存周期 和 服务类型.
    • -vv 更繁琐的输出. 例如, 显示 NFS 应答报文 的 附加域.
Panda.Guo@2018-07-26 20:56:13 $ sudo tcpdump  -i wlp2s0 -w ~/wl.pcap -vv
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C69 packets captured
69 packets received by filter
0 packets dropped by kernel
Panda.Guo@2018-07-26 20:56:51 $ 

通过Ctrl+c随时选择终止。

  • 使用wireshark工具抓取pcap文件

    • 启动 wireshark,
    • 选择 “接口”后, 点击“开始捕获分组” 按钮,开始抓包
    • 。。。。
    • 选择 “停止捕获分组”
    • 选择“文件”-> "保存", 弹出对话框,如下图所示

 

      • 在1位置,输入pcap文件名称
      • 在2位置, 选则pcap类型。

5.2. pcap文件格式

5.2.1. pcap格式

上图是pcap的格式结构图,分成两大部分:

  • Global Header (共 24 Byte)整个数据流文件,只会有一个 Global Header,它定义了本文件的读取规则、最大储存长度限制等内容;

 

    • Magic:4Byte:标记文件开始,并用来识别文件自己和字节顺序。0xa1b2c3d4用来表示按照原来的顺序读取,0xd4c3b2a1表示下面的字节都要交换顺序读取。考虑到计算机内存的存储结构,一般会采用0xd4c3b2a1,即所有字节都需要交换顺序读取。
    • Major:2Byte: 当前文件主要的版本号,一般为 0x0200【实际上因为需要交换读取顺序,所以计算机看到的应该是 0x0002】
    • Minor:2Byte: 当前文件次要的版本号,一般为 0x0400【计算机看到的应该是 0x0004】
    • ThisZone:4Byte:当地的标准时间,如果用的是GMT则全零,一般都直接写 0000 0000
    • SigFigs:4Byte:时间戳的精度,设置为 全零 即可
    • SnapLen:4Byte:最大的存储长度,如果想把整个包抓下来,设置为 ffff 0000,但一般来说 ff7f 0000就足够了【计算机看到的应该是 0000 ff7f 】
    • LinkType:4Byte:链路类型,常用类型有以下几种,其他的,需要用的时候再查就行了。
      • 0 BSD loopback devices, except for later OpenBSD
      • 1 Ethernet, and Linux loopback devices
      • 6 802.5 Token Ring
      • 7 ARCnet
      • 8 SLIP
      • 9 PPP
      • 10 FDDI
      • 100 LLC/SNAP-encapsulated ATM
      • 101 "raw IP", with no link
      • 102 BSD/OS SLIP
      • 103 BSD/OS PPP
      • 104 Cisco HDLC
      • 105 802.11
      • 108 later OpenBSD loopback devices (with the AF_value in network byte order)
      • 113 special Linux "cooked" capture
      • 114 LocalTalk
  • Packet Header(共 16 Byte) Packet Header可以有多个,每个Packet Header后面会跟着一串Packet Data,Packet Header定义了Packet Data的长度、时间戳等信息。

 

    • Timestamp:被捕获时间的高位,单位是seconds
    • Timestamp:被捕获时间的低位,单位是microseconds
    • Caplen: 数据包长度:32位 ,标识所抓获的数据包保存在pcap文件中的实际长度,以字节为单位。

      • a 32-bit value giving the number of bytes of packet data that were captured;
    • Len:数据包实际长度: 所抓获的数据包的真实长度,如果文件中保存不是完整的数据包,那么这个值可能要比前面的数据包长度的值大。

      • a 32-bit value giving the actual length of the packet, in bytes (which may be greater than the previous number, if you are not saving the entire packet).
  • Packet Data(共 Caplen Byte)在包头之后,就是数据包的数据了,数据长度就是Caplen个Byte,

    • 在这之后就是一个新的Packet Header,定义一个新的Packet Data属性,再接一个新的Packet Data,如此循环。
    • PCAP文件里面并没有规定捕获的Packet数据包之间有什么间隔字符串,下一组数据在文件中的起始位置。我们需要靠第一个Packet包确定

 

5.2.2. 实例剖析

Panda.Guo@2018-06-26 20:01:00 $ hd ~/wl.pcap  | less
00000000  d4 c3 b2 a1 02 00 04 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 04 00 01 00 00 00  08 d9 28 5a 85 ba 0b 00  |..........(Z....|
00000020  3c 00 00 00 3c 00 00 00  50 9a 4c 20 65 dc dc fe  |<...<...P.L e...|
00000030  18 2a d5 c9 08 00 45 00  00 28 13 de 40 00 75 06  |.*....E..(..@.u.|
00000040  7b f6 ca 59 e9 64 c0 a8  01 95 01 bb 15 bd 47 26  |{..Y.d........G&|
00000050  64 57 1b f9 dd fc 50 10  03 fe 78 ef 00 00 00 00  |dW....P...x.....|
00000060  01 95 01 bb 08 d9 28 5a  85 ba 0b 00 4b 01 00 00  |......(Z....K...|
00000070  4b 01 00 00 50 9a 4c 20  65 dc dc fe 18 2a d5 c9  |K...P.L e....*..|
00000080  08 00 45 00 01 3d 13 df  40 00 75 06 7a e0 ca 59  |..E..=..@.u.z..Y|
00000090  e9 64 c0 a8 01 95 01 bb  15 bd 47 26 64 57 1b f9  |.d........G&dW..|
000000a0  dd fc 50 18 03 fe 98 00  00 00 17 03 02 01 10 3c  |..P............<|
000000b0  c4 c4 aa 39 d0 30 29 66  3e e5 2d 2d 39 60 64 ed  |...9.0)f>.--9`d.|
.....

5.3. pcap 文件解析关键代码

示例代码如下:


函数名称:pcap_t *pcap_open_offline(char *fname, char *ebuf) 
函数功能:打开以前保存捕获数据包的文件,用于读取。 
参数说明:fname参数指定打开的文件名。该文件中的数据格式与tcpdump和tcpslice兼容。”-“为标准输入。ebuf参数则仅在pcap_open_offline()函数出错返回NULL时用于传递错误消息。函数名称:int pcap_loop(pcap_t *p, int cnt,pcap_handler callback, u_char *user) 
函数功能: 捕获并处理数据包。此函数在cnt个数据包被处理或出现错误时才返回,但读取超时不会返回。。cnt参数为负值时pcap_loop()函数将始终循环运行,除非出现错误。函数名称:void pcap_close(pcap_t *p) 
函数功能:关闭p参数相应的文件,并释放资源。
对于 pcap_loop:
pcap_loop原型是pcap_loop(pcap_t *p,int cnt,pcap_handler callback,u_char *user)其中第一个参数是pcap_open_offline返回的句柄,第二个是指定捕获的数据包个数,如果为-1则无限循环捕获。第四个参数user是留给用户使用的。第三个是回调函数其原型如下:pcap_callback(u_char* argument,const struct pcap_pkthdr* packet_header,const u_char* packet_content)其中参数pcap_content表示的捕获到的数据包的内容参数argument是从函数pcap_loop()传递过来的。注意:这里的参数就是指 pcap_loop中的 *user 参数参数pcap_pkthdr 表示捕获到的数据包基本信息,包括时间,长度等信息.另外:回调函数必须是全局函数或静态函数,其参数默认,比如pcap_loop()可以写成pcap_loop(pcap_handle,10,pcap_callback,NULL)不能往里面传递实参.
pcap_loop和callback之间参数存在联系:pcap_loop的最后一个参数user是留给用户使用的,当callback被调用的时候这个值会传递给callback的第一个参数(也叫user),callback的最后一个参数p指向一块内存空间,这个空间中存放的就是pcap_loop抓到的数据包。callback的第二个参数是一个结构体指针,该结构体定义如下:// /usr/include/pcap/pcap.hstruct pcap_pkthdr {struct timeval ts;    /* 时间戳  */bpf_u_int32 caplen;    /* 已捕获部分的长度 */bpf_u_int32 len;    /* 该包的脱机长度 */
};这个结构体是由pcap_loop自己填充的,用来取得一些关于数据包的信息所以,在callback函数当中只有第一个user指针是可以留给用户使用的,如果你想给callback传递自己参数,那就只能通过pcap_loop的最后一个参数user来实现了

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 自动化之处理docx文件(一)

批量筛选docx文档中关键词 文章目录 批量筛选docx文档中关键词前言一、做成什么样子二、基本架构三、前期输入模块1.引入库2.路径输入3.关键词输入 三、数据处理模块1.基本架构2.如果是docx文档2.1.读取当前文档内容2.2.遍历匹配关键字2.3.触发匹配并记录日志 3.如果目录下还有…

Linux shell编程学习笔记35:seq

0 前言 在使用 for 循环语句时&#xff0c;我们经常使用到序列。比如&#xff1a; for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i * 2 $(expr $i \* 2)"; done 其中的 1 2 3 4 5 6 7 8 9 10;就是一个整数序列 。 为了方便我们使用数字序列&#xff0c;Linux提供了…

Python 小程序之PDF文档加解密

PDF文档的加密和解密 文章目录 PDF文档的加密和解密前言一、总体构思二、使用到的库三、PDF文档的加密1.用户输入模块2.打开并读取文档数据3.遍历保存数据到新文档4.新文档进行加密5.新文档命名生成路径6.保存新加密的文档 四、PDF文档的解密1.用户输入模块2.前提准备2.文件解密…

jmeter和postman的对比

1.创建接口用例集&#xff08;没区别&#xff09; Postman是Collections&#xff0c;Jmeter是线程组&#xff0c;没什么区别。 2.步骤的实现&#xff08;有区别&#xff09; Postman和jmeter都是创建http请求 区别1&#xff1a;postman请求的请求URL是一个整体&#xff0c;j…

玩转大数据15:常用的分类算法和聚类算法

前言 分类算法和聚类算法是数据挖掘和机器学习中的两种常见方法。它们的主要区别在于处理数据的方式和目标。 分类算法是在已知类别标签的数据集上训练的&#xff0c;用于预测新的数据点的类别。聚类算法则是在没有任何类别标签的情况下&#xff0c;通过分析数据点之间的相似性…

智能优化算法应用:基于帝国主义竞争算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于帝国主义竞争算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于帝国主义竞争算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.帝国主义竞争算法4.实验参数设定…

图论——二分图

图论——二分图 二分图通俗解释 有一个图&#xff0c;将顶点分成两类&#xff0c;边只存在不同类顶点之间&#xff0c;同类顶点之间设有边。称图 G 为二部图&#xff0c;或称二分图&#xff0c;也称欧图。 性质 二分图不含有奇数环图中没有奇数环&#xff0c;一定可以转换为二…

OpenAI Q* (Q Star)简单介绍

一、Q Star 名称由来 Q* 的两个可能来源如下&#xff1a; 1&#xff09;Q 可能是指 "Q-learning"&#xff0c;这是一种用于强化学习的机器学习算法。 Q 名称的由来*&#xff1a;把 "Q*"想象成超级智能机器人的昵称。 Q 的意思是这个机器人非常善于做决定…

pytest-fixtured自动化测试详解

fixture的作用 1.同unittest的setup和teardown,作为测试前后的初始化设置。 fixture的使用 1.作为前置条件使用 2.fixture的的作用范围 1.作为前置条件使用 pytest.fixture() def a():return 3def test_b(a):assert a3 2.fixture的作用范围 首先实例化更高范围的fixture…

Rust语言GUI库之gtk安装

文章目录 工具链安装管理软件vcpkgvcpkg介绍安装vcpkg 安装gtk遇到的问题Rust其他依赖package-confg 工具链安装管理软件vcpkg vcpkg介绍 在使用C/C编写项目时, 引用第三方库是很麻烦的事, 需要手动下载源码然后编译最后再添加到项目里&#xff0c;配置头文件、lib、dll&…

应用程序映射的 5 个安全优势

现代企业依靠无数的软件应用程序来执行日常运营。这些应用程序相互连接并协同工作以提供所需的服务。了解这些应用程序如何相互交互以及底层基础设施对于任何组织都至关重要。这就是应用程序映射概念的用武之地。 顾名思义&#xff0c;应用程序映射是创建应用程序架构&#xf…

skynet 中 mongo 模块运作的底层原理解析

文章目录 前言总览全流程图涉及模块关系连接数据库函数调用流程图数据库操作函数调用流程图涉及到的代码文件 建立连接SCRAMSASL 操作数据库结语参考链接 前言 这篇文章总结 skynet 中 mongo 的接入流程&#xff0c;代码解析&#xff0c;读完它相信你对 skynet 中的 mongo 调用…

JMeter直连数据库

JMeter直连数据库 使用场景操作步骤 使用场景 用作请求的参数化 登录时需要的用户名&#xff0c;密码可以从数据库中查询获取 用作结果的断言 添加购物车下订单&#xff0c;检查接口返回的订单号&#xff0c;是否与数据库中生成的订单号一致 清理垃圾数据 添加商品后&#xff…

汽车IVI中控开发入门及进阶(十一):ALSA音频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,音频比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音频文件,如果有视频文件也可以放出音频,看起来很简单,在windows下音乐播放器很多,直接打开文件就能播放各…

生产派工自动化:MES系统的关键作用

随着制造业的数字化转型和智能化发展&#xff0c;生产派工自动化成为了提高生产效率、降低成本&#xff0c;并实现优质产品生产的关键要素之一。制造执行系统&#xff08;MES&#xff09;在派工自动化中发挥着重要作用&#xff0c;通过实时数据采集和智能调度&#xff0c;优化生…

项目一:IIC读写EEPROM AT24C02

回头想了想在工作中调过的EEPROM还挺多的&#xff0c;有M24M02 、M28010 、AT24C02等&#xff0c;今天讲一下AT24C02吧 一、AT24C02简介 1.1 特点 文档已经上传了&#xff0c;需要的同学可以自行下载哈&#xff0c;晚点我会把下载链接附上来。 我大概照着文档翻译了一下&am…

排序算法-快速排序

1.快速排序&#xff08;递归&#xff09; 快速排序是 Hoare 于 1962 年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a; 任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素…

已经写完的论文怎么降低查重率 papergpt

大家好&#xff0c;今天来聊聊已经写完的论文怎么降低查重率&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 已经写完的论文怎么降低查重率 背景介绍 在学术界&#xff0c;论文的查重率是评价论文质量的…

mysql的ON DELETE CASCADE 和ON DELETE RESTRICT区别

​​ON DELETE CASCADE​​​ 和 ​​ON DELETE RESTRICT​​ 是 MySQL 中两种不同的外键约束级联操作。它们之间的主要区别在于当主表中的记录被删除时&#xff0c;子表中相关记录的处理方式。 ON DELETE CASCADE: 当在主表中删除一条记录时&#xff0c;所有与之相关的子表中…

Java 入门第二篇,Java发展史

Java 入门第二篇&#xff0c;Java发展史 一&#xff0c;Java之诞生 Java的诞生可以追溯到20世纪90年代初。以下是Java诞生的背景和过程&#xff1a; 背景&#xff1a;在上世纪80年代和90年代初&#xff0c;计算机领域存在着多样化的硬件和操作系统&#xff0c;开发者需要为不同…