Skip to content

aungmawjj/icmpnet

Repository files navigation

Messaging over ICMP

GoDoc

Implementation of client/server bidirectional messaging over ICMP protocol.

Messaging over ICMP is useful - when your network (wifi) gives you an IP address, but won't let you send TCP or UDP packets out to the rest of the internet, but allow you to ping any computer on the internet.

Features:

  • AES encryption is used.
  • Implements standard net.Listener and net.Conn interface to be able to extend for high level protocols such as http, rpc.

Implemented Use-case applications:

  • Message broker and client (each message is a single line)
  • File transfer (used rpc to upload/download file and respond status)

Build

./build.sh

Run

Message Broker Application

Broker

# stop auto reply ping messages for linux
echo 1 | sudo dd of=/proc/sys/net/ipv4/icmp_echo_ignore_all
sudo ./bin/msgbroker -pw <password>

Client

sudo ./bin/msgclient

File Transfer Application

Server

# stop auto reply ping messages for linux
echo 1 | sudo dd of=/proc/sys/net/ipv4/icmp_echo_ignore_all
sudo ./bin/fileserver -pw <password> -dir <file_directory>

Client

sudo ./bin/fileclient

Using the API

Reference

Listen connections at server

listener, err := icmpnet.Listen(aesKey)

Connect to server

addr, _ := net.ResolveIPAddr("ip4", "server_IP")
conn, err := icmpnet.Connect(serverAddr, aesKey)

Please check sample applications in cmd folder.

License

This repository is under MIT License, as found in LICENSE file.