一、绪论

最近一直想弄一个代理,并且对数据包进行解读,从而完成来往流量的嗅探。于是今天学习了一下如何使用Python抓包并进行解包。

首先要用到两个模块

dpkt(我这边ubuntu16.04 LTS)Python2.7中默认安装的

pcap安装

 pip install pypcap

然后来说一下,pypcap主要用来抓包或者说是sniffer的,dpkt用来解包的,我对dpkt的认知是解包传输层以及传输层一下的数据比较不错,但是对于应用层数据的解读就是渣渣。尤其是HTTP,所以HTTP部分解包,是我自己重写的,并没有使用dpkt.http.Request和dpkt.http.Response。(总他妈报错).

二、目前做到:

(1)正常解码请求和响应数据包。

(2)对于长连接传输数据的数据包解读失败。

三、先来讲抓包

 import pcap
import dpkt sniffer = pcap.pcap(name="eth1") #name parameter => interface name
sniffer.setfilter("tcp") #filter sentence
for packet_time packet_data in sniifer:
pass # packet_time => packet receive time
# packet_data => ethernet level data

四、解包:

 packet = dpkt.ethernet.Ethernet(pdata)#二层数据报文嘛
print "SRC IP:%d.%d.%d.%d"%tuple(map(ord,list(packet.data.src)))
print "DST IP:%d.%d.%d.%d"%tuple(map(ord,list(packet.data.dst)))
print "SRC PORT:%s"%packet.data.data.sport
print "DST PORT:%s"%packet.data.data.dport

五、HTTP部分是我自己解的包:

 def http_request_analyst(string):
string = string[1:-1]
method = string.split(" ")[0]
print "Method:",method
path = string.split(" ")[1]
print "Path:",urllib.unquote(path)
protover = string.split(" ")[2].split("\\r\\n")[0]
print "Protocol Version:",protover
headers = string.split("\\r\\n\\r\\n")[0].split("\\r\\n")[1:]
print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
print "Header:"
for header in headers:
header = header.split(":")
try:
hstr = "%s:%s"%(str(header[0]),str(header[1])) if header[0] not in ["Referer"] else "%s:%s:%s"%(str(header[0]),str(header[1]),str(header[2]))
except Exception,ex:
print "[*]",ex
print header
raw_input()
print hstr
print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
print "Data:",string.split("\\r\\n")[-1]
 def http_response_analyst(string):
string = string[1:-1]
protover = string.split(" ")[0]
print "Protocol Version:",protover
status_code = string.split(" ")[1]
print "Response Code:",status_code
status_string = string.split(" ")[2].split("\\r\\n")[0]
print "Reposne String:",status_string
headers = string.split("\\r\\n\\r\\n")[0].split("\\r\\n")[1:]
print repr(headers)
print repr(string)
print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
print "Header:"
for header in headers:
header = header.split(":")
try:
hstr = "%s:%s"%(str(header[0]),str(header[1])) if header[0] not in ["Referer"] else "%s:%s:%s"%(str(header[0]),str(header[1]),str(header[2]))
except Exception,ex:
print "[*]",ex
print header
raw_input()
print hstr
print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
print "Data:",string.split("\\r\\n")[-1]

六、效果如图了:

python 进行抓包嗅探的更多相关文章

  1. 小白日记22:kali渗透测试之提权(二)--抓包嗅探

    抓包嗅探 通过抓包嗅探目标机器的流量,发现账号密码. Windows系统 1.Wirehshark 2.Omnipeek 3.commview 4.Sniffpass 只会抓取识别传输密码的明文协议, ...

  2. Python—网络抓包与解包(pcap、dpkt)

    pcap安装 [root@localhost ~]# pip install pypcap 抓包与解包 # -*- coding:utf-8 -*- import pcap, dpkt import ...

  3. Python + winpcap抓包和发包

    winpcapy Python的winpcapy库可以简单地实现收发Layer2层(数据链路层,以太网)数据. winpcapy主页:https://github.com/orweis/winpcap ...

  4. python抓包截取http记录日志

    #!/usr/bin/python import pcap import dpkt import re   def main(): pc=pcap.pcap(name="eth1" ...

  5. python编写网络抓包分析脚本

    python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...

  6. python socket+tcp三次握手四次撒手学习+wireshark抓包

    Python代码: server: #!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:server.py import socket # 导入 socke ...

  7. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

  8. Python 爬虫——抖音App视频抓包

    APP抓包 前面我们了解了一些关于 Python 爬虫的知识,不过都是基于 PC 端浏览器网页中的内容进行爬取.现在手机 App 用的越来越多,而且很多也没有网页端,比如抖音就没有网页版,那么上面的视 ...

  9. jmeter压测数据库,抓包工具,python基础

    jmeter压力测试 前提场景的设置:单场景(单个接口进行压力测试一个请求)或混合场景(有业务流程的场景进行压力测试多个请求),压测时间一般在5--1515分组具体看需求. 数据准备:数据量少和数据量 ...

随机推荐

  1. android学习日记01--综述

    开个博客,写点关于Android的知识,希望温故而知新吧! 一.总体框架 先上一张google提供官方的Android框架图: Android系统架构由5部分组成,分别是:Linux Kernel.A ...

  2. js类型转换 之 转字符串及布尔类型

    上一篇我们讲到了如何转数字类型,今天总结一下转字符串及布尔类型的方法: 转字符串方法主要有: toString(); String(); 具体的用法如下表格所示: 方法 例子 返回值 说明 toStr ...

  3. [oracle] oracle-ibatis-整理

    ① <!-- 复用sql代码 --> <sql id="CUSTOM_CABINET_INFO.QUERY_CABINET"> <dynamic pr ...

  4. 【转】【MySql】Update批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other ...

  5. 在Access中执行SQL语句

    Access在小型系统开发中等到了广泛使用.虽然Access提供了可视化的操作方法,但许多开发人员还是喜欢直接用SQL语句操作数据表.如何在Access中打开SQL视图,对于初次使用Access的程序 ...

  6. C语言中,为什么字符串可以赋值给字符指针变量

    转载于:http://www.cnblogs.com/KingOfFreedom/archive/2012/12/07/2807223.html 本文是通过几篇转帖的文章整理而成的,内容稍有修改: 一 ...

  7. Unity文件操作路径

    Unity3D中的资源路径: Application.dataPath:此属性用于返回程序的数据文件所在文件夹的路径.例如在Editor中就是Assets了. Application.streamin ...

  8. ChemDraw中如何输入化学式分隔点

    ChemDraw最实用的化学结构绘图软件,在绘制化学结构时,离不开给化学结构标记原子名称,有时还需要插入分隔点,本教程以下图给出的化学结构为例,讲解ChemDraw中如何输入化学式分隔点.  化学结构 ...

  9. R-CNN目标检测的selective search(SS算法)

    候选框确定算法 对于候选框的位置确定问题,简单粗暴的方法就是穷举或者说滑动窗口法,但是这必然是不科学的,因为时间和计算成本太高,直观的优化就是假设同一种物体其在图像邻域内有比较近似的特征(例如颜色.纹 ...

  10. HTML 之前未接触过的标签

    用于表单的HTML标签 HTML <fieldset> 标签             定义和用法 fieldset 元素可将表单内的相关元素分组. <fieldset> 标签将 ...