我正在编写一个分析DHCP数据包的程序,遇到了选项43(特定于供应商的信息)。这更多的是一个编程问题,在技术上与网络和DHCP关系不大,因此我将其标记为python。你知道吗
根据RFC 2132(第19页),方案43的结构如下:
Code Len Data item Code Len Data item Code
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| T1 | n | d1 | d2 | ... | T2 | n | D1 | D2 | ... | ... |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
当转换为python“bytes”对象时,它应该如下所示:
[T1, n, d1, d2, ..., T2, n, D1, D2, ...]
其中n是数据项的长度(Dn)。你知道吗
理想情况下,我希望迭代这个bytes对象,并将每个数据项的代码保存为键,并将其映射到适当的数据项值。即:
{T1: [d1, d2, d3], T2: [D1, D2, D3]}
例如:
[0, 1, 2, 1, 2, 5, 6, 3, 4, 9, 10, 11, 12]
应该转化为:
{0: [2], 1: [5,6], 3: [9, 10, 11, 12]}
在python中有正确的方法吗?你知道吗
编辑:也是。代码(Tn)是唯一的。你知道吗
我的解决方案:
输出:
观察:T1、T2、…、Tn不应重复。你知道吗
使用递归函数:
还可以将
for
循环与itertor结合使用。外部for
循环将遍历T
的所有值,而对循环内next
的调用将从列表中删除n
和d1
,…,dn
。你知道吗你甚至可以把这些都放到一本字典里。。。你知道吗
示例:
相关问题 更多 >
编程相关推荐