写点什么

tcpdump 抓包与 scapy 解析(qbit)

用户头像
qbit
关注
发布于: 6 小时前

前言

  • tcpdump 是一个运行在命令行下的数据包抓取工具和分析工具。

  • tcpdump 使用 C 语言编写。

  • Scapy 是一种用于计算机网络的数据包处理工具。

  • Scapy 使用 Python 编写。

  • tcpdump 和 Scapy 底层都是基于 libpcap

  • libcap 遵循 BPF 语法 (Berkeley Packet Filter )

  • tcpdump 和 Scapy 都可以抓取和分析基于 IP 协议的 TCP 和 UDP 报文。

  • 本文使用 tcpdump 抓取报文,并使用 scapy 解析其中的 http 报文。

  • 本文使用操作系统为

OS: Ubuntu 18.04 LTStcpdump: 4.9.3libpcap: 1.8.1Python: 3.8.8Scapy: 2.4.5
复制代码


步骤

tcpdump 抓取报文

tcpdump -c 3# ORtcpdump -c 3 -n --number
复制代码
  • 抓取特定 TCP 报文

# 原地址段为 192.168.0.0/16# 目标地址为 192.168.1.176(实际上是本机)# 网卡为 enp4s0# -n 不解析 ip# -G 60 每 60s 保持一次文件# -w %Y-%m-%d_%H:%M:%S.pcap 按秒存取文件名sudo tcpdump tcp and src net 192.168.0.0/16 and dst 192.168.1.176 -i enp4s0 -n -G 60 -w %Y-%m-%d_%H:%M:%S.pcap
复制代码

scapy 解析报文

  • 解析前面抓取保存的一个文件

# encoding: utf-8# author: qbit# date: 2021-09-10# summary: 使用 scapy 解析 tcpdump 抓取的 pcap 文件
from scapy import packetfrom scapy.all import rdpcap, IP, TCPfrom scapy.layers.http import HTTP, HTTPRequest
pcapfile = './data/2021-09-10_15:35:35.pcap'
portlist = range(8001, 9000)for dport in portlist: packet.bind_layers(TCP, HTTP, dport=dport)packets = rdpcap(pcapfile)for pkt in packets: if pkt.haslayer(HTTPRequest): print(f"*** IP *** \n{pkt[IP].fields}") print(f"*** TCP *** \n{pkt[TCP].fields}") print(f"*** HTTP *** \n{pkt[HTTPRequest].fields}") print('------------------------') srcAddr = f"{pkt[IP].fields['src']}:{pkt[TCP].fields['sport']}" dstAddr = f"{pkt[IP].fields['dst']}:{pkt[TCP].fields['dport']}" uri = '' if 'Host' in pkt[HTTPRequest].fields: uri = pkt[HTTPRequest].fields['Host'] elif 'Path' in pkt[HTTPRequest].fields: uri = pkt[HTTPRequest].fields['Path'] print(f"{srcAddr} -> {dstAddr} {uri}") print('========================')
复制代码


本文出自 qbit snap

发布于: 6 小时前阅读数: 10
用户头像

qbit

关注

开箱即用,拿走不谢。 2018.10.10 加入

软件设计师 网络工程师

评论

发布
暂无评论
tcpdump 抓包与 scapy 解析(qbit)