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))
常用方法:
#背景 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格式化输出