VRDPI

From Immersive Visualization Lab Wiki
Revision as of 12:57, 9 April 2017 by M5west (Talk | contribs)

Jump to: navigation, search

Contents

Project Overview

The VRDPI is intended to be a tool for deep packet capture and analysis in Virtual Reality. Using standard virtual reality controls (Oculus Touch, Vive Motion Controllers) users will be able to select a network interface to capture and a duration of the capture. Packet capture will be completed in the background (seperate thread) and the results will be displayed inside VR.


Project Goals

  • Render deep packet inspection results in a virtual reality environment. Utilizing the WinPCap library, Unreal Engine 4 with 99% C++ UE4 API.
  • Renders each TCP/UDP session in the form of a packet column. The packet columns representing each session’s packet stream are arrayed in front of the user after capture in the form of a semi-arc.
  • Users will utilize standard VR motion controller interface patterns to navigate the VR environment. Including VR teleportation, direct controller to object manipulations, and controller to remote object at a distance manipulations.
  • User can also resize a packet to make the data displayed on its front face larger and more clear.
  • Information inside the packet is divided into layers which represent each layer of the network stack. Frame layer, Ethernet layer, IP layer, TCP layer, and finally the application layer.
  • Each layer will be color coded. Each layer will display its data in hexadecimal format.

Developer

  • Marlon West

Project Adviser

  • Jurgen Schulze

Technologies

  • Unreal Engine v4.15.1
  • WinPCap Library v4.1.2
  • Oculus Rift
  • HTC Vive


TODO

  • Add PacketBox decals for each Packetbox, indicating packet #, timestamp and if it is an ACK.
  • Setup PacketBox information display widget. Widget will have multiple collapsible fields that are inside a scrolling area.
  • Setup packet resizing, scaling the height and width of the box while maintaining the same depth.
  • Setup session recognition, divide packet column into session columns.
  • Attempt a real-time packet capture animation
  • Add a statistical output board close by the podium.

Project Development Blog

March

3/23/17

First Screenshot of VRDPI
  • Created VRDPI Unreal Engine 4.15.1 Project using the C++ template.
  • Imported relevant class files from DemoA project.
  • Created large (5km x 5km) floor.
  • Created "Target" material in Photoshop (2000x2000) for origin floor indicator. Imported into UE4 as texture.
  • Created blender model for podium. Imported into UE4 as static mesh.
First Packet Capture of VRDPI


3/24/17

  • Created PacketHelper class and linked the WinPCap static library into the project.
  • Extended PacketHelper as a child of FRunnable UE4 class in order to make the packet capture multithreaded.
  • Successfully tested packet capture in VR.


3/25/17

  • Researched how to properly integrate C style callbacks with UE4.
  • Reconfigured PacketHelper class to push data back to PlayerController object.


3/26/17

  • Created PacketHolder class to contain individual packets.
  • Added static methods for retrieving adapter configuration to PacketHelper.
  • Created Podium class and podium widget dialog to let the user setup and initiate the packet capture.
Podium control widget, VRDPI


3/27/17

  • Debugged and improved the Podium widget
  • Created AdapterButton class to contain the buttons which display the adapter list on the podium.


3/28/17

  • Finished widget functionality implementation. Capture packet button will be disabled during a packet captured and re-enabled after.
  • Created PacketBox actor class which will hold the virtual representation of a packet in VR.
  • Created Blender models for the PacketBox and the handle. Imported into UE4 as static meshes.
Packets represented in VR, VRDPI


3/29/17

  • Fleshed out PacketBox class adding the materials and meshes. Added event handling.
  • Created a PacketBox generation method in Podium, aligns the packets linearly, pointing in the direction specified.


3/30/17

  • Added local and remote movement capabilities to PacketBox.
Packet Chain Labels, VRDPI


3/31/17

  • Created Decal images for Cargo Container font. Imported images into UE4
  • Created Decal materials for all the Cargo Container font images.
  • Created DecalHelper class to store the Decal material instances, and use them to return new decal instances upon demand.
  • Added CreateDecalsFromString to Podium class to convert String->Decal actors.


April

4/1/17

  • Created algorithm to arrange decals at regular intervals in a Packetbox chain, given a direction vector and origin.


4/2/17

  • Debugged process for taking multiple captures, one after the other. VRDPI now can capture more than once and arranges the captures in a line, one after the other.
Remote manipulation of packet via pointer beam, VRDPI


4/3/17

  • Researched FStreamableManager to facilitate asynchronis loading of assets.
  • Created Loading widget.
  • Adapted Podium class to use pool of pre-allocated actor objects.
  • Tested 10,000 packets, but allocated 16gb+ and crashed. With 1,000 packets the operation took ~2 seconds.
  • Opted for 1,000 packet soft limit, which the user can add to with additional captures.
  • Created packet capture indicator animation on the Podium widget.
Packet capture indicator, VRDPI


4/4/17

  • Created algorithm for arranging decals on the side of a packet box.


4/5/17

  • Tested and debugged algorithm for placing packet box decals on the PacketBoxes. Added variable scaling to packet box labels.
  • Filled in PacketBox widget, creating buttons and collapsible text areas.
  • Added alphanumeric characters to decal alphabet.
  • Aligned PacketBox widget with front of packet.


4/7/17

  • Researched how to dynamically resize text areas in a widget. Found the Size widget component which allows you to specify the size.
  • Setup the PacketBox widget to display five deep packet analysis layers. The layers are as follows: Frame Layer, Ethernet Layer, IP Layer, TCP Layer and Application Layer.
  • Created a method for calculating the lines used by a given frame analysis.
  • Created 3 typedefs for storing packet header data, for ethernet, ip, udp and tcp layers.
  • Created generateEthernetFrameString(), generateIPFrameString() and generateTCPFrameString(). These methods copys raw values from the packet buffer to their respective typedefs, as well as building a string output of their respective packet headers.

4/7/17

  • Performed first deep packet analysis in VR by inspecting captured packets with the PacketBox widget.