wireshark源码详解_2

wireshark源码详解_2

ID:45341244

大小:1.26 MB

页数:22页

时间:2019-11-12

wireshark源码详解_2_第1页
wireshark源码详解_2_第2页
wireshark源码详解_2_第3页
wireshark源码详解_2_第4页
wireshark源码详解_2_第5页
资源描述:

《wireshark源码详解_2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、DissectL2tpWireshark窗口加载及协议注册请参考解析文档Wireshark对解析数据包可分成两种模式:Firstpass:不建立协议树,直接尝试解析Secondpass:建立协议树,获取详细信息有显示过滤时,必须建立协议树FirstPass1.进入create_main_windows函数2.调用main_menu_new函数创建菜单对象,其中调用menus_init函数进行菜单的初始化2菜单初始化后,一旦用户点选某个菜单,gtk_main就会得到点选菜单的item标识,通过查找列表,获取相应的函数并

2、回调。当我们选择Options...时,会回调capture_prep_cb。capture_prep_cb负责创建并显示Option对话框。其中,出现Options窗口后,点击“Start”就会触发capture_start_cb,该按钮与回调函数的初始化连接过程就是在capture_prep_cb函数里面完成的。3.点击"start"后,调用capture_start(capture.c)4.调用sync_pipe_start创建抓包子进程(dumpcap)调用CreatePipe创建匿名管道、CreateNam

3、edPipe创建命名管道,设置进程通讯为刚才创建的管道、CreatProcess创建抓包进程(win32)调用pipe_input_set_handler函数,将通讯管道与sync_pipe_input_cb回调函数连接起来,一旦有数据返回,则会回调sync_pipe_input_cb其中,pipe_input_set_handler函数中使用了g_timeout_add函数而没有使用其后几行的g_io_add_watch_full函数。g_timeout_add函数通过每200毫秒循环检测io,一旦有数据,就会触发

4、pipe_time_cb函数,这个函数是这样的:可以看到通过PeekNamedPipe问询IO管道是否有数据然后决定是否回调,如果确认有数据则回调sync_pipe_input_cb函数。回调sync_pipe_input_cb函数,读取数据:5.调用capture_input_new_file尝试解析这个临时文件,并初始化一个wtap(capture_opts)结构用于后续解析,并设置成临时文件模式:调用cf_open打开文件。cf_open函数调用wtap_open_offline,将临时文件处理交给wireta

5、p模块。如果能够成功识别wtap_open_offline将返回一个wtap结构指针wth,其中两次调用file_open函数,分别获取顺序读取句柄与随机读取句柄:顺序读取只使用一次,之后全部操作都是使用的随机句柄wtap_open_offline函数成功返回,到此打开了文件init_dissection初始化解析过程所需要的所有数据结构申请一个frame数据队列,返回cf_open、cf_start_tail函数6.向主窗口和状态栏发送capture_cb_capture_update_started事件使其更新信

6、息至此,完成了几项工作:1、确认dumpcap已经正常工作;2、已经初始化相关数据结构;3、确认了数据传输使用的文件格式。7.再次回调sync_pipe_input_cb返回,此次是SP_PACKET_COUNT类型数据,表明返回的是的数据报文数量报文个数8.调用capture_input_new_packets函数去文件循环读取新抓到的报文:读取单个报文结束后,进入read_packet,调用frame_data_init函数,初始化frame_data结构,开始将第一个报文的frame_data加入到frame_

7、data_sequence队列中去同时,read_packet中调用add_packet_to_packet_list将该报文加入到报文列表中:9.add_packet_to_packet_list函数中进行基本信息的解析,解析过程如下:执行epan_dissect_run逐层解析开始:调用call_dissector,注意此时协议树是空指针(实际上第一部分是不会生成协议树的)可以看到最后调用了dissect_frame:解析frame信息后,调用dissector_try_unit尝试解析上层协议:如此逐层解析,当

8、解析完UDP协议后,调用decode_udp_ports,根据端口号(1701)查找下一层协议(应用层)处理句柄dissect_l2tp_udp,逐层解析ppp、ip、udp上层协议,最后查找大小端口对应的协议解析句柄,没有找到。数据作为数据块调用dissect_data处理:data处理句柄返回,尝试解析完成,将从各协议处理句柄层层返回。调用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。