pcap python 生成_python+pcap+dpkt 抓包小实例

1 #!/usr/bin/env python

2 #-*- coding: utf-8 -*-

3

4 """网络数据包捕获与分析程序"""

5

6 importpcap7 importdpkt8 importjson9 importre10 importtime11 from urllib importunquote12

13 #过滤输出目标ip

14 dst_lists =[15 '203.66.1.212', #nslookup dpdcs.4399sy.com.hk

16 '52.74.10.186', #nslookup dpdcs.4399en.com

17 '52.58.69.212', #nslookup dpdcs.4399sy.ru

18 '220.241.11.3', #nslookup dpdcs.4399th.com

19 '124.243.195.63', #nslookup sdkdcs.4399sy.com

20 '42.62.106.216', #nslookup udpdcs.4399sy.com

21 '42.62.106.230', #nslookup udpdcs.4399sy.com

22 ]23

24 req_data = ""

25 times =026

27

28 def capt_data(eth_name="eth0", p_type=None):29 """

30 捕获网卡数据包31 :param eth_name 网卡名,eg. eth0,eth3...32 :param p_type 日志捕获类型 1:sdk日志用例分析 2:目标域名过滤输出 3:原始数据包33 :return:34 """

35

36 pc =pcap.pcap(eth_name)37 pc.setfilter('tcp port 80') #设置监听过滤器

38 print 'start capture....'

39 ifpc:40 for p_time, p_data in pc: #p_time为收到时间,p_data为收到数据

41 anly_capt(p_time, p_data, p_type)42

43

44 defanly_capt(p_time, p_data, p_type):45 """

46 解析数据包47 :param p_data 收到数据48 :param p_type 日志捕获类型 1:sdk日志用例分析 2:目标域名过滤输出 3:原始数据包49 :return:50 """

51

52 p =dpkt.ethernet.Ethernet(p_data)53 if p.data.__class__.__name__ == 'IP':54 ip_data =p.data55 src_ip = '%d.%d.%d.%d' %tuple(map(ord, list(ip_data.src)))56 dst_ip = '%d.%d.%d.%d' %tuple(map(ord, list(ip_data.dst)))57 if p.data.data.__class__.__name__ == 'TCP':58 tcp_data =p.data.data59 if tcp_data.dport == 80:60 #print tcp_data.data

61 iftcp_data.data:62 #调用日志模块,对日志进行处理

63 if p_type == 1:64 #sdk日志用例分析

65 if dst_ip indst_lists:66 tmp =tcp_data.data.strip()67 globalreq_data, times68 if tmp.startswith("POST") or tmp.startswith("GET"): #or times > 0

69 ifreq_data:70 haiwai_log_case(req_data)71 req_data = tmp + "\n"

72 #times = 0

73 else:74 req_data = req_data +tmp75 #times = times + 1

76

77 elif p_type == 2:78 #目标域名过滤输出

79 if dst_ip indst_lists:80 print "tcp_data:", tcp_data.data81

82 else:83 #无过滤条件输出

84 print "tcp_data:", tcp_data.data85

86

87 #android 日誌類型,从data中获取

88 log_type_from_data ={89

90 'open_game': u'[打开游戏]',91 'network_check': u'[网络监测]',92 'open_login': u'[登录界面前]',93 'select_server': u'[选服日志]',94 'create_role': u'[创角日志]',95 'role_level_change': u'[等级日志]',96

97 #海外,俄语

98 'activity_open': u'[打开游戏]',99 'load_start_before_login': u'[加载开始]',100 'load_finish_before_login': u'[加载结束]',101 'activity_before_login': u'[登录界面前]',102 'click_enter': u'[进入游戏]',103 'get_user_server_login': u'[选服日志]',104 'user_create_role': u'[创角日志]',105 'role_login': u'[角色登录]',106 'enter_success': u'[成功进入游戏]',107 'role_level': u'[等级日志]',108 'user_online': u'[在线日志]',109 'exit_success': u'[退出游戏]',110

111 }112

113 #ios日誌類型,从请求资源路径获取

114 log_type_from_path ={115 'activity_open.php': u'[打开游戏]',116 'load_start_before_login.php': u'[加载开始]',117 'load_finish_before_login.php': u'[加载结束]',118 'activity_before_login.php': u'[登录界面前]',119 'click_enter.php': u'[进入游戏]',120 'get_user_server_login.php': u'[选服日志]',121 'user_create_role.php': u'[创角日志]',122 'role_login.php': u'[角色登录]',123 'enter_success.php': u'[成功进入游戏]',124 'user_online.php': u'[在线日志]',125 'role_level.php': u'[等级日志]',126 'exit_success.php': u'[退出游戏]',127 'share.php': u'[分享日志]',128 'init_info.php': u'[初始化日志]',129 'event.php': u'[事件日志]',130 'user_login.php': u'[user_login]',131 'user_server_login.php': u'[user_server_login]',132 'enter_game.php': u'[enter_game]',133 }134

135 #过滤path

136 filter_out_list =[137 'u/',138 'plugin/error/check',139 'service/version/get_info',140 ]141

142 #过滤打印出属于列表中的host的日志。

143 host_list =[144 'dpdcs.4399sy.com.hk',145 'dpdcs.4399en.com',146 'dpdcs.4399sy.ru',147 'dpdcs.4399th.com',148 'sdkdcs.4399sy.com',149 'udpdcs.4399sy.com',150 ]151

152

153 def formattime(t): #日期字段格式化

154 return time.strftime('%c', time.gmtime(t + 8 * 3600))155

156

157 defreq_to_dict(req_string):158 """

159 将请求数据转换为dic160 :param req_string:161 :return:162 """

163 req_dict ={}164 req_string =req_string.strip()165 if len(req_string) >0:166 req_string =unquote(req_string)167 #print "req_string_after_unquote:",req_string

168 m1 = re.search("(GET|POST)(.*)\?(.*)HTTP/1.1", req_string) #(method,path,param)

169 m2 = re.search("Host:(.*)", req_string) #(host,)

170 #m3 = re.search("\sdata=(.*)\s", req_string) # (body,)

171 m4 = re.search("\sdata=([\s\S]*)", req_string) #(body,)

172 #m5 = re.search("eventTime\":\"(\d+)", req_string) # (eventTime,)

173 m5 = re.search("eventTime\"\s*:\s*\"(\d+)", req_string)174 ifm1:175 req_dict["method"] = m1.group(1).strip()176 req_dict["path"] = m1.group(2).strip()[1:]177 param_string = m1.group(3).strip()178 ifparam_string:179 param_string = param_string.split("&")180 param_dict ={}181 for item inparam_string:182 tmp_list = item.split("=")183 if len(tmp_list) > 1:184 param_dict[tmp_list[0]] = tmp_list[1]185 req_dict["param"] =param_dict186 ifm2:187 req_dict["host"] = m2.group(1).strip()188 ifm4:189 try:190 body = m4.group(1).replace("\n", "")191 body =json.loads(body)192 exceptValueError:193 print "\033[1;31;40m"

194 print "m4:Error:body ValueError,req_string-->%s" %req_string195 print "\033[0m"

196 body ={}197 req_dict["body"] =body198

199 ifm5:200 req_dict["eventTime"] = formattime(int(m5.group(1)))201

202 returnreq_dict203

204

205 defhaiwai_log_assert(req_dict):206 """

207 日志断言处理,输出分析结果208 :param req_dict:209 :return:210 """

211

212 #从 data 中获取日志类型

213 if isinstance(req_dict, dict) and req_dict.get("body"):214 if req_dict.get("body").get("data"):215 data_type = req_dict.get("body").get("data").keys()216 data_type_set =set(data_type)217 types_key_set =set(log_type_from_data.keys())218 intersect =data_type_set.intersection(types_key_set)219 ifintersect:220 log_type =intersect.pop()221 print "\033[1;31;40m %s log pass!--from body data || EventTime:-->[%s] \033[0m" %(222 log_type_from_data.get(log_type), req_dict.get("eventTime"))223 printreq_dict224 else:225 if 'common' in data_type and len(data_type) == 2:226 data_type.remove('common')227 print "\033[1;31;40m %s log not register!--from body data \033[0m" %data_type228

229 #从 path 中获取日志类型

230 path = req_dict.get("path")231 host = req_dict.get("host")232 if host inhost_list:233 if path inlog_type_from_path.keys():234 eventTime = ""

235 if req_dict.get("eventTime"):236 eventTime = req_dict.get("eventTime")237 else:238 if req_dict.get("param"):239 eventTime = req_dict.get("param").get("time")240 ifeventTime:241 eventTime =formattime(int(eventTime))242 print "\033[1;31;40m %s log pass--from url || EventTime:-->[%s] \033[0m" %(243 log_type_from_path.get(path), eventTime)244 printreq_dict245 elif path and path not infilter_out_list:246 print "\033[1;31;40m %s log not register!--from url! \033[0m" %path247 printreq_dict248

249

250 def client_log_check(log_type, req_dict, platform="sy"):251 """

252 检查SDK客户端请求字段,返回测试结果集253 :param log_type: 日志类型254 :param req_dict: 日志字典255 :param platform: 测试平台256 :return:257 """

258 pass

259

260

261 defhaiwai_log_case(req_string):262 """

263 日志用例集264 一:将数据包转换为dict265 二:对日志分析处理,输出测试结果266 """

267

268 req_dict =req_to_dict(req_string)269 haiwai_log_assert(req_dict)270

271

272 if __name__ == '__main__':273 try:274 capt_data("eth3", 1)275 exceptTypeError:276 capt_data("eth3", 1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉、机器学习相关领域论文和源代码大集合

原文转自:http://blog.csdn.net/zouxy09/article/details/8550952 计算机视觉、机器学习相关领域论文和源代码大集合--持续更新…… zouxy09qq.com http://blog.csdn.net/zouxy09 注:下面有project网站的大部分都有paper和相应的code。Code一般是C/C或者…

热插拔服务器电源维修,无需关停系统即可热插拔,TE Connectivity推出滑轨电源连接器...

原标题:无需关停系统即可热插拔,TE Connectivity推出滑轨电源连接器全球连接与传感器领域领军企业TE Connectivity(TE)宣布推出滑轨电源连接器。此连接器是唯一一款无需关闭系统电源,即可在服务器中进行电子元件热插拔的电源连接器产品。滑轨…

EMACS 中文显示为方框

解决方案 (set-default-font "Consolas-14") (set-fontset-font "fontset-default" unicode ("微软雅黑" . "unicode-bmp")) 转载于:https://www.cnblogs.com/Mingxx/archive/2013/01/11/2856432.html

计算机视觉领域的一些牛人博客,研究机构等的网站链接

计算机视觉领域的一些牛人博客,研究机构等的网站链接 zouxy09qq.com http://blog.csdn.net/zouxy09 转自:http://www.cnblogs.com/Rick-w/archive/2012/04/14/2446921.html 以下链接是本人整理的关于计算机视觉(ComputerVision, CV&#xff0…

excel服务器2010网站,excel服务器2010

excel服务器2010 内容精选换一换所有弹性伸缩的接口,有自定义错误信息返回,该小节介绍弹性伸缩的错误码的含义。{"error":{"code":"AS.0001","message":"System error."}}当您调用API时,如…

typeorm 生成实体类_android常用orm框架greenDAO创建表生成实体类

package com.example.greendao_test.DB_Initialize;import java.io.IOException;import de.greenrobot.daogenerator.DaoGenerator;import de.greenrobot.daogenerator.Entity;import de.greenrobot.daogenerator.Schema;/** * 生产类执行程序(建表和生成关系类) * * author a…

图像处理和计算机视觉中的经典论文

图像处理和计算机视觉中的经典论文 zouxy09qq.com http://blog.csdn.net/zouxy09 转自:http://www.cnblogs.com/moondark/archive/2012/04/20/2459594.html 感谢水木上同领域的同学分享,有了他的整理,让我很方便的获得了CV方面相关的经典论文…

Android系统架构

Android系统架构总体可分为四层结构,从下往上依次是:Linux内核层、系统运行库层、应用程序框架层以及应用程序层。如下图所示: 一、Linux内核层 Google选择了Linux内核作为Android的底层支撑系统。当前的Android系统是基于Linux2.6内核的,提供…

门禁系统服务器 控制器 读卡器,你知道门禁系统读卡器分为多少种吗?

门禁系统用的非接触IC 卡( 感应式 IC 卡 ) 读卡器是门禁系统的重要组成部分 , 是门禁系统信号输入的关键设备 , 关系着整个门禁系统的稳定性 。读卡器以固定频率向外发出电磁波,频率一般是13.56MHZ,当感应卡进入读卡器电磁波辐射范围内时,会触…

mounted钩子函数_Vue 探索之路——生命周期和钩子函数的一些理解

对于执行顺序和什么时候&#xff0c;下面我们将结合代码去看看钩子函数的执行<!DOCTYPE html> <html> <head><title></title><script type"text/javascript" src"https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></sc…

梯度化一张图片

最近刚好学习到梯度方面的知识&#xff0c;所以上网查找了下关于梯度化一副图片的opencv代码&#xff0c;参考代码出自http://www.cnblogs.com/gnuhpc/archive/2012/06/28/2568755.html #include<stdio.h> #include<cv.h> #include<highgui.h> #include<m…

Overlay Surfaces (覆盖表面)

覆盖表面&#xff08;Overlay Surfaces&#xff09; 覆盖表面是具有特殊硬件支持能力的表面&#xff0c;通常用于显示活动视频、录制视频或静止位图而不需要位块传输到主表面或改变主表面的内容。对覆盖表面的字此完全由硬件提供&#xff0c;DirectDraw支持显示设备驱动程序…

逃跑吧少年服务器临时维护中,逃跑吧少年—逃跑吧少年5月30日更新 主动技能解锁...

逃跑吧少年—逃跑吧少年5月30日更新 主动技能解锁发表时间&#xff1a; 2019-05-31 作者&#xff1a;7k7k电脑版《逃跑吧&#xff01;少年》服务器将于5月30日9:00-11:00进行服务器维护工作&#xff01;请少年们安排好游戏时间&#xff0c;在维护前下线&#xff0c;以免造成…

graphpad导出图片不居中_从GraphPad Prism一键导出满足期刊要求的图表

众所周知&#xff0c;每个期刊都有自己对论文格式的规则&#xff0c;其中对图表的格式也有具体的规则。为减少发表所需的时间&#xff0c;GraphPad Prism允许您自定义导出&#xff08;文件类型、分辨率、透明度、尺寸、色彩空间 RGB/CMYK&#xff09;图表&#xff0c;以满足期刊…

opencv学习笔记2--存取图像元素

最近了解了下如何存取图像元素&#xff0c;在这里归纳总结下&#xff0c;也是记录下&#xff0c;以后需要的时候可以复习下。 假设需要读取在i行j列像点的第k通道. 其中, 行数i的范围为[0, height-1], 列数j的范围为[0, width-1], 通道k的范围为[0, nchannels-1]. 1.间接存取:…