You are browsing as a guest. Sign up (or log in) to start making projects!

Sedryn

@Sedryn

Joined July 8th, 2026

  • 5Devlogs
  • 1Projects
  • 0Ships
  • 0Votes
Open comments for this post

7h 33m 8s logged

DEVLOG 5

I finished implementing packet trails along with a basic hover system that displays the IP address of the machine under the cursor.

Both systems still need a lot of polishing and additional features before they’re anywhere close to a full release.

I also tweaked the parser slightly to better match the format expected by the animation engine.

Outside of programming, I spent some time creating a logo and banner for the project page. They’re still works in progress, but I’m happy with the direction they’re heading.

Current Progress
Done:

  1. PCAP parser
  2. Animation engine
  3. Packet trails
  4. Basic hover system

Planned:

  1. Camera controls
  2. Timeline
    3)Packet information/stats
    4)Dynamic grid
  3. Search feature
  4. General UI/UX improvements
0
0
1
Open comments for this post

3h 58m 8s logged

DEVLOG -004: Completed Implementing the Animation Engine

To start, I had a great programming session today. As you can see, I logged almost 4 hours on this feature, and every minute went into building the foundation of the animation system.

As the title suggests, I completed the first version of the animation engine using Pygame. I chose Pygame because I already have experience building games with the JavaScript Canvas API, so all I really needed was a lightweight way to draw graphics and animate objects. From what I found while researching, learning a full GUI framework would have taken significantly longer, so Pygame was the most practical choice for this stage of the project.

I also used ChatGPT to generate a sample conversations object (covered in previous devlogs), which served as mock data while developing the renderer.
From there, I implemented the engine myself.

After spending about ten minutes pacing around my room thinking through the architecture, I settled on an animation loop consisting of four stages.

  1. The Setup

The setup stage initializes the application and creates the machines dictionary.

This dictionary acts as a hash lookup, mapping every unique IP address found in the conversations to its corresponding Machine object.

IP Address → Machine()

For organization, I created a Machine class that stores the data and rendering information associated with each endpoint.

This allows packets to instantly locate their source and destination machines without searching through a list.

  1. Loading the Gun

I’ll use a gun as an analogy for the remaining stages.

Instead of iterating through every packet in every conversation every frame, packets waiting to be animated are moved into an activePackets list.

This separates packets that are currently “in flight” from packets that are simply stored in the conversation data.

Each conversation contains three important pieces of information:

index — Tracks the next packet to be animated.

state — Indicates whether the conversation is idle or running.

info — Stores the actual packet data.

A CheckState() function examines each conversation.

If a conversation is idle, it jumps directly to the packet indicated by the current index (avoiding iteration through previous packets), creates a Packet object, places it into activePackets, and marks the conversation as running.

  1. Pulling the Trigger

This stage is intentionally simple.

The update function only iterates over the packets currently stored in activePackets.

Each packet updates its position by interpolating (lerping) toward the destination machine’s coordinates.
No packets outside of the active list are processed during this stage.

  1. The Bullet

Once fired, the packet enters the running state.
As it travels toward the destination,
it continuously checks the remaining distance to its target.

When that distance falls below a predefined threshold, the packet marks itself as done.

Finally, a cleanup function removes all completed packets from activePackets.

If the conversation still has packets remaining, its state returns to idle, allowing the next packet to be loaded and fired.

Here is the code and a demo of version 0.1

1
0
11
Open comments for this post

25m 53s logged

DEVLOG 003
Today’s devlog will be a bit short because I didn’t have time to sit down for a proper programming session.

I spent some time experimenting with the pygame-ce library to get a feel for it. Since I’ve made games using the raw JavaScript Canvas API in the past, picking it up was fairly quick.
I ended up creating a simple square that moves using the keyboard—not anything polished yet, but it’s a good first step toward getting comfortable with the library before building the animation system for Packet Atlas.

0
0
2
Open comments for this post

56m 19s logged

DEVLOG 002 - Finished the parser

Second devlog the title says it all i finished the parser that is section 1 complete!

-REFERENCES-
https://medium.com/a-bit-off/scapy-ways-of-reading-pcaps-1367a05e98a8 Great article about different ways you can read pcap files

https://tcpreplay.appneta.com/wiki/captures.html this is where i got the pcap file

THE IDEA

Now time for the parser ,i used scapy because its a widely used library for manipulating packets and also has great documentation. The end goal would be to create a conversations object in which each isolated conversation of various machines would be stored so that the animator can easily move through the data without having to do any extra work per frame.


-IMPLEMENTATION-


Implementation was relatively straightforward. I iterate through the packets returned by rdpcap(), create an empty conversation object, and insert each packet into its corresponding conversation. If a matching conversation already exists, the packet is appended. Otherwise, a new conversation is created. at the end the conversations dict will be looking something like this

conversations = {convo1: [{ time:12, ip:12.32.45 ..etc},{ time:13, ip:12.32.45 ..etc}], convo2: ….}


Struggles

I first planned to use a hashmap keyed by timestamps, but duplicate timestamps and decimal precision quickly made that idea messy. Instead, I grouped packets into conversations and let the animator iterate through them chronologically like a playhead. It keeps the parser simple and makes the animation side much easier. Making everything asynchronous is Future Me’s problem. Anyways, here’s the code…

0
0
4
Open comments for this post

1h 6m 4s logged

DEVLOG 001 - Project Creation and structure

This is my first devlog i did write some code but the real progress was made with the structure of this project.


PACKET ATLAS

Packet Atlas will be a tool used to visualize network traffic while tools like nmap and wire shark show this with lines on a terminal ,Packet atlas will display every active machine and the data sent between them on a map with a scrollable timeline and animations.
All of which come from a packet capture file(.pcap)

I will be using python as the language with scapy for handling the pcap files and pygame for the animations

the project will have 2 main sections

Section 1 - Parsing

this will be dedicated to making a parser to organize all the data to make the animation and interactive part easier
as mentioned before i will be using scapy for dissecting the packets and seperating distinct conversations between machines in the bulk capture file

Section 2 - Animating

This will be the interactive part including animations for all the different machines making the animations etc.

I have a plan to seperate the different layers and adding different panes for them like the ones seen in the OSI model but i want to build some momentum in the project first before planning that

Section 3 - Bonus

If i have time left i will try and make this into a realtime app similar to a weather radar but for the internet!

Anyways heres some code i just created the folder and messed around with the scapy syntax to get a feel for the library

0
0
10

Followers

Loading…