• 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]
    复制代码

    六、效果如图了:

    博主简介:博主国内安全行业目前最强大的网络安全公司做技术研究员,常年做技术工作。 获得过以下全国竞赛大奖: 《中国电子作品大赛一等奖》 《云计算技术大赛一等奖》 《AIIA人工智能大赛优胜奖》《网络安全知识竞赛一等奖》 《高新技术个人突出贡献奖》,并参与《虚拟化技术-**保密**》一书编写,现已出版。还拥有多项专利,多项软件著作权! 且学习状态上进,立志做技术牛逼的人。座右铭:在路上,永远年轻,永远热泪盈眶。可邮件联系博主共同进步,个人邮箱:pigeon_code@163.com
  • 相关阅读:
    脚本绘图工具总结
    Windows Server 2012 磁盘管理之 简单卷、跨区卷、带区卷、镜像卷和RAID-5卷
    Java web项目 本地配置https调试
    Twitter的分布式自增ID算法snowflake (Java版)
    Redis压测命令
    Java读取txt文件信息并操作。
    安装配置adb工具及遇到的问题
    数据库逆向生成数据库表详细设计文档
    Java常用日期处理方法
    Date与String互相转换及日期的大小比较
  • 原文地址:https://www.cnblogs.com/mutudou/p/14803325.html
Copyright © 2020-2023  润新知