一、绪论

最近一直想弄一个代理,并且对数据包进行解读,从而完成来往流量的嗅探。于是今天学习了一下如何使用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. m个苹果放在n个盘子里面有多少种放法?(动态规划)

    m个苹果放在n个盘子里面有多少种放法?(动态规划) 实现代码如下: #include <iostream> using namespace std; int s(int m ,int n) ...

  2. R语言绘制沈阳地铁线路图

    ##使用leaflet绘制地铁线路图,要求 ##(1)图中绘制地铁线路 library(dplyr) library(leaflet) library(data.table) stations< ...

  3. 使用DroneKit控制无人机

    DroneKit-Python是一个用于控制无人机的Python库.DroneKit提供了用于控制无人机的API,其代码独立于飞控,单独运行在机载电脑(Companion Computer)或其他设备 ...

  4. 使用RAID与LVM磁盘阵列技术。

    7.2 LVM逻辑卷管理器 前面学习的硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了.换句话说,当 ...

  5. 【转】【OPenGL】opengl 64位 配置 freeglutx64下载

    1.GLEW The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C++ extension ...

  6. 利用百度地图API根据地址查询经纬度

    传上来只是为了记录下三种jsonp方式,$.get(url, callback)方式不行,会出错 -- 必须指明返回类型为”json”才行. 或者使用$.getJSON()或者$.ajax({}). ...

  7. 【案例分析】Linux下怎样查看port占用情况

    作者:zhanhailiang 日期:2014-11-08 基于express写一个測试server代码例如以下,可是执行失败,报"listen EADDRINUSE".字面上理解 ...

  8. PHP中如何获取网站根目录物理路径

    在php程序开发中经常需要获取当前网站的目录,我们可以通过常量定义获取站点根目录物理路径,方便在程序中使用. 下面介绍几种常用的获取网站根目录的方法. php获取网站根目录方法一: <?php ...

  9. c++ 用构造函数

    1.c++ 用构造函数创建一个对象时,对象里的属性应该是全新的不存在把之前的属性留下的问题.之所以debug里会存在上一个变量的信息,应该是debug里的一个bug,与程序无光.

  10. 字符串池化 python

    前言 在 Python 中经常通过内存池化技术来提高其性能,那么问题来了,在什么情况下会池化呢? 让我们通过几个例子进行一下理解一下. 预备知识 在查看例子之前,首先要提 python 中的一个函数 ...