使用tcpdump抓包实时分析http内容

#! /usr/bin/python  
# 使用tcpdump抓包实时分析http内容
# 环境Centos 6.8 Python 2.6.6
import urllib
import time
 
def tcpdump():  
    import subprocess, fcntl, os  
    # sudo tcpdump -i bond0 -n -s 0 -w - | grep -a -o -E "Host: .*|GET /.*"  
    cmd1 = ['tcpdump', '-i', 'bond0', '-n','-B', '4096','-s', '0', '-w', '-']  
    cmd2 = ['grep', '--line-buffered', '-a', '-o', '-E', 'GET /.*']  
    p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE)  
    p2 = subprocess.Popen(cmd2, stdout=subprocess.PIPE, stdin=p1.stdout)  
      
    flags = fcntl.fcntl(p2.stdout.fileno(), fcntl.F_GETFL)  
    fcntl.fcntl(p2.stdout.fileno(), fcntl.F_SETFL, (flags | os.O_NDELAY | os.O_NONBLOCK))  
    return p2  
 
 
def poll_tcpdump(proc):  
    #print 'poll_tcpdump....'  
    import select  
    txt = None  
    while True:  
        # wait 1/10 second   
        readReady, _, _ = select.select([proc.stdout.fileno()], [], [], 0.1)  
        if not len(readReady):  
            break  
        try:  
            for line in iter(proc.stdout.readline, ""):  
                if txt is None:  
                    txt = ''  
                txt += line  
        except IOError:  
            print 'data empty...'  
            pass  
        break  
    return txt  
 
 
proc = tcpdump()  
while True:  
    text = poll_tcpdump(proc)  
    if text:  
        print '>>> ' + urllib.unquote(text)
        #print '--- ' + time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值