zoukankan      html  css  js  c++  java
  • Python模块之openpyxl,scapy

    一、openpyxl

      功能

    #读和写xlsx文件,兼容.xls  , xlsx

      参考文档

    http://openpyxl.readthedocs.io/en/stable/usage.html

      安装方式

    #pip3 install openpyxl

      读数据

    #方式一:
    from openpyxl import load_workbook
    #加载xlsx文件
    wb = load_workbook(filename='query_hive_58300.xlsx')
    #读取工作表为'query_hive_58300'
    sheet_name = wb['query_hive_58300']
    #读取A2的值
    time =sheet_name['A2'].value
    print(time)

      写数据

    from openpyxl import Workbook
    from openpyxl.compat import range
    from openpyxl.utils import get_column_letter
    
    #创建一个xlsx空对象
    wb = Workbook()
    
    dest_filename = 'empty_book.xlsx'
    
    ws1 = wb.active
    #设置工作表1名'range names'
    ws1.title = 'range names'
    
    #[1,40)行
    for row in range(1,40):
        #每一列填充[0,600)
        ws1.append(range(600))
    
    #创建工作表2,命名为'Pi'
    ws2 = wb.create_sheet(title='Pi')
    #F5填入3.14
    ws2['F5'] = 3.14
    
    #创建工作表3,命名为'Data'
    ws3 = wb.create_sheet(title='Data')
    #在[10,20)行
    for row in range(10,20):
        #在[27,54)列
        for col in range(27,54):
            #获取对应的列名填入单元格
            _ = ws3.cell(column=col,row=row,value="{0}".format(get_column_letter(col)))
    print (ws3['AA10'].value)
    #保存为'empty_book.xlsx'的xlsx表格
    wb.save(filename=dest_filename)

    二、Scapy

      功能

    #其中一个功能具有解析报文能力

      参考文档

    #官方文档
    https://scapy.readthedocs.io/en/latest/usage.html
    
    #使用案例
    https://blog.csdn.net/u011412226/article/details/80656884

      安装方式

    #windows上安装方式
    #1.下载https://github.com/secdev/scapy/archive/master.zip
    #2.打开cmd运行:python3 setup.py install
    
    
    #验证
    a.py代码:
    from scapy.all import *
    a = rdpcap('D://dns.pcapng')
    
    运行不报错即可

      案例

    #案例1:查看是否是dns的响应报文
    from scapy.all import *
    
    packets = rdpcap('D://dns.pcapng')
    
    #循环每个报文
    for data in packets:
        #匹配具有DNS字段的报文
        if "DNS" in data:
            #DNS报文里的qr字段=1,说明是response响应报文
            if data['DNS'].qr:
                s = repr(data)      #将二进制报文转成人类可读报文
                print(s)
    
    结果:
    <Ether  dst=74:d4:35:cb:9e:37 src=14:14:4b:6b:90:9e type=0x800 |
    <IP  version=4 ihl=5 tos=0x0 len=166 id=0 flags= frag=0 ttl=150 proto=udp chksum=0x8a37 src=114.114.114.114 dst=172.17.9.26 options=[] |
    <UDP  sport=domain dport=64559 len=146 chksum=0x57d9 |
    <DNS  id=29572 qr=1 opcode=QUERY aa=0 tc=0 rd=1 ra=1 z=0 ad=0 cd=0 rcode=ok qdcount=1 ancount=3 nscount=0 arcount=0 qd=<DNSQR  qname='www.tudou.com.' qtype=A qclass=IN |> 
    an=<DNSRR  rrname='www.tudou.com.' type=CNAME rclass=IN ttl=255 rdata='aserver-heyi.m.taobao.com.' |
    <DNSRR  rrname='aserver-heyi.m.taobao.com.' type=CNAME rclass=IN ttl=170 rdata='aserver-heyi.m.taobao.com.gds.alibabadns.com.' |
    <DNSRR  rrname='aserver-heyi.m.taobao.com.gds.alibabadns.com.' type=A rclass=IN ttl=33 rdata='106.11.208.145' |>>> ns=None ar=None |>>>>
    
    ###################################
    
    #案例2:查看dns响应报文解析域名对应的IP地址
    from scapy.all import *
    import re
    packets = rdpcap('D://a.pcapng')
    
    #循环每个报文
    for data in packets:
        #匹配具有DNS字段的报文
        if "DNS" in data:
            if data.an:
                s = repr(data.an)
                answers_list = s.split('|<')
    
                #利用正则表达式,过滤出rdata的IP地址
                for per_answer in answers_list:
                    if 'type=A' in per_answer:
                        domain_ip=re.findall("rdata='(.*?)'",per_answer)[0]
                        qname=data['DNS'].qd.qname.decode('utf-8').strip('.')
                        print(qname,'解析成IP地址:',domain_ip)
    
    #结果:
    www.youku.com 解析成IP地址: 106.11.209.2
    #pcap文件大逐行读取方法
    from scapy.all import *
    
    with PcapReader('D://trap.pcap') as pcap_reader:
        for pkt in pcap_reader:    ##逐行读取
             print (repr(pkt))
    pcap文件大逐行读取方法

       常用方法:

    #背景
    from scapy.all import *
    
    with PcapReader('D://trap.pcap') as pcap_reader:
        for pkt in pcap_reader:
            print(pkt.show())   #show()方法
    
    #方法介绍
    show()     #显示每一层报文字段,从二层开始
    summary()    #显示报文摘要信息

      查看时间戳

    from scapy.all import *
    import time
    
    with PcapReader('D://trap.pcap') as pcap_reader:
        for pkt in pcap_reader:
            #获得报文时间戳
            print(pkt.time)
            
            #将时间戳转成格式化时间
            timestamp=time.strftime('%Y-%m-%d %X', time.localtime(pkt.time))
            
            #字符串拼接毫秒
            ms = (pkt.time-int(pkt.time))*10000
            time_ms = '%s.%04d'%(timestamp,ms)
            print(time_ms)

       

    案例:解析pcap中的dhcp格式化输出
  • 相关阅读:
    ajax
    vue 思維導圖
    python项目_log日志的使用
    mysql数据库_serialisers
    常见的时间复杂度及其增长速度比较
    C++中的sort()函数
    用C++实现输入三个整数,中间用逗号隔开
    python——递归函数
    python——函数
    python——可变对象和不可变对象
  • 原文地址:https://www.cnblogs.com/lisenlin/p/9454038.html
Copyright © 2011-2022 走看看