• python抓包截取http记录日志


    #!/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 %s %s %s %s HTTP/%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 (入门源码)

  • 相关阅读:
    十三 web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息
    十二 web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies
    十一 web爬虫讲解2—Scrapy框架爬虫—Scrapy使用
    十 web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令
    九 web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解
    八 web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用
    七 web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理
    六 web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求
    五 web爬虫,scrapy模块,解决重复ur——自动递归url
    四 web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签
  • 原文地址:https://www.cnblogs.com/hushaojun/p/4533236.html
Copyright © 2020-2023  润新知