【发布时间】:2026-02-08 14:05:01
【问题描述】:
香农熵是:
\r\n\r\n is the end of a HTPP header:
不完整的 HTTP 标头:
我有一个 PCAP 格式 (dump.pcap) 的网络转储,我正在尝试使用 Python 在标头中计算带有 \r\n\r\n 和没有 \r\n\r\n 的 HTTP 协议中的数据包数量的熵,并比较它们。我使用以下方法读取数据包:
import pyshark
pkts = pyshark.FileCapture('dump.pcap')
我认为香农公式中的Ti 是我的转储文件的数据。
dump.pcap:https://uploadfiles.io/y5c7k
我已经计算了 IP 号码的熵:
import numpy as np
import collections
sample_ips = [
"131.084.001.031",
"131.084.001.031",
"131.284.001.031",
"131.284.001.031",
"131.284.001.000",
]
C = collections.Counter(sample_ips)
counts = np.array(list(C.values()),dtype=float)
#counts = np.array(C.values(),dtype=float)
prob = counts/counts.sum()
shannon_entropy = (-prob*np.log2(prob)).sum()
print (shannon_entropy)
有什么想法吗?是否可以计算带有\r\n\r\n而头部没有\r\n\r\n的HTTP协议中数据包数量的熵,或者这是一个无稽之谈?
转储的几行:
30 2017/246 11:20:00.304515 192.168.1.18 192.168.1.216 HTTP 339 GET / HTTP/1.1
GET / HTTP/1.1
Host: 192.168.1.216
accept-language: en-US,en;q=0.5
accept-encoding: gzip, deflate
accept: */*
user-agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Firefox/45.0
Connection: keep-alive
content-type: application/x-www-form-urlencoded; charset=UTF-8
【问题讨论】:
-
这是一个无稽之谈。正如您在 IP 地址计算中所展示的,香农的熵是根据 字符串 计算的,而不是数据包的数量。你在寻找字符串“\r\n\r\n”的熵吗?这是用this handy online calculator 计算的
-
@ScouserInTrousers:我认为我可以计算带有“\r\n\r\n”和没有“\r\n\r\n”的数据包的频率。这是没有意义的吗?感谢您的帮助!
-
当然,你可以计算频率没问题。我对
pyshark不熟悉,但如果你能捕获HTTP 请求,你可以只做一个正则表达式并有两个计数器:count_with和count_without。如果字符串中有“\r\n\r\n”,则递增count_with;否则递增count_without。 -
@ScouserInTrousers:好主意,但问题是怎么做?我不会写剧本!你能帮帮我吗?
-
你不太明白你在做什么。公式中的
Ti是看到某个字符的概率。而且您无法计算数据包数量的熵。但是您可以计算每个特定页面的熵。首先,您必须找到每个符号的概率。为此,您需要估计这些概率。这意味着下载尽可能多的页面(几千就足够了,以很好地表示统计数据),并在所有数据上运行您的代码。
标签: python python-2.7 python-3.x entropy