Scut:从PackageReader分析客户端协议规则
看第一个解析API:
private void ParseData(byte[] data)
{
var paramBytes = SplitBuffer(data);
RawParam = _encoding.GetString(paramBytes); ParseParamString(RawParam);
}
再看如何分隔数据包:
private byte[] SplitBuffer(byte[] data)
{
int paramIndex = MathUtils.IndexOf(data, EnterChar); //以“\r\n\r\n”为分隔符
byte[] paramBytes;
if (paramIndex >= ) //如果有双换行符
{
paramBytes = new byte[paramIndex];
Buffer.BlockCopy(data, , paramBytes, , paramBytes.Length); //将双换行符之前的数据复制出来
InputStream = new byte[data.Length - paramIndex - EnterChar.Length];
Buffer.BlockCopy(data, paramIndex + EnterChar.Length, InputStream, , InputStream.Length); //将剩下的数据复制到 InputStream
}
else
{
paramBytes = data;
}
return paramBytes;
}
看 Scut 的官方文档,对此也说的很清楚:第一部分是字符串的格式流(命名为Get Params),第二部分是扩展数据流(可选),支持上传些文件流或图片流等,与第一部分之间需要以两个换行(\r\n\r\n)符分隔。
重点则是对第一部分的格式分析:
protected virtual void ParseParamString(string paramString)
{
string str = paramString;
int index = paramString.IndexOf(PrefixParamChar, StringComparison.OrdinalIgnoreCase); //找到协议前缀的位置
if (index != -)
{
if (paramString.StartsWith(PrefixRouteChar, StringComparison.OrdinalIgnoreCase))
{
//ex: "route:xxx?d="
RouteName = paramString.Substring(PrefixRouteChar.Length, index - PrefixRouteChar.Length);
}
str = paramString.Substring(index + PrefixParamChar.Length); //从协议前缀位置开始截断
str = HttpUtility.UrlDecode(str) ?? ""; }
if (!str.Contains("="))
{
TraceLog.ReleaseWriteDebug("Parse request error:{0}", paramString);
return;
} var nvc = HttpUtility.ParseQueryString(str); //根据 xx=xx&xx=xx 的规则取出数据
foreach (var key in nvc.AllKeys)
{
if (string.IsNullOrEmpty(key)) continue;
var val = nvc[key]; if (PrefixRouteChar.StartsWith(key, StringComparison.OrdinalIgnoreCase))
{
RouteName = val;
continue;
}
this[key] = val;
}
}
public string this[string name]
{
get { return _params[name]; }
set { _params[name] = value; }
} private Dictionary<string, string> _params = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
总结:
1. SplitBuffer 主要是做第一部分与第二部分的分离;
2. 第一部分:可知的规则是 ?d=Key1=Value1&Key2=Value2... 并且要执行一次 Url 编码;
Scut:从PackageReader分析客户端协议规则的更多相关文章
- wireshark 抓包分析 TCPIP协议的握手
wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...
- SMB协议利用之ms17-010-永恒之蓝漏洞抓包分析SMB协议
SMB协议利用之ms17-010-永恒之蓝漏洞抓包分析SMB协议 实验环境: Kali msf以及wireshark Win7开启网络共享(SMB协议) 实验步骤: 1.查看本机数据库是否开启,发现数 ...
- Wireshark数据抓包分析——网络协议篇
Wireshark数据抓包分析--网络协议篇 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...
- 第二次实验报告:使用Packet Tracer分析应用层协议
个人信息: • 姓名:李微微 • 班级:计算1811 • 学号:201821121001 一.摘要 本文描述使用Packet Tracer,正确配置网络参数,抓 ...
- 第二次作业:使用Packet Tracer分析应用层协议(DNS、FTP、DHCP、SMTP、POP3)
0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 熟练使用Packet Tracer工具.分析抓到的应用层协议数据包,深入理解应用层协议,包括语法.语义.时序. 2 实验内容 ...
- 第二次实验报告:使用 Packet Tracer 分析应用层协议
个人信息: 姓名:倪晓东 班级:计算1811 学号:201821121020 1 实验目的 熟练使用Packet Tracer工具.分析抓到的应用层协议数据包,深入理解应用层协议,包括语法.语义.时序 ...
- 使用wireshark分析MQTT协议
网络上搜索到两种用wireshark工具分析MQTT协议的方法,都是使用wireshark插件,一种是Wireshark Generic Dissector:另一种是使用lua脚本插件(推荐使用这种方 ...
- Wireshark使用drcom_2011.lua插件协助分析drcom协议
drcom_2011.lua是来源于Google code上的一个开源项目中的一个插件,感谢网络大神的分享 需要使用drcom_2011.lua分析drcom协议的话,需要把drcom_2011.lu ...
- 2.爬虫 urlib库讲解 异常处理、URL解析、分析Robots协议
1.异常处理 URLError类来自urllib库的error模块,它继承自OSError类,是error异常模块的基类,由request模块产生的异常都可以通过这个类来处理. from urllib ...
随机推荐
- IOS UIButton使用详解
第一.UIButton的定义 UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种, typede ...
- java 类型转换:
数值数据类型: 1.自动类型转换 byte->short ->int->long-->float--->double 范转小的类型向范围大的类型号转换,由系统自动完成 ...
- Html----常见标签
文本格式化标签 标签 描述 <b> 定义粗体文本. <big> 定义大号字. <em> 定义着重文字. <i> 定义斜体字. <small> ...
- Python分类统计数据
在数据的常见分布中,有一种是一对多存储的数据,即一个是key,其他改key对应的多个value.例如气象数据等,每天有很多组,又或者是一个球员,他每天得多少分等等.我做这个东西有三种方法,即:常规编程 ...
- yii phpexcel <转>
原文详情参见 这里 1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php ...
- Android Camera 使用一例,视频聊天app
视频聊天的应用可以从下面的框图示意. 所以需要从camera获取视频数据(YUV420sp),压缩成H264/MPEG4/H263的包,再传递到对方.接收对方的压缩包,解压出来显示到LCD上. An ...
- 洛谷 P1273 有线电视网(dp)
/* 想了半天没想出状态 自己还是太弱了 QAQ 题目问的是最多供给多少户 一般想法是把这个值定义为状态量 没想出来QAQ....看了看题解的状态 很机智.... f[i][j]表示i的子树 选了j个 ...
- codevs 1242 布局(查分约束+SPFA)
/* 查分约束. 给出的约束既有>= 又有<= 这时统一化成一种 Sb-Sa>=x 建边 a到b 权值为x Sb-Sa<=y => Sa-Sb>=-y 建边 b到a ...
- android - 模拟器连接本地tomcat
在使用android真机试图连接本地的tomcat的时候,发现一直没有反应.网上搜了很多资料,加上自己不断测试,后来发现模拟器访问tomcat的时候,ip的概念跟在pc上访问tomcat用的ip,根本 ...
- HTTP,TCP,Socket
TCP/IP三次握手和HTTP过程 1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络 ...