文档章节

monkeysocks开发日志--TCP协议分析及架构规划

黄亿华
 黄亿华
发布于 2013/07/07 21:28
字数 628
阅读 3151
收藏 70

monkeysocks的目标是为开发以及测试提供一个稳定的环境。它使用socks代理,将录制网络流量并本地保存,并在测试时将其重放。

jsocks的改造

首先对公司一个项目进行了代理,测试结果:从开始启动到完成,只有4.7M的网络流量,本地空间开销不是问题。

今天把jsocks修改了下,将build工具换成了maven,并独立成了项目https://github.com/code4craft/jsocks。后来算是把record和replay功能做完了,开始研究各种协议replay的可能性。

replay时候,如何知道哪个请求对应响应包是个大问题。开始的方式是把request报文的md5作为key,response作为value。

TCP协议分析

后来使用wiredshark结合程序日志来进行分析。

TCP协议栈大概是这样子: image

下面是wiredshark抓包的截图,从ea开始才是应用层协议的内容。

image

应用层协议分析

实现replay后,拿HTTP协议做了测试,自己用程序写了个URLConnection,倒是能够实现replay,但是换到浏览器里就很难了,因为cookie总是会有些不一样(现在基本上所有站点都会写cookie吧)。如果不对应用层协议本身进行分析,那么进行包的伪造就很难了。

https协议对于重放攻击做了处理,每次的请求包都不一样,也无法replay成功,暂时略过。

后来对于测试中得重点协议--mysql的协议,进行了研究。

这是一个有状态的协议,状态转移图如下:

image

详细介绍http://dev.mysql.com/doc/internals/en/client-server-protocol.html,有点hold不住的感觉啊!

看了Authentication部分,会由server端发送一个随机数,来避免重放攻击。这个东西启发了我,因为主动权一般都是在server端,而我们要对client进行欺骗,难度就小了很多。

架构设计

后来决定把架构解耦了,fake server单独作为一个模块,可以单独启动成TCP server,也可以加入到jsocks里。最后架构是这样子:

image

fake servers的实现必定是个大坑,不过能把常用协议都了解一遍,本身也很有意思不是么?

开发计划:

  • 实现fake servers的TCP框架。

  • 研究并实现常用协议的fake server。

  • 确定持久化以及报文对应的策略。

© 著作权归作者所有

黄亿华

黄亿华

粉丝 2445
博文 131
码字总数 116344
作品 7
程序员
私信 提问
加载中

评论(2)

Credo-Zhao
Credo-Zhao
顶个,最近也在琢磨TCP协议.支持LZ!
黄亿华
黄亿华 博主
挖了个坑,没想到被放到首页了...最后能否成功也是个未知数,欢迎大家给出建议!项目地址:https://github.com/code4craft/monkeysocks
monkeysocks开发日志--动机

monkeysocks的目标是为开发以及测试提供一个稳定的环境。 前几天听说公司的测试团队在鼓捣数据固化的东西,说白了就是在测试启动时构建一个临时性的数据库,操作完之后再销毁,这样的好处是不...

黄亿华
2013/07/06
258
2
【北京】百度总部-急招高级安全/运维/系统/网络工程师

有意向者可发送简历到:v_zhangximei@baidu.com,并标注应聘岗位名称,我会尽快与您联系,如有问题可以加我msn:zxmdinah@live.cn 下面岗位根据等级不同薪资范围:10w-25w左右 职位名称 信息...

zxmdinah
2012/02/07
577
0
分布式_Index

分布式系列 1. 分布式介绍 1.1 分布式系统介绍 2. 分布式服务体系架构 2.1 基于TCP协议的RPC 2.2 基于HTTP协议的RPC 2.3 服务路由和负载均衡 2.4 服务网关 3. 分布式系统基础设施 3.1 分布式...

无寄语
2016/08/15
61
0
读书笔记-大型分布式网站架构-设计与实践【陈康贤】

面向服务的体系架构(SOA) HTTP协议的工作方式与HTTP网络协议栈的结构 如何实现基于HTTP协议和TCP协议的RPC调用,它们之间的有何差别,分别适应何种场景 如何实现服务的动态注册和路由,以及软...

p2ng
2016/05/23
242
0
Delphi开源组件库--QDAC

QDAC 是由 QDAC 开发组为大家提供的一套 Delphi/C++ Builder 跨平台开源组件库,名称取自英文 Quick Data Access Components 的首字母。它支持 Delphi/C++ Builder 2007 以上的版本的开发环境...

swish
2015/11/23
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部