首页 > 编程语言 >Python-流量分析常用工具脚本(Tshark,pyshark,scapy)

Python-流量分析常用工具脚本(Tshark,pyshark,scapy)

时间:2024-12-26 09:57:09浏览次数:6  
标签:http Tshark Python data packet DNS print x00 常用工具

免责声明:本文仅作分享~

目录

wireshark

scapy

例:分析DNS流量

检查数据包是否包含特定协议层(过滤)

获取域名

例:提取 HTTP 请求中的 Host 信息

pyshark

例:解析 HTTP 请求和响应

例:分析 DNS 查询和响应

tsahrk.exe


在读此文章前,请确保您会使用wireshark并具备一些流量协议的知识。

wireshark

wireshark 使用教程 —— 基础入门、进阶、实战_wireshark使用教程入门-CSDN博客


scapy

Welcome to Scapy’s documentation! — Scapy 2.6.1 documentation

使用 — Scapy 2023.09.03 文档

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网络数据包解析 | School

  • 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

相关文章

  • 【最新原创毕设】基于PPH的花涧订购系统+00332(免费领源码)可做计算机毕业设计JAVA、PHP
    摘 要近年来,电子商务的快速发展引起了行业和学术界的高度关注。花涧订购系统旨在为用户提供一个简单、高效、便捷的花卉购物体验,它不仅要求用户清晰地查看所需信息,而且还要求界面设计精美,使得功能与页面完美融合,从而提升系统的可操作性。因此,我们需要深入研究信息内容,并利用......
  • 图像边缘检测与轮廓提取详解及python实现
    目录图像边缘检测与轮廓提取详解第一部分:图像边缘检测与轮廓提取概述1.1什么是边缘检测和轮廓提取?1.2边缘检测与轮廓提取的应用领域1.3为什么需要边缘检测和轮廓提取?第二部分:常见的图像边缘检测算法2.1Sobel算子2.2Canny边缘检测2.3拉普拉斯算子(LaplacianofGaus......
  • 华为机试:仿 LISP 运算 - Python实现之篇3
    篇1中可以将字符串解析成Python的list的形式,用编程术语叫做:解析出语法树.篇2中可以实现表达式的求值.根据操作符,跳转到相应的求值分支.以上功能,仅仅实现了一个计算器的功能.离变成编程语言还差了:函数定义和调用.那么,篇3来实现函数定义,即lambda的定义与解......
  • 将Python模块打包为可直接运行的ZIP文件
    要使用zipapp将Python模块(例如位于E:\py\abc.py)打包为可直接运行的ZIP文件,你需要按照以下步骤进行操作:一、准备环境确保Python安装:你需要有Python解释器安装在你的系统上,因为zipapp是Python的一个标准库模块。准备项目文件:确保你的Python模块(如abc.py)以及任何依赖项都位于同一......
  • python多进程通过socket通讯
    服务进程和客户端同体,代码:importsocketimportmultiprocessingdefhandle_server(connection):data=connection.recv(1024)print("接收到客户端请求:",data.decode(),"\n")#发送数据connection.sendall('我是服务器进程,哈哈'.encode('u......
  • Python 有哪些常用的库
    Python拥有一个庞大的生态系统,其中包含了许多用于不同领域的库。以下是一些常用的Python库:1.标准库Python的标准库非常强大,包括了用于文件操作、系统调用、网络通信等的模块。2.Web开发Flask:一个轻量级的Web应用框架。Django:一个高级的Web框架,内置了用户认证、内......
  • python图片脚本4-批量图片加水印(详细注释+GUI界面+exe可执行文件)
    目录前言导航pillow库的使用篇tkiner库的使用篇图片脚本篇源码批量处理图片尺寸脚本源码效果GUI界面源码效果打包成.exe可执行文件共勉博客前言本文介绍一个用python第三方库pillow写的批量处理图片加水印的脚本,以及脚本对应的使用tkinter库写的GUI界面并把它打......
  • Python 抽象基类 ABC :从实践到优雅
    今天我们来聊聊Python中的抽象基类(AbstractBaseClass,简称ABC)。虽然这个概念在Python中已经存在很久了,但在日常开发中,很多人可能用得并不多,或者用得不够优雅。让我们从一个实际场景开始:假设你正在开发一个文件处理系统,需要支持不同格式的文件读写,比如JSON、CSV、XML等。......
  • Python数据分析_Pandas_数据分析入门_3
    文章目录今日内容大纲介绍1.DataFrame-保存数据到文件2.DataFrame-读取文件数据3.DataFrame-数据分析入门4.DataFrame-分组聚合计算5.Pandas-基本绘图6.Pandas-常用排序方法7.Pandas案例-链家数据分析7.Pandas案例-链家数据分析_GIF_demo了解数据df1.info()df1.describ......
  • python爬虫实验:用Python爬取链家指定数据--附完整代码(基于requests和BeautifulSoup实
    1、前言 本实验实现了对链家房屋名字,所在小区,装饰,是否核验,楼层,总楼层以及租金进行爬取,仅供学习使用。2、url分析第二页:https://cd.lianjia.com/ershoufang/pg2/第三页:https://cd.lianjia.com/ershoufang/pg3/故第i页的url为:https://cd.lianjia.com/ershoufang/pg{i}/......