#!/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

for p_time, p_data in pc:                                                      #

ret = main_pcap(p_time, p_data)

if ret:

print ret

def main_pcap(p_time, p_data):                                                 # 解码

out_format = "%s\t%s\t%s\t%s\t%s\tHTTP/%s"

p = dpkt.ethernet.Ethernet(p_data)                                     #

ret = None

if p.data.__class__.__name__ == 'IP':

ip_data = p.data

src_ip = '%d.%d.%d.%d' % tuple(map(ord,list(ip_data.src)))

dst_ip = '%d.%d.%d.%d' % tuple(map(ord,list(ip_data.dst)))

if p.data.data.__class__.__name__=='TCP':

tcp_data = p.data.data

if tcp_data.dport==80:

if tcp_data.data:

h = dpkt.http.Request(tcp_data.data)                                            # http解码

pre = "^/.*$"

if match(pre, h.uri):                                                                           # url 重写

http_headers = h.headers

host = h.headers['host']

url = "http://" + host + h.uri

else:

url = h.uri

# datetime srcip dstip GET /index.htm HTTP/1.1                       # 输出日志格式

ret = out_format % (p_time, src_ip, dst_ip, h.method, url, h.version)

return ret

def match(pre, line):

p = re.compile(pre)

m = p.match(line)

return m

# 脚本运行也达到了武星预期的要求,OK。

# 后续记录下referer 还是很有必要的。

======================================================================================

安装

1. python 2.5

2. pypcap               python的抓包函数库

http://code.google.com/p/pypcap/downloads/list

3. dpkt                     python的解包函数库

http://code.google.com/p/dpkt/downloads/list

4. winpcap             python支持pacp的驱动

如果有wireshark的话,就直接安装wireshark吧,里面带着winpcap

在Linux中有个库叫做libpcap可以胜任。libpcap是一个简单而又强大的数据包捕获函数库,可以在多种操作系统上运行。

关于libpcap有几个很好的教程:

http://www.tcpdump.org/pcap.htm (官方向导,英文,写得很适合新手)

http://blog.csdn.net/bat603/archive/2006/09/04/1175729.aspx (主要函数中文说明)

http://blog.csdn.net/bat603/archive/2006/09/04/1176251.aspx (入门源码)

python抓包截取http记录日志的更多相关文章

  1. Python 抓包程序(pypcap)

    #/usr/bin/env python #-*-coding:utf8-*- #抓包脚本 """ This script is used to Capture and ...

  2. python抓包模块

    pcapy模块 安装 yum install -y epel-release yum install -y pip gcc    gcc-c++   libpcap-devel python-deve ...

  3. python 进行抓包嗅探

    一.绪论 最近一直想弄一个代理,并且对数据包进行解读,从而完成来往流量的嗅探.于是今天学习了一下如何使用Python抓包并进行解包. 首先要用到两个模块 dpkt(我这边ubuntu16.04 LTS ...

  4. 【Golang】嗅探抓包,解决线上偶现问题来不及抓包的情况

    背景 测试群里经常看到客户端的同学反馈发现了偶现Bug,但是来不及抓包,最后不了了之,最近出现得比较频繁,所以写个小脚本解决这个问题. 实现思路 实现的思路比较简单: 抓包 存日志 做日志管理 具体实 ...

  5. MySQL、Redis、MongoDB网络抓包工具

    简介 go-sniffer 可以抓包截取项目(MySQL.Redis.MongoDB)中的请求并解析成相应的语句,并格式化输出.类似于在之前的文章 MySQL抓包工具:MySQL Sniffer[转] ...

  6. jmeter压测数据库,抓包工具,python基础

    jmeter压力测试 前提场景的设置:单场景(单个接口进行压力测试一个请求)或混合场景(有业务流程的场景进行压力测试多个请求),压测时间一般在5--1515分组具体看需求. 数据准备:数据量少和数据量 ...

  7. python编写网络抓包分析脚本

    python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...

  8. python socket+tcp三次握手四次撒手学习+wireshark抓包

    Python代码: server: #!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:server.py import socket # 导入 socke ...

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

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

随机推荐

  1. selenium 3.0鼠标事件 (java代码)

    注意:ActionChains下相关方法在当前的firefox不工作,建议使用谷歌浏览器. public static void main(String[] args) throws Interrup ...

  2. 使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)

    本篇文章是使用python抓取数据的第一篇,使用requests+BeautifulSoup的方法对页面进行抓取和数据提取.通过使用requests库对链家网二手房列表页进行抓取,通过Beautifu ...

  3. 安装smartmontool报错:libc6-dev : 破坏:

    https://blog.csdn.net/weixin_38705903/article/details/81947717

  4. Spring:面向切片编程

    在之前我们记录Spring的随笔当中,都是记录的Spring如何对对象进行注入,如何对对象的属性值进行注入,即我们讲解的很大部分都是Spring的其中一个核心概念——依赖注入(或者说是控制翻转,IOC ...

  5. Codeforces 538 B. Quasi Binary

    B. Quasi Binary   time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest

    layout: post title: (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest author: "luow ...

  7. 洛谷——P1327 数列排序

    P1327 数列排序 题目描述 给定一个数列{an},这个数列满足ai≠aj(i≠j),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? 输入输出格式 输入格式: ...

  8. Codeforces 361D Levko and Array(二分)(DP)

    Levko and Array time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  9. 1、Django实战第1天:建立项目mxonline

    工具版本: python3.6.3 django1.9.8 安装工具 mkvirtualenv --python="C:\Python36\python.exe" mxonline ...

  10. [ZOJ3316]Game

    题意:有一个棋盘,棋盘上有一些棋子,两个人轮流拿棋,第一个人可以随意拿,以后每一个人拿走的棋子与上一个人拿走的棋子的曼哈顿距离不得超过$L$,无法拿棋的人输,问后手能否胜利 把棋子看做点,如果两个棋子 ...