评论

收藏

[JavaScript] 构建故障分析平台采用python实现抓包分析数据包

开发技术 开发技术 发布于:2021-06-23 22:35 | 阅读数:422 | 评论:0

前言:         同事今天和我说,他现在的任务在做一个头疼的问题,说时尚了点,就是用自动化解脱心碎的运维杂事,他这边刚入职,貌似是带领一帮小弟解决别人搞不定的问题,但是有些业务部够单纯,把事直接抛给我同事这边。。。 很无敌吧。

所以计划做一个自动化平台,可以去问题端去抓数据,然后分析数据包,入库,邮件通知。   这个是自动化完成的。
我这里就说下,我的解决思路和开发思路:工具:pcap dpkt saltsatck mysql tornado tcpdumppcap               是用来抓包dpkt               是用来解析数据包的celery              异步任务
实现两大功能,用户他自己抓包,然后上传到页面上,然后我后端解析后,返回结果。用户在平台上提交问题服务器的ip,并选定测试类型,我这里会到服务端跑用python的pcap抓包并分析结果,把结果上报到平台。
更多内容,请关注下我的个人博客,blog.xiaorui.cc
关于自动抓包分析,以前和同事做过处理dns*的,方案流程和第三方的工具和我上述是一样的。遇到***,会分析dns的*的特征,然后再黑洞系统注射特征码禁止。
需要注意的是,在抓数据的时候,可能会产生堵塞,尤其是pcap,dpkt这东西,需要在后台自己的玩。这个时候就需要用celery把抓包分析包的任务放在后台执行。 你要是觉得subprocess合理的话,也可以用用subprocess 的pipe的,但是个人觉得也是个办法 ,更简单的方法是用tcpdump -w 写到一个文件里面,然后用dpkt去解析,这样的话,也不用pcap去解析啦。


安装是相当的简单,不管是centos和ubuntu都已经有默认的源了,我这里用的是ubuntu的开发机跑测试:
apt-get install python-libpcap
apt-get install libpcap-dev
apt-get install python-dpkt
pip install pypcap
原文:http://rfyiamcool.blog.51cto.com/1030776/1374484下面是抓取http数据包的写法,大家可以慢慢取值,慢慢分拆数据。
#coding:utf-8
import pcap
import dpkt
import sys
aaa='a'
bbb='b'
pc=pcap.pcap()  #注,参数可为网卡名,如eth0
pc.setfilter('tcp port 80')  #设置监听过滤器
for ptime,pdata in pc:  #ptime为收到时间,pdata为收到数据
p=dpkt.ethernet.Ethernet(pdata)
if p.data.__class__.__name__=='IP':
    ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))
print ip
if p.data.data.__class__.__name__=='TCP':
      if p.data.data.dport==80:
        sStr1 = p.data.data.data
        sStr2 = 'Host: '
        sStr3 = 'Connection'
        sStr4 = 'GET /'
        sStr5 = ' HTTP/1.1'
        nPos = sStr1.find(sStr3)
        nPosa = sStr1.find(sStr5)
        for n in range(sStr1.find(sStr2)+6,nPos-1):
          aaa=sStr1[sStr1.find(sStr2)+6:n]
        for n in range(sStr1.find(sStr4)+4,nPosa+1):
          bbb=sStr1[sStr1.find(sStr4)+4:n]
        ccc=aaa+bbb
        print ccc</pre><br /><br /><img src="https://s3.51cto.com/wyfs02/M02/22/98/wKiom1MgdWTAQvUhAAZy0kZJ1mU315.jpg" border="0"><span style="color:#0070c0;font-family:'微软雅黑', 'microsoft yahei';"><span style="font-size:20px;">用wireshark瞅瞅:</span></span><span style="color:#0070c0;font-family:'微软雅黑', 'microsoft yahei';"><span style="font-size:20px;"><img src="https://s3.51cto.com/wyfs02/M02/22/98/wKiom1MgfnejrxTcAAV6QvLVjJk276.jpg" border="0"></span></span><span style="font-family:'宋体', simsun;font-size:12px;color:#0070c0;">原文:http://rfyiamcool.blog.51cto.com/1030776/1374484</span><span style="font-family:'微软雅黑', 'microsoft yahei';font-size:20px;color:#0070c0;">我前两天在做lvs操作平台的时候,额外加了一个针对vrrp的分析数据模块,大家可以举一反三在改改!</span><span style="font-family:'微软雅黑', 'microsoft yahei';font-size:20px;color:#0070c0;"><br /></span><span style="font-family:'微软雅黑', 'microsoft yahei';font-size:20px;color:#0070c0;"></span><pre class="brush:as3;toolbar:false;">#coding:utf-8
xiaorui.cc

http://rfyiamcool.blog.51cto.com/

  import pcap
  import dpkt
  import binascii
  import struct
  a=pcap.pcap()
  a.setfilter('vrrp')   # 可以是'tcp' 'udp' 'port 80'等过滤用的
  for i,j in a:
  tem=dpkt.ethernet.Ethernet(j)
  print ("11111%s %x",i,tem)
  src='%d.%d.%d.%d' % tuple(map(ord,list(tem.data.src)))
  dst='%d.%d.%d.%d' % tuple(map(ord,list(tem.data.dst)))
  print tem.data.tos
  print tem.data.sum
  print tem.data.len
  print tem.data.ttl
print tem.data.id
print tem.data.data

  print tem.data.data.priority
  print src
print dst
DSC0000.jpg
DSC0001.jpg
通过获取的数据,可以得知对端的vrrp情况,比如tos src dst vrrp主信息 !

好了,就这样了,过段时间再看看同事进行的如何,要是有新发现,给分享给大家的。
关注下面的标签,发现更多相似文章