Here is the list of projects maintained open-source. As you see, most of the codes are related to networking protocols and written in Go. This page is updated not so often. My GitHub profile would be nicer to see the latest works.

Mobile Network

Technologies used in the MNO’s infrastructure is the main field I work on. Some other protocols not listed below are planned to be released shortly.

wmnsk/go-gtp

GTP(GPRS Tunneling Protocol) implemented in pure Golang.

  • GTP(GPRS Tunneling Protocol) is used for handling packet traffic in mobile core networks.
  • This package contains GTPv0, v1, v2 protocols, which means it covers from 2G to 4G/LTE. (Not all of the feature is implemented, though.)
  • As the behavior should vary depending on the equipment and operator that uses the protocol, the networking is kept as flexible as possible, rather than to make its implementation high-level that works without effort.
  • Some functional examples for specific common equipment is available instead so that it helps developers want to make it as they like.

wmnsk/gtp_exporter

Prometheus exporter for Linux kernel GTP-U.

  • Linux has a Kernel module for GTP-U, which makes the handling of GTP-U packets easier and more performant than implementing it in userland.
  • gtp_exporter exports some information about the GTP tunnels retrieved from the module via Netlink, like the number of tunnels with the peer address and the network devices used for that purpose, etc.

wmnsk/go-pfcp

PFCP(Packet Forwarding Control Protocol) implementation in Golang.

  • PFCP(Packet Forwarding Control Protocol) is a signaling protocol used in mobile networking infrastructure(LTE EPC, 5GC) to realize CUPS architecture(Control and User Plane Separation, not a printing system).
  • The structure of this protocol is similar to GTPv2-C, but messages and IEs are new and not compatible with GTP.

wmnsk/go-m3ua

M3UA implementation in pure Golang.

  • M3UA(MTP3 User Adaptation Layer) is a part of SIGTRAN protocol stack(IP/SCTP/M3UA//SCCP/TCAP/…), born to replace MTP2/MTP3 layer in SS7 stack along with SCTP(Stream Control Transmission Protocol).
  • M3UA works over SCTP/IP. In the past, each node in the mobile core network had a unique local address called Point Code(PC). One of the M3UA’s main functionality is translating the PC into IP, which enables the interoperability between the legacy nodes and modern(?) nodes.
  • This package provides encoding/decoding and automated networking state machine by wrapping the SCTP/IP layer. That means users don’t need to care about its state; they can easily send the payload(upper layers like SCCP, MAP, etc.).

wmnsk/go-sccp

SCCP protocol implementation in pure Golang.

  • SCCP(Signalling Connection Control Part) is a part of SS7/SIGTRAN protocol stack(IP/SCTP/M3UA/SCCP/TCAP/…).
  • As the name implies, it was born to control connections between nodes, but currently, it is just used for wrapping upper layers in most cases.

wmnsk/go-tcap

TCAP implementation in Golang.

  • TCAP(Transaction Capabilities Apllication Part) is a part of SS7/SIGTRAN protocol stack(IP/SCTP/M3UA/SCCP/TCAP/…).
  • Its main purpose is to handle(differentiate) multiple transactions in a node by giving IDs to each transaction.
  • It uses ASN.1 BER style of encoding, but my implementation does not have that; just implemented by hand.

wmnsk/milenage

MILENAGE algorithm implemented in the Go Programming Language.

  • MILENAGE is a set of confidenciality/integrity algorithms developed by 3GPP.
  • This algorithm is released as a reference implementation in C by 3GPP and used commonly for ciphering between UE(smartphones) and HSS/MME(core network). My package is a porting of that for Golang with a few simplifications.
  • The implementations in Erlang and Kotlin are also available on my GitHub. I implement MILENAGE when trying new languages :)

Networking (Non-mobile)

I also have some interests in ICS/SCADA and VPN-like protocols, but not so expertized. I sometimes start implementing the protocol for these areas before reading the docs/spec sufficiently, which makes me understand them better.

gopcua/opcua

Simple OPC UA implementation in the Go Programming Language.

  • OPC UA is a protocol stack used in the industrial world, such as factories.
  • The OPC UA protocol is recommended by Industrie 4.0 strategies, which expects the networking protocol to be standardized without specific vendors, secure, and reliable enough.
  • This is the most active, prospering repository that I’ve maintained so far; I’m feeling delighted working together with great collaborators/contributors :)

wmnsk/go-hip

HIP(Host Identity Protocol) implementation in pure Golang.

  • HIP(Host Identity Protocol) is born to separate the two main roles of IP address: identifier and locator, by overwrapping IP address.
  • As it works between IP and transport layer, it is quite hard not only to be deployed in the existing networks, but also to implement it with full networking feature only with pure Golang, but I believe this for the testing purpose implementation can play a certain role.

Misc

When something intrigues me, such as news about vulnerabilities, I try to write some PoC codes. Some of them are published if I think they’d be helpful to some extent to others.

wmnsk/ContentTypeProxy

A dead-simple HTTP Proxy that inserts Content-Type if the Content-Type field is missing or empty in the header of POST.

  • Once upon a day, I saw some of my colleagues were getting upset by a vulnerability made public earlier than expected.

  • I’m not so good at Web technologies, but even for me, this is easy to be exploited remediated, so I wrote this small program to let everyone know how easy it is to manipulate an HTTP header(compared to the complicated ones I’ve been working on!).

Contributions to OSS

I’ve contributed to a few open-source projects. Let me introduce some of them.

Project What I’ve done
Linux Kernel GTP-U Sent a patch to fix a bug in the communication with netlink.
Wireshark Fixed some bugs and updated protocol definitions of PFCP in conformance with new specifications.

to be updated…