cyberchef/tests/operations/tests/ParseDNSMessage.mjs
Minghang Chen 462cda7f2e Add DNS message parsing operation
Example:

- Input: `q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB`
- Operations: `From Base64` -> `Parse DNS Message`
- Output:
```
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43981
;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.example.com.		IN	A
```
2024-06-18 00:05:08 -07:00

85 lines
2.5 KiB
JavaScript

/**
* Parse DNS Message tests.
*
* @author Minghang Chen [chen@minghang.dev]
* @copyright Crown Copyright 2024
* @license Apache-2.0
*/
import TestRegister from "../../lib/TestRegister.mjs";
TestRegister.addTests([
{
name: "Parse DNS Message: No Data",
input: "",
expectedOutput: "Malformed DNS message: ParseError: insufficient bytes remaining for read: needs 12, have 0",
recipeConfig: [
{
op: "Parse DNS Message",
args: ["dig-like"],
},
],
},
{
name: "Parse DNS Message: Malformed",
input: "\xab\xcd\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\x77\x77\x77\x07\x65\x78\x61\x6d\x70\x6c\x65\x03\x63\x6f",
expectedOutput: "Malformed DNS message: RangeError: try to access beyond buffer length: read 3 start from 25",
recipeConfig: [
{
op: "Parse DNS Message",
args: ["dig-like"],
}
],
},
{
name: "Parse DNS Message: dig-like",
input: "\xab\xcd\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\x77\x77\x77\x07\x65\x78\x61\x6d\x70\x6c\x65\x03\x63\x6f\x6d\x00\x00\x01\x00\x01",
expectedOutput: `;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43981
;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.example.com. IN A`,
recipeConfig: [
{
op: "Parse DNS Message",
args: ["dig-like"],
}
],
},
{
name: "Parse DNS Message: dns-json",
input: "\xab\xcd\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\x77\x77\x77\x07\x65\x78\x61\x6d\x70\x6c\x65\x03\x63\x6f\x6d\x00\x00\x01\x00\x01",
expectedOutput: `{
"Status": 0,
"TC": false,
"RD": true,
"RA": false,
"AD": false,
"CD": false,
"Question": [
{
"name": "www.example.com.",
"type": 1
}
],
"Answer": []
}`,
recipeConfig: [
{
op: "Parse DNS Message",
args: ["dns-json"],
}
],
},
{
name: "Parse DNS Message: unsupported-output-format",
input: "\xab\xcd\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\x77\x77\x77\x07\x65\x78\x61\x6d\x70\x6c\x65\x03\x63\x6f\x6d\x00\x00\x01\x00\x01",
expectedOutput: "Unsupported output format: invalid",
recipeConfig: [
{
op: "Parse DNS Message",
args: ["invalid"],
}
],
}
]);