An SNMP library written in GoLang.

Overview

gosnmp

Mentioned in Awesome Go

Build Status PkgGoDev

GoSNMP is an SNMP client library fully written in Go. It provides Get, GetNext, GetBulk, Walk, BulkWalk, Set and Traps. It supports IPv4 and IPv6, using SNMPv1, SNMPv2c or SNMPv3. Builds are tested against linux/amd64 and linux/386.

About

gosnmp was started by Andreas Louca, then completely rewritten by Sonia Hamilton (2012-2020), and now ownership has been transferred to the community at gosnmp/gosnmp.

For support and help, join us in the #snmp channel of Gophers Slack.

Overview

GoSNMP has the following SNMP functions:

  • Get (single or multiple OIDs)
  • GetNext
  • GetBulk (SNMPv2c and SNMPv3 only)
  • Walk - retrieves a subtree of values using GETNEXT.
  • BulkWalk - retrieves a subtree of values using GETBULK (SNMPv2c and SNMPv3 only).
  • Set - supports Integers and OctetStrings.
  • SendTrap - send SNMP TRAPs.
  • Listen - act as an NMS for receiving TRAPs.

GoSNMP has the following helper functions:

  • ToBigInt - treat returned values as *big.Int
  • Partition - facilitates dividing up large slices of OIDs

gosnmp/gosnmp has completely diverged from alouca/gosnmp, your code will require modification in these (and other) locations:

  • the Get function has a different method signature
  • the NewGoSNMP function has been removed, use Connect instead (see Usage below). Connect uses the GoSNMP struct; gosnmp.Default is provided for you to build on.
  • GoSNMP no longer relies on alouca/gologger - you can use your logger if it conforms to the gosnmp.Logger interface; otherwise debugging will be discarded (/dev/null).
type Logger interface {
    Print(v ...interface{})
    Printf(format string, v ...interface{})
}

Installation

go get github.com/gosnmp/gosnmp

Documentation

https://pkg.go.dev/github.com/gosnmp/gosnmp

Usage

Here is examples/example/main.go, demonstrating how to use GoSNMP:

// Default is a pointer to a GoSNMP struct that contains sensible defaults
// eg port 161, community public, etc
g.Default.Target = "192.168.1.10"
err := g.Default.Connect()
if err != nil {
    log.Fatalf("Connect() err: %v", err)
}
defer g.Default.Conn.Close()

oids := []string{"1.3.6.1.2.1.1.4.0", "1.3.6.1.2.1.1.7.0"}
result, err2 := g.Default.Get(oids) // Get() accepts up to g.MAX_OIDS
if err2 != nil {
    log.Fatalf("Get() err: %v", err2)
}

for i, variable := range result.Variables {
    fmt.Printf("%d: oid: %s ", i, variable.Name)

    // the Value of each variable returned by Get() implements
    // interface{}. You could do a type switch...
    switch variable.Type {
    case g.OctetString:
        bytes := variable.Value.([]byte)
        fmt.Printf("string: %s\n", string(bytes))
    default:
        // ... or often you're just interested in numeric values.
        // ToBigInt() will return the Value as a BigInt, for plugging
        // into your calculations.
        fmt.Printf("number: %d\n", g.ToBigInt(variable.Value))
    }
}

Running this example gives the following output (from my printer):

% go run example.go
0: oid: 1.3.6.1.2.1.1.4.0 string: Administrator
1: oid: 1.3.6.1.2.1.1.7.0 number: 104
  • examples/example2.go is similar to example.go, however it uses a custom &GoSNMP rather than g.Default
  • examples/walkexample.go demonstrates using BulkWalk
  • examples/example3.go demonstrates SNMPv3
  • examples/trapserver.go demonstrates writing an SNMP v2c trap server

MIB Parser

I don't have any plans to write a mib parser. Others have suggested https://github.com/sleepinggenius2/gosmi

Contributions

Contributions are welcome, especially ones that have packet captures (see below).

If you've never contributed to a Go project before, here is an example workflow.

  1. fork this repo on the GitHub webpage
  2. go get github.com/gosnmp/gosnmp
  3. cd $GOPATH/src/github.com/gosnmp/gosnmp
  4. git remote rename origin upstream
  5. git remote add origin [email protected]:<your-github-username>/gosnmp.git
  6. git checkout -b development
  7. git push -u origin development (setup where you push to, check it works)

Packet Captures

Create your packet captures in the following way:

Expected output, obtained via an snmp command. For example:

% snmpget -On -v2c -c public 203.50.251.17 1.3.6.1.2.1.1.7.0 \
  1.3.6.1.2.1.2.2.1.2.6 1.3.6.1.2.1.2.2.1.5.3
.1.3.6.1.2.1.1.7.0 = INTEGER: 78
.1.3.6.1.2.1.2.2.1.2.6 = STRING: GigabitEthernet0
.1.3.6.1.2.1.2.2.1.5.3 = Gauge32: 4294967295

A packet capture, obtained while running the snmpget. For example:

sudo tcpdump -s 0 -i eth0 -w foo.pcap host 203.50.251.17 and port 161

Bugs

Rane's document SNMP: Simple? Network Management Protocol was useful when learning the SNMP protocol.

Please create an issue on Github with packet captures (upload capture to Google Drive, Dropbox, or similar) containing samples of missing BER types, or of any other bugs you find. If possible, please include 2 or 3 examples of the missing/faulty BER type.

The following BER types have been implemented:

  • 0x00 UnknownType
  • 0x01 Boolean
  • 0x02 Integer
  • 0x03 BitString
  • 0x04 OctetString
  • 0x05 Null
  • 0x06 ObjectIdentifier
  • 0x07 ObjectDescription
  • 0x40 IPAddress (IPv4 & IPv6)
  • 0x41 Counter32
  • 0x42 Gauge32
  • 0x43 TimeTicks
  • 0x44 Opaque (Float & Double)
  • 0x45 NsapAddress
  • 0x46 Counter64
  • 0x47 Uinteger32
  • 0x78 OpaqueFloat
  • 0x79 OpaqueDouble
  • 0x80 NoSuchObject
  • 0x81 NoSuchInstance
  • 0x82 EndOfMibView

Running the Tests

Local testing in Docker

docker build -t gosnmp/gosnmp:latest .
docker run -it gosnmp/gosnmp:latest

or

export GOSNMP_TARGET=1.2.3.4
export GOSNMP_PORT=161
export GOSNMP_TARGET_IPV4=1.2.3.4
export GOSNMP_PORT_IPV4=161
export GOSNMP_TARGET_IPV6='0:0:0:0:0:ffff:102:304'
export GOSNMP_PORT_IPV6=161
go test -v -tags all        # for example
go test -v -tags helper     # for example

Tests are grouped as follows:

  • Unit tests (validating data packing and marshalling):
    • marshal_test.go
    • misc_test.go
  • Public API consistency tests:
    • gosnmp_api_test.go
  • End-to-end integration tests:
    • generic_e2e_test.go

The generic end-to-end integration test generic_e2e_test.go should work against any SNMP MIB-2 compliant host (e.g. a router, NAS box, printer).

Mocks were generated using:

mockgen -source=interface.go -destination=mocks/gosnmp_mock.go -package=mocks

However they're currently removed, as they were breaking linting.

To profile cpu usage:

go test -cpuprofile cpu.out
go test -c
go tool pprof gosnmp.test cpu.out

To profile memory usage:

go test -memprofile mem.out
go test -c
go tool pprof gosnmp.test mem.out

To check test coverage:

go get github.com/axw/gocov/gocov
go get github.com/matm/gocov-html
gocov test github.com/gosnmp/gosnmp | gocov-html > gosnmp.html && firefox gosnmp.html &

License

Parts of the code are taken from the Golang project (specifically some functions for unmarshaling BER responses), which are under the same terms and conditions as the Go language. The rest of the code is under a BSD license.

See the LICENSE file for more details.

The remaining code is Copyright 2012 the GoSNMP Authors - see AUTHORS.md for a list of authors.

Comments
  • Udp listen

    Udp listen

    Good day.

    Help to understand the best way to solve this problem:

    00:00:20.414081 IP 10.12.2.2.23568 > 10.15.44.1.161:  C=totgfh0xre GetNextRequest(30)  .1.3.6.1.2.1.31.1.1.1.1
    00:00:20.442642 IP 8.9.1.1.161 > 10.12.2.2.23568:  C=totgfh0xre GetResponse(35)  .1.3.6.1.2.1.31.1.1.1.1.1="fxp0"
    

    Some equipment is responsible at a different address (it can not be configure). Such as Juniper. Accordingly, I get "Last error was: Error reading from UDP: read udp 10.15.44.1:161: i/o timeout"

    opened by abaluta 48
  • Add INFORM responses

    Add INFORM responses

    Not yet ready for merge, but just to get this on the radar: this adds preliminary support for handling INFORM requests and sending responses.

    TODO:

    • [x] Add basic INFORM handling and responding
    • [x] Test with net-snmp snmpinform -Ci
    • [x] Examine compliance with protocol spec
    • [x] Update unit tests
    opened by superdave 38
  • Improved perfomance

    Improved perfomance

    The marshalOID () and oidToString () functions use the string functions Trim, Split, Join, which work internally with an array of strings. Also, to convert the oid string to an array of numbers and in the opposite direction, an additional array is created inside both marshalOID () and oidToString (), which causes at least twice the load on the GC. In my case, with parallel polling of 100k + devices, this change in these functions improved performance and CPU load by 10% -15%. The average CPU load dropped from 80% to 65% after. In addition, the total polling time has noticeably decreased.

    The second patch (reverted due to broken ci check) concerns the logging function logger.Printf(). Even with logging disabled, the Printf() system call is still called, which, according to pprof, also consumes a significant portion of the CPU time. I don't know what to do in this case, so I just commented them out in problem areas. Logically, the logPrintf () function should be called here, but in these cases it is not available for call.

    enhancement 
    opened by it1804 32
  • Few bug fixes and walk support

    Few bug fixes and walk support

    Hi Sonia,

    I've been reviewing a few Go SNMP implementations and running them through a few real world cases. I really like the changes you've done on your fork. Are you willing to accept some full requests?

    Assuming you're are, please review this pull request and let me know what changes you'd like before merging.

    I also noted that @virtuallynathan is also doing some good work on your branch. Hopefully we can all coordinate to make SNMP great in Go!

    Changes:

    Changes to minimise impact of unimplemented types

    • If GetMultiple or GetBulk returns a MIB with an Unimplemented type (e.g. Opaque) the whole call would return an error. It's more desirable to return an UnknownType so it's at least possible to read other values. The UnknownType's byte number has been set to 0x00. Java SNMP takes the same approach.
    • Minor bugfix - The RequestID was not being correctly parsed.
    • Added FIXME to the RequestID. This should be set to an atomic counter and the read should discard (and retry) if the sent ID does not match the received ID. In the current implementation it would be possible for a late arriving packet form a pervious (failed) request to be incorrectly associated with the call. This will be fixed in a future commit.

    Added SNMP walk (via both GETBULK and GETNEXT) The original 'alouca' version has a limited walk implementation. This version's logic is more robust and is able to successfully walk large trees across a range of different devices/agents. Flow is based off existing walk implementations found in net-snmp and Java snmp.

    TODO: To make this just as reliable as other implementations, we'll need to add retry support at the send() layer, and ensure packet request IDs are matched. I'll open this as an issue.

    Cheers from Melbourne,

    Chris

    opened by codedance 21
  • Implement RFC7860 HMAC-SHA-2 hash functions

    Implement RFC7860 HMAC-SHA-2 hash functions

    Newer hash functions were standardised for SNMPv3 USM in RFC7860, theye are implemented at newer network equipment and it would be great to support them.

    enhancement 
    opened by benschweizer 20
  • Multithreading issue?

    Multithreading issue?

    I am using the library with 15 simultaneous threads. Sometimes I get false values which mixup my rrd graphics. Any Idea how to solve this?

    device someswitch fetched: 70 .1.3.6.1.2.1.31.1.1.1.10.10111 25027549639180
    device someswitch fetched: 70 .1.3.6.1.2.1.31.1.1.1.10.10111 25027572865391
    device someswitch fetched: 70 .1.3.6.1.2.1.31.1.1.1.10.10111 90438050323
    device someswitch fetched: 70 .1.3.6.1.2.1.31.1.1.1.10.10111 25027622435917
    device someswitch fetched: 70 .1.3.6.1.2.1.31.1.1.1.10.10111 25027639781760
    

    Tcpdump -v looks like

    someswitch.161 > monitorserver.55751:  { SNMPv2c C=bla { GetResponse(38) R=-1251415802  .1.3.6.1.2.1.31.1.1.1.10.10111=25027549639180.000000 } }
    someswitch.161 > monitorserver.51930:  { SNMPv2c C=bla { GetResponse(38) R=1668428858  .1.3.6.1.2.1.31.1.1.1.10.10111=25027570860335.000000 } }
    someswitch.161 > monitorserver.51578:  { SNMPv2c C=bla { GetResponse(38) R=-1144811484  .1.3.6.1.2.1.31.1.1.1.10.10111=25027572865391.000000 } }
    someswitch.161 > monitorserver.60215:  { SNMPv2c C=bla { GetResponse(38) R=-1081929899  .1.3.6.1.2.1.31.1.1.1.10.10111=25027593968410.000000 } }
    someswitch.161 > monitorserver.51400:  { SNMPv2c C=bla { GetResponse(38) R=-524292265  .1.3.6.1.2.1.31.1.1.1.10.10111=25027615759785.000000 } }
    someswitch.161 > monitorserver.56794:  { SNMPv2c C=bla { GetResponse(38) R=-1679001924  .1.3.6.1.2.1.31.1.1.1.10.10111=25027622435917.000000 } }
    someswitch.161 > monitorserver.51984:  { SNMPv2c C=bla { GetResponse(38) R=-1214439598  .1.3.6.1.2.1.31.1.1.1.10.10111=25027639781760.000000 } }
    
    opened by network4all 20
  • Build fails on 32 bit arch with constant overflows int error

    Build fails on 32 bit arch with constant overflows int error

    When I try to build on a 32 bit architecture such as linux/386 or windows/386 I get an error:

    $ GOARCH=386 go test -v -tags marshal
    # github.com/soniah/gosnmp
    ./helper.go:365:31: constant 4294967295 overflows int
    ./helper.go:366:26: constant 4278190080 overflows int
    FAIL    github.com/soniah/gosnmp [build failed]
    

    I assume it was introduced in #134

    bug 
    opened by danielnelson 15
  • Fix runtime integer divide by zero error.

    Fix runtime integer divide by zero error.

    This fixes runtime error: integer divide by zero, found in https://github.com/prometheus/snmp_exporter/issues/185 when private password is empty string.

    More detailed debug details can be found in my comment at https://github.com/prometheus/snmp_exporter/issues/185#issuecomment-328992935

    opened by arthepsy 15
  • Moved maxOids const to MaxOids variable in Default

    Moved maxOids const to MaxOids variable in Default

    This is a small change, moving the constant 'maxOids' to an int 'MaxOids' in the GoSNMP struct. This is necessary to allow users to accommodate for devices with fewer resources, by limiting the number of OIDs they request without having to maintain their own copy of the library.

    This is in relation to issue #72

    opened by rossdotpink 15
  • snmp request

    snmp request "IO WAIT" issues observed after pr #277

    AFTER COMMIT https://github.com/gosnmp/gosnmp/pull/277

    very bad commit this one did not work at all After commit 70% snmp reuest "IO WAIT" SNMP V2 udp on port 161 not work after this commit 70-90% snmp get ERROR "IO WAIT"

    opened by vorlon001 14
  • Add support for SNMP v1 traps

    Add support for SNMP v1 traps

    According to: http://www.tcpipguide.com/free/t_SNMPVersion1SNMPv1MessageFormat-3.htm the SNMP v1 Trap PDU is quite different from standard PDUs, so it has to be created in a bit different way.

    I tried to avoid unnecessary changes, and this is the end result of adding support for sending SNMP v1 Traps.

    opened by patrox 14
  • multiple device concurrent polling fails unless you create your own snmp object

    multiple device concurrent polling fails unless you create your own snmp object

    I know just enough go to create unreliable web applications. The default example code uses the "Default" object. This works fine unless you have any kind of concurrent snmp polling. All of the concurrent processes will be trying to use the same gosnmp object. The answer is to create your own gosnmp object.

          var my_snmp gosnmp.GoSNMP
           my_snmp.Port = 161
           my_snmp.Transport = "udp"
           my_snmp.Version = gosnmp.Version2c
           my_snmp.MaxOids = 50
    
           my_snmp.Target = snmp_ip
           my_snmp.Community = snmp_community
           my_snmp.Timeout = time.Duration(3) * time.Second
           my_snmp.Retries = 2
           my_snmp.ExponentialTimeout = false
           my_snmp.UseUnconnectedUDPSocket = false
           my_snmp.LocalAddr = "0.0.0.0:" + fmt.Sprint( Port_Number )
    
    	// gosnmp.Default.Target = snmp_ip
           // gosnmp.Default.Community = snmp_community
           // gosnmp.Default.Timeout = time.Duration(3) * time.Second
           // gosnmp.Default.Retries = 2
           // gosnmp.Default.ExponentialTimeout = false
           // gosnmp.Default.UseUnconnectedUDPSocket = true
           // gosnmp.Default.LocalAddr = "0.0.0.0:" + fmt.Sprint( Port_Number )
    
           log.Printf( "DEBUG ip %s req %s port %d", snmp_ip, snmp_type, Port_Number )
    
           //err := gosnmp.Default.Connect()
           err := (&my_snmp).Connect()
    
    

    and to get data

                    get_oids := []string{"1.3.6.1.2.1.1.4.0", "1.3.6.1.2.1.1.7.0"}
                    //result, err2 := gosnmp.Default.Get( get_oids )
                    result, err2 := (&my_snmp).Get( get_oids )
                    if err2 != nil {
                            log.Printf("Get() ip %s req %s port %d err: %v", snmp_ip, snmp_type, Port_Number, err2 )
    
    
    opened by xzr491oo71 0
  • Query on gosnmp feature as snmp agent

    Query on gosnmp feature as snmp agent

    So far, we have explored gosnmp Get GetBuld etc. apis to query an snmp agent. i.e as client to an snmp agent, working like an snmp manager.

    Does gosnmp also support or provide apis to work as an snmp agent ? I.e to run snmp agent via gosnmp golang library/apis and respond to Get or GetBuldk etc. snmp api calls ?

    opened by kaushiksrinivas 2
  • The Get method is unable to collect data, if we provide multiple OIDs, which includes an invalid OID.

    The Get method is unable to collect data, if we provide multiple OIDs, which includes an invalid OID.

    Recently we started using gosnmp, but during negative testing, we found that the 'Get' method call does not provide data, for valid OIDs, which includes one invalid OID.

    We tested the same scenario with 'snmpget.exe' from net-snmp and it works properly with valid and invalid OIDs.

    The attached file contains the sample go code. main.txt

    opened by KedarB 0
  • refactor scripts and trap.md

    refactor scripts and trap.md

    Make project structure cleaner:

    Merge trap.md with README.md (also lint and fix markdown files)

    Move various helper scripts to a separate scripts folder.

    opened by cemremengu 0
Releases(v1.35.0)
  • v1.35.0(May 23, 2022)

    This release now requires Go 1.17 or higher.
    
    NOTE: The UnmarshalTrap now returns both an SnmpPacket and an error (#394)
    
    * [BUGFIX] gosnmp.Set(): permit ObjectIdentifier PDU Type #378
    * [BUGFIX] SendTrap: do not set Reportable MsgFlags for v3 #398
    * [CHANGE] Support authoritative engineID discovery when listening for traps #394
    * [CHANGE] Require Go 1.17+
    * [ENHANCEMENT] marshalUint32: Values above 2^31-1 encodes in 5 bytes #377
    * [ENHANCEMENT] Add Control function to GoSNMP dialer parameters #397
    
    Source code(tar.gz)
    Source code(zip)
  • v1.34.0(Nov 17, 2021)

    NOTE: marshalInt32 now always encodes an integer value in the smallest possible number of octets as per ITU-T Rec. X.690 (07/2002).

    • [ENHANCEMENT] gosnmp/marshalInt32: adhere to ITU-T Rec. X.690 integer encoding #372
    • [ENHANCEMENT] parseInt64: throw error on zero length as per X690 #373
    • [ENHANCEMENT] helper.go: Interpreting the value of an Opaque type as binary data if the Opaque sub-type cannot be recognized #374
    • [ENHANCEMENT] helper.go: Implemented Opaque type marshaling #374
    • [BUGFIX] marshal.go: Fixed invalid OpaqueFloat and OpaqueDouble marshaling in marshalVarbind() function #374
    • [BUGFIX] marshal.go: stricter cursor bounds checking in unmarshalPayload #384
    Source code(tar.gz)
    Source code(zip)
  • v1.33.0(Oct 19, 2021)

    • [BUGFIX] parseLength: avoid OOB read, prevent panic #354
    • [BUGFIX] Detect negative lengths in parseLength, prevent panic #369
    • [FEATURE] Add LocalAddr setting to bind source address of SNMP queries #342
    • [ENHANCEMENT] Validate SNMPv3 Auth/Priv Protocol for incoming trap message #351
    • [ENHANCEMENT] helper.go: add error handling to parseLength #358
    • [ENHANCEMENT] Rename v3_testing_credentials to avoid testing import in prod builds #360
    • [ENHANCEMENT] helper.go: Improved decodeValue() function #340
    Source code(tar.gz)
    Source code(zip)
  • v1.32.0(May 13, 2021)

    NOTE: This release changes the Logger interface. The loggingEnabled variable has been deprecated.

    • [BUGFIX] marshal.go: improve packet validation and error handling #323
    • [BUGFIX] marshal.go: Fix on-error-continue flow in sendOneRequest #324
    • [BUGFIX] Fix SNMPv3 trap authentication #332
    • [CHANGE] New Logger interface has been implemented #329
    • [ENHANCEMENT] helper.go: Improved OID marshaling with sub-identifier validation as per rfc2578 section-3.5 #321
    • [ENHANCEMENT] Add rfc3412 report errors #333
    Source code(tar.gz)
    Source code(zip)
  • v1.31.0(Apr 5, 2021)

    • [BUGFIX] Add validation to prevent calling updatePktSecurityParameters with non v3 packet #251 #314
    • [ENHANCEMENT] walk.go: improve BulkWalk error handling #306
    • [ENHANCEMENT] return received SNMP error code immediately instead of waiting for timeout #319
    Source code(tar.gz)
    Source code(zip)
  • v1.30.0(Feb 20, 2021)

    NOTE: This release changes the MaxRepetitions type to uint32.

    • [BUGFIX] Add bounds checking for reqID and msgID #273
    • [FEATURE] New packet inspection hook methods for in-flight measurements #276
    • [ENHANCEMENT] Support for local e2e tests against net-snmpd #292
    • [CHANGE] Fix GetBulkRequest MaxRepetitions signedness issue in marshalPDU() #293
    • [CHANGE] mocks/gosnmp_mock.go: Update UnmarshalTrap mock base method #294
    • [BUGFIX] marshal.go: Fix signedness issue in marshalPDU() #295
    • [ENHANCEMENT] marshalPDU(): stricter integer conversion #301
    • [ENHANCEMENT] Use Go 1.13 error wrapping #304
    • [ENHANCEMENT] walk.go: improve BulkWalk error handling #306
    • [ENHANCEMENT] MaxRepetitions now allows values between 0..2147483647 and wraps to 0 at max int32.
    Source code(tar.gz)
    Source code(zip)
  • v1.29.0(Dec 7, 2020)

  • v1.28.0(Oct 15, 2020)

    This release updates the Go import path from github.com/soniah/gosnmp to github.com/gosnmp/gosnmp.

    • [CHANGE] Update project path #257
    • [ENHANCEMENT] Improve SNMPv3 trap support #253
    Source code(tar.gz)
    Source code(zip)
Owner
Go SNMP
Go SNMP
GoSNMP is an SNMP client library fully written in Go.

GoSNMP is an SNMP client library fully written in Go. It provides Get, GetNext, GetBulk, Walk, BulkWalk, Set and Traps. It supports IPv4 and IPv6, using SNMPv1, SNMPv2c or SNMPv3. Builds are tested against linux/amd64 and linux/386.

uctest 1 Oct 28, 2021
Tool for monitoring network devices (mainly using SNMP) - monitoring check plugin

Thola Description A tool for monitoring network devices written in Go. It features a check mode which complies with the monitoring plugins development

inexio 262 Nov 10, 2022
Demo of EdgeX Foundry Ireland (or Jakarta) release with real Modbus, SNMP and GPIO pin devices

Ireland Demo This demo shows the Ireland (or Jakarta - it works for both) release of EdgeX with the following devices: Comet Systems T0310 temperature

Jim White 0 Nov 6, 2021
A simple TUN/TAP library written in native Go.

water water is a native Go library for TUN/TAP interfaces. water is designed to be simple and efficient. It wraps almost only syscalls and uses only G

Song Gao 1.6k Nov 21, 2022
Minecraft Server List Ping library written in Go

minequery Minecraft Server List Ping library written in Go. Features Modern Mine

Altea 14 Nov 23, 2022
A Minecraft scanner written in Golang (first Golang project)

__ __/ \__ Gothyc A Minecraft port scanner written in Go. ?? / \__/ \__ \__/ \__/ \ Version 0.3.0 \__/ \__/ Author @toas

toast 11 Nov 6, 2022
A library for the MIGP (Might I Get Pwned) protocolA library for the MIGP (Might I Get Pwned) protocol

MIGP library This contains a library for the MIGP (Might I Get Pwned) protocol. MIGP can be used to build privacy-preserving compromised credential ch

Cloudflare 23 Dec 3, 2022
The hotwire demo chat written in Golang

Hotwire Go Example This is a recreation of the Hotwire Rails Demo Chat with a Go backend. See the Hotwire docs for more information about Hotwire. Qui

John Turner 87 Nov 10, 2022
High-performance PHP application server, load-balancer and process manager written in Golang

RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports running as a serv

Spiral Scout 6.9k Nov 29, 2022
An URL shortener service written in Golang

ggz An URL shortener service written in Golang. Features Support MySQL, Postgres or SQLite Database. Support RESTful or GraphQL API. Support Auth0 or

null 182 Nov 18, 2022
Squzy - is a high-performance open-source monitoring, incident and alert system written in Golang with Bazel and love.

Squzy - opensource monitoring, incident and alerting system About Squzy - is a high-performance open-source monitoring and alerting system written in

Squzy 470 Nov 22, 2022
Centralized Configuration System written in Golang - Spring cloud compatible

Centralized Configuration System What is Vecosy Vecosy is a configuration service exposed through REST/GRPC. Is Spring Cloud Conf compatible and also

null 17 Sep 15, 2022
EasyTCP is a light-weight and less painful TCP server framework written in Go (Golang) based on the standard net package.

EasyTCP is a light-weight TCP framework written in Go (Golang), built with message router. EasyTCP helps you build a TCP server easily fast and less painful.

zxl 537 Dec 2, 2022
The Jenkins client was written by Golang

jenkins-client Document How to get it go.mod require github.com/jenkins-zh/jenkins-client Configuration Examples of jcli configuration - name: dev

Jenkins Chinese Community 18 Oct 31, 2022
Bell is the simplest event system written in Go (Golang) which is based on the execution of handlers independent of the main channel.

Bell Bell is the simplest event system written in Go (Golang) which is based on the execution of handlers independent of the main channel. Written in

NUT.Tech 29 Nov 17, 2022
A socks5 server(tcp/udp) written in golang.

socks5-server A socks5 server(tcp/udp) written in golang. Usage Usage of /main: -l string local address (default "127.0.0.1:1080") -p stri

null 32 Nov 20, 2022
Minimalistic paste daemon written in golang

Minimalistic paste daemon written in golang

Christoph Hoopmann 1 Dec 4, 2022
HttpRunner+ is the next generation of HttpRunner, written in golang

hrp (HttpRunner+) hrp is a golang implementation of HttpRunner. Ideally, hrp will be fully compatible with HttpRunner, including testcase format and u

HttpRunner 80 Sep 28, 2022