VRDPI
From Immersive Visualization Lab Wiki
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.
- Add a dim to black/grey feature when loading a new packet dump
Project Development Blog
March
3/23/17
- 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.
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.
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.
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.
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.
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.
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/8/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 copy raw values from the packet buffer to their respective typedefs, as well as building a string output of their respective packet headers.
4/9/17
- Performed first deep packet analysis in VR by inspecting captured packets with the PacketBox widget.
4/10/17
- Created first video demoing simple workflow for inspecting the contents of a packet in VRDPI.
-
VIDEO LINK: https://youtu.be/3YF8zjWYFG8 - Fixed timestamps and added Frame layer packet data to the PacketBox info widget.
- Fixed bug with remote manipulation of Packetboxes with the left motion controller.
- Added Sticky mode for remote movement of Packetboxes. You can now set a packetbox to stay in remote movement mode after you release the trigger. Then you can use the other motion controller in teleport mode and you effectively have a way to teleport into the sky to get a birds eye view of the packet data.
4/11/17
- Resolved issues preventing packaging of the project for use on other computers.
- Created longer (4:27) Demo video which shows off sticky grabbing as well as packet manipulation, deep packet inspection and teleportation flight.
- VIDEO LINK: https://www.youtube.com/watch?v=3YF8zjWYFG8
4/18/17
- Created algorithm for performing conversation analysis on the IP level.
- Created algorithm for packet column layout, packets now layout in columns by conversation. A conversation constitutes all traffic between two IP addresses, in both directions. The layout creates a 300 unit circle and arrays each of the lines radiating out from the center of this circle.
- Added sound FX for teleportation, sticky activation and during the packet capture.
4/20/17
- Refined algorithm for packet column layout, made it so that multiple packet captures are laid out contiguously, each conversation being concatenated with the newly captured packets.
- Created column moving algorithm to re-organize existing columns of packets to allow for more packet columns on a wider ring.
4/26/17
- Added floor-level decal repositioining into the column moving algorithm. All decals now reposition properly as successive packets are added to each chain.