Tidied up 'Parse UDP' operation

This commit is contained in:
n1474335 2019-08-23 10:56:13 +01:00
parent 46fa7475cf
commit 0031345383
3 changed files with 16 additions and 23 deletions

View File

@ -3,7 +3,6 @@
[![Build Status](https://travis-ci.org/gchq/CyberChef.svg?branch=master)](https://travis-ci.org/gchq/CyberChef) [![Build Status](https://travis-ci.org/gchq/CyberChef.svg?branch=master)](https://travis-ci.org/gchq/CyberChef)
[![dependencies Status](https://david-dm.org/gchq/CyberChef/status.svg)](https://david-dm.org/gchq/CyberChef) [![dependencies Status](https://david-dm.org/gchq/CyberChef/status.svg)](https://david-dm.org/gchq/CyberChef)
[![npm](https://img.shields.io/npm/v/cyberchef.svg)](https://www.npmjs.com/package/cyberchef) [![npm](https://img.shields.io/npm/v/cyberchef.svg)](https://www.npmjs.com/package/cyberchef)
![](https://reposs.herokuapp.com/?path=gchq/CyberChef&color=blue)
[![](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/gchq/CyberChef/blob/master/LICENSE) [![](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/gchq/CyberChef/blob/master/LICENSE)
[![Gitter](https://badges.gitter.im/gchq/CyberChef.svg)](https://gitter.im/gchq/CyberChef?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Gitter](https://badges.gitter.im/gchq/CyberChef.svg)](https://gitter.im/gchq/CyberChef?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)

View File

@ -24,37 +24,35 @@ class ParseUDP extends Operation {
this.module = "Default"; this.module = "Default";
this.description = "Parses a UDP header and payload (if present)."; this.description = "Parses a UDP header and payload (if present).";
this.infoURL = "https://wikipedia.org/wiki/User_Datagram_Protocol"; this.infoURL = "https://wikipedia.org/wiki/User_Datagram_Protocol";
this.inputType = "byteArray"; this.inputType = "ArrayBuffer";
this.outputType = "json"; this.outputType = "json";
this.presentType = "html"; this.presentType = "html";
this.args = []; this.args = [];
} }
/** /**
* @param {Uint8Array} input * @param {ArrayBuffer} input
* @returns {Object} * @returns {Object}
*/ */
run(input, args) { run(input, args) {
if (input.byteLength < 8) {
if (input.length < "8"){
throw new OperationError("Need 8 bytes for a UDP Header"); throw new OperationError("Need 8 bytes for a UDP Header");
} }
const s = new Stream(input); const s = new Stream(new Uint8Array(input));
//Parse Header // Parse Header
const UDPPacket = { const UDPPacket = {
"Source port": s.readInt(2), "Source port": s.readInt(2),
"Destination port": s.readInt(2), "Destination port": s.readInt(2),
"Length": s.readInt(2), "Length": s.readInt(2),
"Checksum": toHex(s.getBytes(2), "0x") "Checksum": toHex(s.getBytes(2), "")
}; };
//Parse data if present // Parse data if present
if (s.hasMore()){ if (s.hasMore()) {
UDPPacket.Data = toHex(s.getBytes(UDPPacket.Length - 8), "0x"); UDPPacket.Data = toHex(s.getBytes(UDPPacket.Length - 8), "");
} }
return UDPPacket; return UDPPacket;
} }
/** /**
@ -64,21 +62,17 @@ class ParseUDP extends Operation {
*/ */
present(data) { present(data) {
const html = []; const html = [];
html.push("<table class='table table-hover table-sm table-bordered' style='table-layout: fixed'>"); html.push("<table class='table table-hover table-sm table-bordered table-nonfluid' style='table-layout: fixed'>");
html.push("<tr>"); html.push("<tr>");
html.push("<th>Field</th>"); html.push("<th>Field</th>");
html.push("<th>Value</th>"); html.push("<th>Value</th>");
html.push("</tr>"); html.push("</tr>");
for (const key in data) { for (const key in data) {
switch (key){ html.push("<tr>");
default: { html.push("<td style=\"word-wrap:break-word\">" + key + "</td>");
html.push("<tr>"); html.push("<td>" + data[key] + "</td>");
html.push("<td style=\"word-wrap:break-word\">" + key + "</td>"); html.push("</tr>");
html.push("<td>" + data[key] + "</td>");
html.push("</tr>");
}
}
} }
html.push("</table>"); html.push("</table>");
return html.join(""); return html.join("");

View File

@ -12,7 +12,7 @@ TestRegister.addTests([
{ {
name: "Parse UDP: No Data - JSON", name: "Parse UDP: No Data - JSON",
input: "04 89 00 35 00 2c 01 01", input: "04 89 00 35 00 2c 01 01",
expectedOutput: "{\"Source port\":1161,\"Destination port\":53,\"Length\":44,\"Checksum\":\"0x010x01\"}", expectedOutput: "{\"Source port\":1161,\"Destination port\":53,\"Length\":44,\"Checksum\":\"0101\"}",
recipeConfig: [ recipeConfig: [
{ {
op: "From Hex", op: "From Hex",
@ -30,7 +30,7 @@ TestRegister.addTests([
}, { }, {
name: "Parse UDP: With Data - JSON", name: "Parse UDP: With Data - JSON",
input: "04 89 00 35 00 2c 01 01 02 02", input: "04 89 00 35 00 2c 01 01 02 02",
expectedOutput: "{\"Source port\":1161,\"Destination port\":53,\"Length\":44,\"Checksum\":\"0x010x01\",\"Data\":\"0x020x02\"}", expectedOutput: "{\"Source port\":1161,\"Destination port\":53,\"Length\":44,\"Checksum\":\"0101\",\"Data\":\"0202\"}",
recipeConfig: [ recipeConfig: [
{ {
op: "From Hex", op: "From Hex",