{ "cells": [ { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from netzob.all import *" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'\\x0c'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = Integer(value=12, unitSize=UnitSize.SIZE_8)\n", "i.generate().tobytes()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'\\x00\\x00\\x00\\x0c'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = Integer(value=12, unitSize=UnitSize.SIZE_32)\n", "i.generate().tobytes()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'\\x0c\\x00\\x00\\x00'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = Integer(value=12, unitSize=UnitSize.SIZE_32, endianness=Endianness.LITTLE)\n", "i.generate().tobytes()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'\\xff\\xf4'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = Integer(value=-12, sign=Sign.SIGNED, unitSize=UnitSize.SIZE_16)\n", "i.generate().tobytes()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "bitarray('00000000000000000000010011010010')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "int32be(1234).value\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'\\x00\\x00\\x04\\xd2'" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "int32be(1234).value.tobytes()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "48" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = Raw(nbBytes=6)\n", "len(r.generate())" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(r.generate().tobytes())" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{111, 116}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = Raw(nbBytes=100, alphabet=[b\"t\", b\"o\"])\n", "data = r.generate().tobytes()\n", "data_set = set(data)\n", "data_set" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "fheader" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fh0 = Field(name='fh0')\n", "fh1 = Field(name='fh1')\n", "fheader = Field([fh0, fh1], name='fheader')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Abstract 和 Preset 功能" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# 构建规则\n", "f1 = Field(name=\"name\", domain=\"john\")\n", "f2 = Field(name=\"question\", domain=\", what's up in \")\n", "f3 = Field(name=\"city\", domain=Alt([\"Paris\", \"Berlin\"]))\n", "f4 = Field(name=\"mark\", domain=\" ?\")\n", "symbol = Symbol([f1, f2, f3, f4], name=\"Symbol-john\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "设置预测约束(Setting the Preset)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "preset = Preset(symbol)\n", "preset[f3] = b\"Paris\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "提供数据进行测试" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "ename": "AbstractionException", "evalue": "With the symbol/field 'Symbol-john', can abstract the data: 'john, what's up in Berlin ?', but some parsed values do not match the expected preset.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAbstractionException\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[27], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mjohn, what\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms up in Berlin ?\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m----> 2\u001b[0m data_structure \u001b[38;5;241m=\u001b[39m \u001b[43msymbol\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mabstract\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpreset\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreset\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/CCSDS_study/ccsds/lib/python3.8/site-packages/netzob/Model/Vocabulary/AbstractField.py:628\u001b[0m, in \u001b[0;36mAbstractField.abstract\u001b[0;34m(self, data, preset, memory)\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m data_structure\n\u001b[1;32m 627\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 628\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m AbstractionException(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWith the symbol/field \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, can abstract the data: \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, but some parsed values do not match the expected preset.\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;28mself\u001b[39m, data)) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 629\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m InvalidParsingPathException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 630\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m AbstractionException(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWith the symbol/field \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, cannot abstract the data: \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m. Error: \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;28mself\u001b[39m, data, e)) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n", "\u001b[0;31mAbstractionException\u001b[0m: With the symbol/field 'Symbol-john', can abstract the data: 'john, what's up in Berlin ?', but some parsed values do not match the expected preset." ] } ], "source": [ "data = \"john, what's up in Berlin ?\"\n", "data_structure = symbol.abstract(data, preset=preset)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "OrderedDict([('name', b'john'),\n", " ('question', b\", what's up in \"),\n", " ('city', b'Paris'),\n", " ('mark', b' ?')])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = \"john, what's up in Paris ?\"\n", "data_structure = symbol.abstract(data, preset=preset)\n", "data_structure" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "ccsds", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }