python 进行抓包嗅探

一、绪论

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

首先要用到两个模块

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

pcap安装

1 pip install pypcap

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

二、目前做到:

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

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

三、先来讲抓包

 1 import pcap
 2 import dpkt
 3
 4 sniffer = pcap.pcap(name="eth1")   #name parameter => interface name
 5 sniffer.setfilter("tcp")                         #filter sentence
 6 for packet_time packet_data in sniifer:
 7     pass
 8
 9 # packet_time  => packet receive time
10 # packet_data  => ethernet level data

四、解包:

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

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

 1 def http_request_analyst(string):
 2         string = string[1:-1]
 3         method = string.split(" ")[0]
 4         print "Method:",method
 5         path = string.split(" ")[1]
 6         print "Path:",urllib.unquote(path)
 7         protover = string.split(" ")[2].split("\\r\\n")[0]
 8         print "Protocol Version:",protover
 9         headers = string.split("\\r\\n\\r\\n")[0].split("\\r\\n")[1:]
10         print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
11         print "Header:"
12         for header in headers:
13                 header = header.split(":")
14                 try:
15                         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]))
16                 except Exception,ex:
17                         print "[*]",ex
18                         print header
19                         raw_input()
20                 print hstr
21         print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
22         print "Data:",string.split("\\r\\n")[-1]
 1 def http_response_analyst(string):
 2         string = string[1:-1]
 3         protover = string.split(" ")[0]
 4         print "Protocol Version:",protover
 5         status_code = string.split(" ")[1]
 6         print "Response Code:",status_code
 7         status_string = string.split(" ")[2].split("\\r\\n")[0]
 8         print "Reposne String:",status_string
 9         headers = string.split("\\r\\n\\r\\n")[0].split("\\r\\n")[1:]
10         print repr(headers)
11         print repr(string)
12         print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
13         print "Header:"
14         for header in headers:
15                 header = header.split(":")
16                 try:
17                         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]))
18                 except Exception,ex:
19                         print "[*]",ex
20                         print header
21                         raw_input()
22                 print hstr
23         print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
24         print "Data:",string.split("\\r\\n")[-1]

六、效果如图了:

时间: 2024-08-28 16:03:12

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

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

抓包嗅探 通过抓包嗅探目标机器的流量,发现账号密码. Windows系统 1.Wirehshark 2.Omnipeek 3.commview 4.Sniffpass 只会抓取识别传输密码的明文协议,并提取密码 Linux系统 1.Tcpdump 2.Wirehshark 3.Dsniff 类似Sniffpass,只抓取密码(明文协议),在kali下默认集成. 测试 打开ftp服务  #service pure-ftpd start 启动:dsniff -i eth0 在其他主机上连接ftp服务

【安全牛学习笔记】抓包嗅探

┃抓包嗅探 ┃Windows ┃    Wireshark ┃    Omnipeek ┃    commview ┃    Sniffpass ┃Linux ┃    Tcpdump ┃    Wireshark ┃    Dsniff 选择一个好用的抓包软件很重要,OmniPeek不但具有信息包流的专家分析系统和应用分析,完整的七层协议解码,应用响应时间(ART)分析以及互式节点图等功能,同时还可以为您提供安全功能,与监控功能.有了OmniPeek,您就可以更好的进行抓包工作了 omnipe

linux+jmeter+python基础+抓包拦截

LINUX 一 配置jdk 环境 *需要获取root权限,或者切换为root用户 1.windows下载好,去 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 官方网站下载jdk(linux相应版本) 2.在usr目录下创建java路径文件夹 [root bin]cd /usr mkdir java 3.将jdk-8u60-linux-x64.tar.gz放到刚才创建的文件夹下

python mitmdump抓包与redis订阅消息

本实例实现需求 django项目,后端采用python mitmdump 扩展脚本"sdk_log.py"实时抓取与过滤4399SDK 客户端日志,并且使用redis发布. 前端使用websocket连接,订阅某频道信息,实时输出对应游戏的客户端日志到页面中. 开发环境 win7,python3, 安装redis_server 参考 在windows x64上部署使用Redis 安装python redis python3 -m pip install redis 安装python m

2017-4-21 Shell+Python对抓包文件后的文本处理过程

这几天毕设的事情,需要把Modbus数据包变成十六进制形式,但是wireshark不是非常给力,也可能是我还没找到窍门吧.这几天的文本处理把我整的够惨,有些问题以前从来没想过,遇到了真是让人觉得书到用时方恨少呀.做下笔记,以后用的着. 一.目录结构解析 [ [email protected] #] ls /tmp 1.txt 10_BCD.sh 7.sh   get_final.py   README (1)[ [email protected] #] cat 1.txt  ##其中1.txt是

python+scapy 抓包与解析

1. 简介 最近一直在使用做流量分析,今天把 scapy 部分做一个总结. python 的 scapy 库可以方便的抓包与解析包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用. 2. 用法实例 安装 作为初学者,关心的首先是如何安装,本人电脑系统是 fedora, 建议使用 linux. 推荐下载 pip,直接:(当然得在 su 权限下) pip install scapy 在 terminal 中输入 scapy, 如果有下面形式即安装好了

python抓包截取http记录日志

#!/usr/bin/python import pcap import dpkt import re def main(): pc=pcap.pcap(name="eth1")                                             # 抓取 eth1 pc.setfilter('tcp port 80')                                                       # 过滤表达式 tcp port 80

python 抓包与解包

我使用的环境为:Windows10.python3.6.scapy 2.4.0 一.基本知识 Sniff方法定义: sniff(filter="",iface="any", prn=function, count=N) filter的规则使用 Berkeley Packet Filter (BPF)语法 iface用来指定要在哪个网络接口上进行抓包(通常不指定即所有网络接口) prn指定回调函数,每当一个符合filter的报文被探测到时,就会执行回调函数,通常使用l

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

本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测试和python+requests自动化的,首先本书确实写的比较基础,对基础内容也写的很详细,所以大神绕道. 为什么要先学fiddler? 学习接口测试必学http协议,如果直接先讲协议,我估计小伙伴们更懵,为了更好的理解协议,先从抓包开始.结合抓包工具讲http协议更容易学一些. 1.1 抓fir