go_sysutils/.net.UNFINISHED/README.adoc

4.4 KiB
Raw Permalink Blame History

Basic Net types for Golang

Warning
This part of sysutils is not finished. Work will resume later.

This "submodule/subpackage" (such a thing technically doesnt exist in Golang) is a collection of data taken directly from IANAs database that contains populated ports [1] and protocols[2].

You probably dont want to use anything in this parent directory (r00t2.io/sysutils/net), as its only used to generate the data from the IANAs registries.

1. Ports

You can specify your own port via several methods.

1.1. The long way

package main

import (
	`fmt`

	`r00t2.io/sysutils/.net.UNFINISHED/ports`
	`r00t2.io/sysutils/.net.UNFINISHED/protos`
)

func main() {
	var p *ports.IPPort

	p = &ports.IPPort{
		Number: 22,
		Protocol: &protos.IPProto{
			Name: "TCP",
			Number: 6,
			Reference: "[RFC793]",
			Reserved: false,
			Description: "Transmission Control",
			IP6ExtensionHeader: false,
		},
		ServiceName: "SSH",
		Description: "Secure Shell",
		Reserved:    false,
	}

	fmt.Printf(
		"Port:\n" +
		"\tNumber: %v\n" +
		"\tProto: %v\n" +
		"\tService: %v\n" +
		"\tDesc: %v\n" +
		"\tReserved?: %v\n",
		p.Number, p.Protocol.Name, p.ServiceName, p.Description, p.Reserved)
}

1.2. The Shorter Way

package main

import (
	`fmt`
	`log`

	`r00t2.io/sysutils/.net.UNFINISHED/ports`
	`r00t2.io/sysutils/.net.UNFINISHED/protos`
)

func main() {
	var proto *protos.IPProto
	var port *ports.IPPort
	var err error

	proto = &protos.IPProto{Name: "TCP"}
	port = &ports.IPPort{Number:22, Protocol: &proto}
	// Populate recurses down into Protocol as well.
	if err = port.Populate(); err != nil {
		log.Panic(err)
	}

    fmt.Printf(
    	"Port:\n" +
        "\tNumber: %v\n" +
        "\tProto: %v\n" +
        "\tService: %v\n" +
        "\tDesc: %v\n" +
        "\tReserved?: %v\n",
        port.Number, port.Proto.Name, port.ServiceName, port.Description, port.Reserved)
}

1.3. The "Gotta Go Fast" Way

package main

import (
	`fmt`
	`log`

	`r00t2.io/sysutils/.net.UNFINISHED/ports`
)

func main() {
	var err error
	var port *ports.IPPort

	// The default protocol is "TCP".
	// If a UDP service is found but no TCP for the given port number, UDP is used.
	if err = port.FetchNum(22); err != nil {
		log.Panic(err)
	}

    // If you need to specify a protocol (by name) - e.g. it isn't TCP, use FetchNumProto.
	port.FetchNumProto(22, "TCP")

	fmt.Printf("%#v\n", port)

}

2. Protocols

You can specify your own protocol via several methods.

2.1. The long way

package main

import (
	`fmt`

	`r00t2.io/sysutils/.net.UNFINISHED/protos`
)

func main() {
	var p *protos.IPProto

	p = &protos.IPProto{
			Name: "TCP",
			Number: 6,
			Reference: "[RFC793]",
			Description: "Transmission Control",
			Reserved: false,
			IP6ExtensionHeader: false,
	}

	fmt.Printf(
		"Protocol:\n" +
		"\tName: %v\n" +
		"\tNumber: %v\n" +
		"\tReference: %v\n" +
		"\tReserved?: %v\n" +
		"\tIPv6 Extension Header?: %v\n",
		p.Name, p.Number, p.Reference, p.Reserved, p.IP6ExtensionHeader)
}

2.2. The Shorter Way

package main

import (
	`fmt`
	`log`

	`r00t2.io/sysutils/.net.UNFINISHED/protos`
)

func main() {
	var proto *protos.IPProto
	var err error

	proto = &protos.IPProto{Name: "TCP"}
	if err = proto.Populate(); err != nil {
		log.Panic(err)
	}

	fmt.Printf(
		"Protocol:\n" +
		"\tName: %v\n" +
		"\tNumber: %v\n" +
		"\tReference: %v\n" +
		"\tReserved?: %v\n" +
		"\tIPv6 Extension Header?: %v\n",
		p.Name, p.Number, p.Reference, p.Reserved, p.IP6ExtensionHeader)
}

2.3. The "Gotta Go Fast" Way

package main

import (
	`fmt`
	`log`

	`r00t2.io/sysutils/.net.UNFINISHED/protos`
)

func main() {
	var err error
	var proto *protos.IPProto

	if err = proto.FetchName("TCP"); err != nil {
		log.Panic(err)
	}

	if err = port.FetchNum(6); err != nil {
		log.Panic(err)
	}

    fmt.Printf("%#v\n", proto)

}