wireshark源码分析 一
因为手头的项目需要识别应用层协议,于是想到了wireshark,打算在项目中集成wireshark协议分析代码。在官网上下了最新版的wireshark源代码,我的天啊,200多M,这么多代码文件怎么看?在网上了找了很久,希望能找到别人的分析报告,可惜的是,找了很久也没有找到,比较多的还是怎么开发wireshark协议识别和分析插件,很少有人分析它的源代码。于是,我找了个查看源代码比较方便的工具——source insight,打算先瞧一瞧这些代码文件,说不定运气好,看着看着就知道它是怎么工作的。
看过wireshark源代码的人应该知道,它的代码文件很多很多,而我也是第一次阅读别人这么多的代码,所以要把wireshark的协议分析代码集成到我的项目中,对我来说还真不是一件容易的事。花了很多时间,搜了很多资料,也看了很多资料,最后决定从wireshark的命令行模式——tshark入手,分析tshark是如何识别网络协议的。
我决定利用断点调试查看tshark是如何工作的,但是要调试,就需要编译连接wireshark源代码。于是又开始找资料摸索怎么编译我wireshark代码。这部分的资料倒是比较好找,但是当时找的资料都不能顺利编译,最后在别人的基础上,加上自己的思考,终于编译成功。于是就有了上一篇文章描述如何在visual studio2008上编译wireshark源代码。
啰嗦了这么多,真正开始分析tshark代码了。
首先,成功编译后的wireshark源代码文件夹中出现了很多目标文件,还生成了一个wireshark-gtk2文件夹,里面有好几个exe文件,比如wireshark.exe,tshark.exe,dumpcap.exe等。具体如下所示:
这个图片就是wireshark-gtk2文件夹中的一部分。
接下来,可以用visual studio2008(工具不限制,但最后是跟你编译时选定的工具保持一致)打开wireshark-gtk2所在目录下的工程文件,这样的工程文件有好几个,随便打开一个,其他的几个就会自动添加进来,因为所有的工程文件都在一个解决方案中,如下图所示:
因为只分析tshark部分的代码,所以可以把它之外的工程全部删除,然后在tshark工程源文件中有一个tshark.c的文件,在里面找到main()函数,这就是程序的入口,这时就可以下断点跟踪调试了。
今天先写到此,明天再附上详细的分析报告。
wireshark源码分析 一的更多相关文章
- wireshark源码分析二
一.源代码结构 在wireshark源代码根目录下,可以看到以下子目录: 1)物理结构 其中,epan文件夹负责所有网络协议识别工作,plugins里面存放了wireshark所有插件,gtk ...
- TeamTalk源码分析之login_server
login_server是TeamTalk的登录服务器,负责分配一个负载较小的MsgServer给客户端使用,按照新版TeamTalk完整部署教程来配置的话,login_server的服务端口就是80 ...
- VOIP RTP RTSP 实现 Baresip 源码分析
RTP 使用 udp 进行数据传输,udp 是不能保证,数据包一定可以到达的,也不提供时序.同时还有 MTU 限制. RTCP 用来配合 RTP 提供,传输报告,会话建立和退出. 一大批参考规范 * ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- nginx源码分析之网络初始化
nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
随机推荐
- Linux 字符设备驱动及一些简单的Linux知识
一.linux系统将设备分为3类:字符设备.块设备.网络设备 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流的设备,常见 ...
- 矩形覆盖(python)
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? # -*- coding:utf-8 -*- class S ...
- Ubuntu下ssh的安装
1.安装 Ubuntu缺省安装了openssh-client,,如果没有安装,可用apt-get安装上即可. 安装ssh-server sudo apt-get install openssh-ser ...
- 贪吃蛇GamePanel Java实现(二)
package cn.tcc.snake.tcc.View; import java.awt.Color;import java.awt.Graphics; import javax.swing.JP ...
- 两种方法修改pyhton爬虫的报头
方法一: import urlib.request url = "" headers=("User-Agent","") opener = ...
- Angular之特性模块 ( Feature Module )
项目结构 一 创建特性模块,及其包含的组件.服务. ng g module art ng g component art/music ng g component art/dance ng g ser ...
- TZOJ 1705 Dining(拆点最大流)
描述 Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she wil ...
- swift - 指定VC隐藏导航栏 - 禁用tabbar的根控制器手势,防止两个tabbar跳转 手势冲突
1. viewdidload 设置代理 self.navigationController?.delegate = self 2.代理里面指定VC 隐藏 //MARK: - 导航栏delegate e ...
- AngularJS——第3章 指令
第3章 指令 所谓指令就是AngularJS自定义的HTML属性或标签,这些指令都是以ng-做为前缀的,例如ng-app.ng-controller.ng-repeat等. 3.1 内置指令 ng-a ...
- activity背景毛玻璃效果
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...