文档章节

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。

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

© 著作权归作者所有

黄亿华

黄亿华

粉丝 2444
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

springboot 403 问题

添加WebAppConfigurer 配置 @Configuration@EnableAutoConfigurationpublic class WebAppConfigurer extends WebMvcConfigurerAdapter { public WebAppConfigurer() { } ......

布袋和尚_爱吃鱼
22分钟前
3
0
Python自动更换壁纸爬虫与tkinter结合

直接上代码 import ctypesimport timeimport requestsimport osfrom threading import Threadfrom tkinter import Tk, Label, Button,Entry,StringVar,messagebox# '放到AppData\Roami......

物种起源-达尔文
22分钟前
3
0
Postgresql Study 笔记

Postgresql 安装 Windows, MAC Install Postgresql 下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Linux Install sudo apt-get update sudo apt-get in......

slagga
24分钟前
3
0
layer.open 打开新页面传参问题

如图所示,点击出售,把A页面的数据传到弹框上面,因为弹框比较复杂,所以使用引入一个新页面。 A.html a.js B.html b.js 1、第一种方案 sellInte: function (){ var obj = document.g...

木九天
27分钟前
4
0
沙龙报名 | 区块链数据服务技术应用实践

京东云是国内首家提供区块链数据在线分析服务产品的公司,也是行业内首家对区块链数据服务进行开源的公司。 本次沙龙是京东云BDS开源后,首次在深圳举办线下沙龙,我们将邀请京东云BDS团队核...

京东云技术新知
28分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部