免责声明:本文仅作分享~
目录
在读此文章前,请确保您会使用wireshark并具备一些流量协议的知识。
wireshark
wireshark 使用教程 —— 基础入门、进阶、实战_wireshark使用教程入门-CSDN博客
scapy
Welcome to Scapy’s documentation! — Scapy 2.6.1 documentation
python 官方的 scapy ,主要是hacker构造,嗅探,伪造流量等等。
对于流量包的题目还是有所不同,以下仅针对流量题目 整理的脚本。
pip install scapy
from scapy.all import *
packets = rdpcap("E:\\codes\\wire_ll\\2.pcap") # 加载文件
打印自己想要的数据,就类似列表取值就ok了。
from scapy.all import *
pkts = rdpcap("E:\\codes\\wire_ll\\hacker.pcapng")
# print(pkts) # ---> <hacker.pcapng: TCP:235 UDP:407 ICMP:25 Other:10>
# print(pkts[0].show()) # 更详细
"""
###[ Ethernet ]###
dst = 6e:c0:e8:02:ae:1d
src = 14:5a:fc:2a:08:d7
type = IPv4
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 311
id = 48364
flags =
frag = 0
ttl = 128
proto = udp
chksum = 0xf2c8
src = 79.170.230.212
dst = 213.29.126.100
\options \
###[ UDP ]###
sport = msnp
dport = 30013
len = 291
chksum = 0xf1fa
###[ Raw ]###
load = b'&\x00\x00\x01\x1b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x02\x04[3a\x11\xe9\xa6,0\x01LR\x00*\xe1\\b\x00\xf1\x08\xde|\x8c\x0b\x1a\x0c\x1c,<LV\x00f\x00v\x00\x86\x00\x9c\xa6\x00\xb6\x00\xcc\xdc\xec\xfc\x0f\xfa\x10\x06\x00\x16\x00,<LV\x00l|\x8c\x96\x00\x0b\xf6\x11\x00\xfa\x12\x06\x00\x16\x00,6\x00LV\x00f\x00v\x00\x86\x00\x0b\x0b)\x00\x01\n\x16\x00,6 \x07M\xa0\x9e\xe5O\xffnX\x1b\x97|\x1f\xcf\x86\x03U]\x8c\xe2\xc0\x1d2\xa9\x08%\xc5\x93\xd6\x8f*XB\x04[3aV\x00lp\x01\x0b6x\n\x06\x0c2.13.0.00017\x0b\x1c,<@/P\x01lr\x1e!\x16\x0e\x81L\x1f\x96\x00\xb2\x01(\xa8\xc0\xc1G\x07\xdc\xec\xf0\x0f\x01\xfc\x10\xfc\x11\xfc\x12\xfc\x13\xfc\x14\xfc\x15\xf1\x16\x00\xb5\xfc\x17\xfc\x18\xfc\x19\xfc\x1a\xfc\x1b\xfc\x1c\xfc\x1d\xfc\x1e\xfc\x1f\xfc \xfc!\xfc"\xf2#\x00*\xe1\\\xfc$\xfc%\xfc&\xfc\'\xfc(\xf0)2\xfc*\xfc+\xfc,\xfc-\xf9.\x0c\xf0/\x01I\x0c('
None
"""
print(pkts[0]) # Ether / IP / UDP 79.170.230.212:msnp > 213.29.126.100:30013 / Raw
print(pkts[0][IP].dst) #提字段 数据 ---> 213.29.126.100
print(pkts[0][Raw].load)
遍历:
# for pkt in pkts:
# try:
# data = pkt.getlayer(Raw)
# data.show()
# except:
# pass
例:分析DNS流量
检查数据包是否包含特定协议层(过滤)
from scapy.all import DNS, DNSQR
for packet in packets:
if packet.haslayer(DNS): # 检查是否包含 DNS 协议层
# 进一步检查 DNS 查询部分
if packet.getlayer(DNS).qd is not None:
print("DNS Query Found")
获取域名
from scapy.all import rdpcap, DNS, DNSQR
# 读取 PCAP 文件
packets = rdpcap("E:\\codes\\wire_ll\\2.pcap")
# 遍历每个数据包
for packet in packets:
if packet.haslayer(DNS) and packet.getlayer(DNS).qd is not None:
# 提取 DNS 查询的域名
domain_name = packet.getlayer(DNSQR).qname.decode('utf-8')
# 打印域名的一级部分
print(domain_name.split('.')[0])
例:提取 HTTP 请求中的 Host 信息
from scapy.all import TCP, IP
for packet in packets:
if packet.haslayer(TCP) and packet.haslayer(Raw):
raw_data = packet.getlayer(Raw).load
if b"Host:" in raw_data: # 搜索 HTTP Host 字段
host_line = raw_data.split(b"Host:")[1].split(b"\r\n")[0]
print(f"Host: {host_line.decode('utf-8')}")
例:获取所有应用层的data字段数据
from scapy.all import *
paks = rdpcap('fetus_pcap.pcap')
data = ''
# print(paks)
for pak in paks:
# print(pak[Raw].load.decode())
print(pak.show())
# break
# shuju = pak[Raw].load.decode() + '\n'
# data += shuju
# print(data)
# with open('01.txt','w')as f:
# f.write(data)
scapy强大,玩法很多;但要弄清流量的分级,协议,过滤。
不同的协议无非就是方法,过滤的方法不同。
pyshark
- PyShark 是利用 tshark 和 dumpcap 进行网络数据包解析的 Python 数据包解析器
- 本身并不会解析任何数据包,它只会使用 tshark 功能完成包解析;
- 提供从文件中读取(FileCapture)内容、从活动接口读取内容(LiveCapture)、使用环状缓冲区从活动接口读取内容(LiveRingCapture)、从远程活动接口读取内容(RemoteCapture)等方式;
pip install pyshark
import pyshark
paks = pyshark.FileCapture(r"C:\Users\26255\Desktop\time.pcap", tshark_path=r"E:\wireshark\tshark.exe",display_filter='http.response && frame.number>=4007')
# 三个参数:第一个读文件,第二个tshark路径,第三个过滤的参数。
# print(paks)
for pak in paks:
# 想要什么数据取值就行了(可能会与wireshark中过滤的命令不一样)
print(pak.http.request_uri) # http.request.uri
print(pak.http.time)
几行代码,快速获取你想要的数据。
第三个参数意思:
=== Wireshark 过滤器
用法案例:
使用Python编写PCAP文件解析器:网络流量分析实战指南 - 云原生实践
例:解析 HTTP 请求和响应
提取 HTTP 请求的字段(如 Host
, User-Agent
, Method
等)。
cap = pyshark.FileCapture('path_to_file.pcap', display_filter='http')
for packet in cap:
if 'HTTP' in packet:
http_host = packet.http.host
http_user_agent = packet.http.user_agent
http_method = packet.http.request_method
print(f"Host: {http_host}, User-Agent: {http_user_agent}, Method: {http_method}")
例:分析 DNS 查询和响应
提取 DNS 查询请求以及其响应中的 IP 地址。
cap = pyshark.FileCapture('path_to_file.pcap', display_filter='dns')
for packet in cap:
if 'DNS' in packet:
if hasattr(packet.dns, 'qry_name'): # 查询的域名
domain = packet.dns.qry_name
print(f"DNS Query: {domain}")
if hasattr(packet.dns, 'a'): # DNS 响应的 A 记录
ip_address = packet.dns.a
print(f"Resolved IP: {ip_address}")
还是对于 协议,分级,字段的运用。
例:时间盲注--获取url及响应时间
import pyshark
import urllib.parse
paks = pyshark.FileCapture('time.pcap',display_filter='http.response && frame.number>=4009')
s1 = ''
for pak in paks:
sqls = pak.http.request_uri
sql = urllib.parse.unquote(sqls)
# print(sql)
times = pak.http.time
# print(pak.http.time)
# break
s1 += sql + '\n' + times + '\n'
with open('tt.txt','w+') as f:
f.write(s1)
# paks.close()
flag = ''
with open('tt.txt','r')as f:
for data in f.readlines():
data = data.strip()
# print(data)
# print(type(data))
# break
if '=' in data:
# print(data)
data = data[7:12].replace('=','').replace(',','').strip()
# print(data)
# print(chr(int(data)))
flag += chr(int(data))
# print(flag)
print(flag)
tsahrk.exe
tshark一些常用命令参数解析_tshark命令参数详解-CSDN博客
一文读懂网络报文分析神器Tshark: 100+张图、100+个示例轻松掌握-腾讯云开发者社区-腾讯云
安装wireshark就有~
常用命令:
tshark -r xxx.pcap -Y "icmp && ip.src==xxx" -T fields -e xxx
-r 读取文件
-Y === wireshark过滤
-T 解码结果输出的格式为fields
-e 指定输出哪些字段,(明显,这里就是data字段)
这对于过滤出wirshark“最下层”的字段非常方便。
标签:http,Tshark,Python,data,packet,DNS,print,x00,常用工具 From: https://blog.csdn.net/2303_80857229/article/details/144718177