Hex to Binary

This AWK code is used to translate data that has been exported from Wireshark using
File ... Export Packet Dissections ... As Plain Text ..., checking only the Packet Bytes box
in the Packet Format section (unchecking all others). These print lines are hex characters,
which this code will translate to binary. This can be useful to create a file (e.g. PDF, JPG)
from a packet capture.

BEGIN {BINMODE = 2;}                       # BINMODE of 2 sets writing output to binary mode
{ if ($1 > "0020") {                       # Ignore the lines starting with 0000, 0010 and 0020
   x=0;                                   # There are 16 bytes on each line; Begin at offset 0
   if ($1 == "0030") {x=6;}               # Ignore the first 6 bytes of the 0030 line
   while (x < 16) {                       # We start after bypassing the network header bytes
     n=0;                               # Initialize the binary number to output
     pos = 7+(x*3);                       # Calculate the position of the first hex byte
     hex = substr($0,pos,1);              # Grab the first hex byte
     if (hex == " ") {next;}              # If a blank is found, there are no more bytes
     if (hex <= "9") {n=hex*16;}          # Use multiplication for hex digits 0-9
     if (hex == "a") {n=160;}             # Assign the other hex digits to their binary numbers
     if (hex == "b") {n=176;}
     if (hex == "c") {n=192;}
     if (hex == "d") {n=208;}
     if (hex == "e") {n=224;}
     if (hex == "f") {n=240;}
     hex = substr($0,pos+1,1);            # Grab the second hex byte
     if (hex <= "9") {n=n+hex;}           # Use addition for hex digits 0-9
     if (hex == "a") {n=n+10;}            # Add the other hex digits to their binary numbers
     if (hex == "b") {n=n+11;}
     if (hex == "c") {n=n+12;}
     if (hex == "d") {n=n+13;}
     if (hex == "e") {n=n+14;}
     if (hex == "f") {n=n+15;}
                                          # It is required to print directly to a file using the
     printf "%c", n > "output.bin";       # “>” syntax to avoid AWK inserting a CR before each LF
     x++;                               # Go to the next hex byte on this line                   


Popular posts from this blog

Directory to Rows

SQL Statements