前言:
同事今天和我说,他现在的任务在做一个头疼的问题,说时尚了点,就是用自动化解脱心碎的运维杂事,他这边刚入职,貌似是带领一帮小弟解决别人搞不定的问题,但是有些业务部够单纯,把事直接抛给我同事这边。。。 很无敌吧。
所以计划做一个自动化平台,可以去问题端去抓数据,然后分析数据包,入库,邮件通知。 这个是自动化完成的。
我这里就说下,我的解决思路和开发思路:
工具:
pcap dpkt saltsatck mysql tornado tcpdump
pcap 是用来抓包
dpkt 是用来解析数据包的
celery 异步任务
实现两大功能,用户他自己抓包,然后上传到页面上,然后我后端解析后,返回结果。
用户在平台上提交问题服务器的ip,并选定测试类型,我这里会到服务端跑用python的pcap抓包并分析结果,把结果上报到平台。
更多内容,请关注下我的个人博客,blog.xiaorui.cc
关于自动抓包分析,以前和同事做过处理dns攻击的,方案流程和第三方的工具和我上述是一样的。
遇到攻击,会分析dns的攻击的特征,然后再黑洞系统注射特征码禁止。
需要注意的是,在抓数据的时候,可能会产生堵塞,尤其是pcap,dpkt这东西,需要在后台自己的玩。这个时候就需要用celery把抓包分析包的任务放在后台执行。 你要是觉得subprocess合理的话,也可以用用subprocess 的pipe的,但是个人觉得也是个办法 ,更简单的方法是用tcpdump -w 写到一个文件里面,然后用dpkt去解析,这样的话,也不用pcap去解析啦。
安装是相当的简单,不管是centos和ubuntu都已经有默认的源了,我这里用的是ubuntu的开发机跑测试:
1
2
3
4
|
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数据包的写法,大家可以慢慢取值,慢慢分拆数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#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
|
用wireshark瞅瞅:
原文:http://rfyiamcool.blog.51cto.com/1030776/1374484
我前两天在做lvs操作平台的时候,额外加了一个针对vrrp的分析数据模块,大家可以举一反三在改改!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#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
|
通过获取的数据,可以得知对端的vrrp情况,比如tos src dst vrrp主信息 !
好了,就这样了,过段时间再看看同事进行的如何,要是有新发现,给分享给大家的。
本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1374484,如需转载请自行联系原作者