Show HN: A toy version of Wireshark (student project)

lixiasky | 262 points

This reads a bit like Linus' first annoucement, see https://en.wikipedia.org/wiki/History_of_Linux#:~:text=Hello... - godspeed to you, and let's see when you will take over :)

Cockbrand | 4 days ago

Cool! I did something similar when I wanted to learn Go, but did my own parsers instead of using gopacket, I would recommend doing that yourself if you want to learn more low level stuff.

How I parsed IP for example:

  type Addr [4]uint8
  
  func (ip Addr) String() string {
   return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
  }
  
  type Hdr struct {
   Version    uint8
   IHL        uint8
   DSCP       uint8
   ECN        uint8
   Length     uint16
   Id         uint16
   Flags      uint8
   Fragoffset uint16
   TTL        uint8
   Protocol   uint8
   Checksum   uint16
   Src        Addr
   Dst        Addr
  }
  
  func (hdr *Hdr) Parse(d []byte) error {
   hdr.Version = uint8(d[0] >> 4)
   hdr.IHL = uint8(d[0] & 0x0f)
   hdr.DSCP = uint8(d[1] >> 6)
   hdr.ECN = uint8(d[1] & 0x03)
   hdr.Length = uint16(binary.BigEndian.Uint16(d[2:4]))
   hdr.Id = uint16(binary.BigEndian.Uint16(d[4:6]))
   hdr.Flags = uint8(d[6] >> 5)
   hdr.Fragoffset = uint16(binary.BigEndian.Uint16(d[6:8])) & 0x1fff
   hdr.TTL = d[8]
   hdr.Protocol = d[9]
   hdr.Checksum = uint16(binary.BigEndian.Uint16(d[10:12]))
   hdr.Src = Addr{d[12], d[13], d[14], d[15]}
   hdr.Dst = Addr{d[16], d[17], d[18], d[19]}
  
   if hdr.IHL > 5 {
    fmt.Println("extra options detected") // TODO: support for extra options
   }
   return nil
  }
Hikikomori | 4 days ago

Go is great for tools like this. I've built MITM protocol analyzers a few times. Being able to completely customize the handling, analysis, and break in in the debugger can make it more useful than a super-capable but general-purpose tool like Wireshark.

jasonthorsness | 4 days ago

Cool! I've sometimes gotten the impression that wireshark-lite is an unfulfilled niche so this is nice.

worldsayshi | 4 days ago

Cool! Will definitely take a look.

Curios what made you choose Go for this project? I am looking into building a toy version of Burp with either Rust/Go but still undecided.

dotaenjoyer322 | 4 days ago

Hey nice project! I have a similar project too, originated from collecting data via Wireshark and wanting to view it as a graph and do a little lite weight anomaly detection. It's also a learning project for me.

https://github.com/derekburgess/jaws

spacecadet | 3 days ago

Genuine question: is this a wrapper around Google's gopacket?

leumassuehtam | 3 days ago

Screenshots please!

thenthenthen | 4 days ago

This looks nice, perhaps name your project babyshark?

colesantiago | 4 days ago

> This project is not just code — it's a response. Amid political pressure, some universities like Harvard, MIT, and CMU stood up for international students.

> I’m just an ordinary undergraduate with no resources or background. This is my way of responding — not by petition, but through code. Vanta may be small, but it’s real, and it’s mine.

This comes off as super ChatGPT-y to me. "X is not y — it's Z! Preamble, passionate statement. Sycophantic encouraging statement — list, of, a, few, things, but also this. Summarize statement, but this other thing, and saying the same thing again but in a slightly different way."

I've given up on ChatGPT because of this style of writing.

op00to | 3 days ago

[dead]

appendixv2 | 3 days ago

A small Wireshark? A... baby shark?

moffkalast | 3 days ago

[stub for offtopicness]

dang | 4 days ago

Now you’ll just have to figure out how to implement all of the vulnerabilities historically present in wireshark parsers! /s

BobbyTables2 | 3 days ago

[dead]

hnlosers | 3 days ago

[flagged]

woleium | 3 days ago

[flagged]

kinduff | 4 days ago

[flagged]

remram | 3 days ago