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格式化输出

 

posted @ 2018-08-10 20:02  森林326  阅读(392)  评论(0编辑  收藏  举报