Fast RFC 5389 STUN implementation in go

Overview

CI GoDev Coverage Status

STUN

Package stun implements Session Traversal Utilities for NAT (STUN) [RFC5389] protocol and client with no external dependencies and zero allocations in hot paths. Client supports automatic request retransmissions. Complies to gortc principles as core package.

See example and stun server for simple usage. Also see gortc/turn for TURN [RFC5766] implementation and gortcd for TURN and STUN server. This repo was merged to pion/stun at version v1.19.0.

Example

You can get your current IP address from any STUN server by sending binding request. See more idiomatic example at cmd/stun-client.

package main

import (
	"fmt"

	"gortc.io/stun"
)

func main() {
	// Creating a "connection" to STUN server.
	c, err := stun.Dial("udp", "stun.l.google.com:19302")
	if err != nil {
		panic(err)
	}
	// Building binding request with random transaction id.
	message := stun.MustBuild(stun.TransactionID, stun.BindingRequest)
	// Sending request to STUN server, waiting for response message.
	if err := c.Do(message, func(res stun.Event) {
		if res.Error != nil {
			panic(res.Error)
		}
		// Decoding XOR-MAPPED-ADDRESS attribute from message.
		var xorAddr stun.XORMappedAddress
		if err := xorAddr.GetFrom(res.Message); err != nil {
			panic(err)
		}
		fmt.Println("your IP is", xorAddr.IP)
	}); err != nil {
		panic(err)
	}
}

Supported RFCs

Stability stability-mature GitHub tag

Package is currently stable, no backward incompatible changes are expected with exception of critical bugs or security fixes.

Additional attributes are unlikely to be implemented in scope of stun package, the only exception is constants for attribute or message types.

RFC 3489 notes

RFC 5389 obsoletes RFC 3489, so implementation was ignored by purpose, however, RFC 3489 can be easily implemented as separate package.

Requirements

Go 1.14 is currently supported and tested in CI. Should work on 1.13.

Testing

Client behavior is tested and verified in many ways:

  • End-To-End with long-term credentials
    • coturn: The coturn server (linux)
  • Bunch of code static checkers (linters)
  • Standard unit-tests with coverage reporting (linux {amd64, arm64}, windows and darwin)
  • Explicit API backward compatibility check, see api directory

See TeamCity project and e2e directory for more information. Also the Wireshark .pcap files are available for e2e test in artifacts for build.

Benchmarks

Intel(R) Core(TM) i7-8700K:

version: 1.22.2
goos: linux
goarch: amd64
pkg: github.com/gortc/stun
PASS
benchmark                                         iter       time/iter      throughput   bytes alloc        allocs
---------                                         ----       ---------      ----------   -----------        ------
BenchmarkMappedAddress_AddTo-12               32489450     38.30 ns/op                        0 B/op   0 allocs/op
BenchmarkAlternateServer_AddTo-12             31230991     39.00 ns/op                        0 B/op   0 allocs/op
BenchmarkAgent_GC-12                            431390   2918.00 ns/op                        0 B/op   0 allocs/op
BenchmarkAgent_Process-12                     35901940     36.20 ns/op                        0 B/op   0 allocs/op
BenchmarkMessage_GetNotFound-12              242004358      5.19 ns/op                        0 B/op   0 allocs/op
BenchmarkMessage_Get-12                      230520343      5.21 ns/op                        0 B/op   0 allocs/op
BenchmarkClient_Do-12                          1282231    943.00 ns/op                        0 B/op   0 allocs/op
BenchmarkErrorCode_AddTo-12                   16318916     75.50 ns/op                        0 B/op   0 allocs/op
BenchmarkErrorCodeAttribute_AddTo-12          21584140     54.80 ns/op                        0 B/op   0 allocs/op
BenchmarkErrorCodeAttribute_GetFrom-12       100000000     11.10 ns/op                        0 B/op   0 allocs/op
BenchmarkFingerprint_AddTo-12                 19368768     64.00 ns/op     687.81 MB/s        0 B/op   0 allocs/op
BenchmarkFingerprint_Check-12                 24167007     49.10 ns/op    1057.99 MB/s        0 B/op   0 allocs/op
BenchmarkBuildOverhead/Build-12                5486252    224.00 ns/op                        0 B/op   0 allocs/op
BenchmarkBuildOverhead/BuildNonPointer-12      2496544    517.00 ns/op                      100 B/op   4 allocs/op
BenchmarkBuildOverhead/Raw-12                  6652118    181.00 ns/op                        0 B/op   0 allocs/op
BenchmarkMessage_ForEach-12                   28254212     35.90 ns/op                        0 B/op   0 allocs/op
BenchmarkMessageIntegrity_AddTo-12             1000000   1179.00 ns/op      16.96 MB/s        0 B/op   0 allocs/op
BenchmarkMessageIntegrity_Check-12              975954   1219.00 ns/op      26.24 MB/s        0 B/op   0 allocs/op
BenchmarkMessage_Write-12                     41040598     30.40 ns/op     922.13 MB/s        0 B/op   0 allocs/op
BenchmarkMessageType_Value-12               1000000000      0.53 ns/op                        0 B/op   0 allocs/op
BenchmarkMessage_WriteTo-12                   94942935     11.30 ns/op                        0 B/op   0 allocs/op
BenchmarkMessage_ReadFrom-12                  43437718     29.30 ns/op     682.87 MB/s        0 B/op   0 allocs/op
BenchmarkMessage_ReadBytes-12                 74693397     15.90 ns/op    1257.42 MB/s        0 B/op   0 allocs/op
BenchmarkIsMessage-12                       1000000000      1.20 ns/op   16653.64 MB/s        0 B/op   0 allocs/op
BenchmarkMessage_NewTransactionID-12            521121   2450.00 ns/op                        0 B/op   0 allocs/op
BenchmarkMessageFull-12                        5389495    221.00 ns/op                        0 B/op   0 allocs/op
BenchmarkMessageFullHardcore-12               12715876     94.40 ns/op                        0 B/op   0 allocs/op
BenchmarkMessage_WriteHeader-12              100000000     11.60 ns/op                        0 B/op   0 allocs/op
BenchmarkMessage_CloneTo-12                   30199020     41.80 ns/op    1626.66 MB/s        0 B/op   0 allocs/op
BenchmarkMessage_AddTo-12                    415257625      2.97 ns/op                        0 B/op   0 allocs/op
BenchmarkDecode-12                            49573747     23.60 ns/op                        0 B/op   0 allocs/op
BenchmarkUsername_AddTo-12                    56282674     22.50 ns/op                        0 B/op   0 allocs/op
BenchmarkUsername_GetFrom-12                 100000000     10.10 ns/op                        0 B/op   0 allocs/op
BenchmarkNonce_AddTo-12                       39419097     35.80 ns/op                        0 B/op   0 allocs/op
BenchmarkNonce_AddTo_BadLength-12            196291666      6.04 ns/op                        0 B/op   0 allocs/op
BenchmarkNonce_GetFrom-12                    120857732      9.93 ns/op                        0 B/op   0 allocs/op
BenchmarkUnknownAttributes/AddTo-12           28881430     37.20 ns/op                        0 B/op   0 allocs/op
BenchmarkUnknownAttributes/GetFrom-12         64907534     19.80 ns/op                        0 B/op   0 allocs/op
BenchmarkXOR-12                               32868506     32.20 ns/op   31836.66 MB/s
BenchmarkXORSafe-12                            5185776    234.00 ns/op    4378.74 MB/s
BenchmarkXORFast-12                           30975679     32.50 ns/op   31525.28 MB/s
BenchmarkXORMappedAddress_AddTo-12            21518028     54.50 ns/op                        0 B/op   0 allocs/op
BenchmarkXORMappedAddress_GetFrom-12          35597667     34.40 ns/op                        0 B/op   0 allocs/op
ok      gortc.io/stun   60.973s

License

BSD 3-Clause License

Comments
  • return both ipv4 and ipv6 address

    return both ipv4 and ipv6 address

    When I try stun-client example, it can successfully output my ipv6 address, and seems like bind was also successful. Can you please show me how I can get my ipv4 address as well? I tried client.Start method, handler can only receive one ipv6 event. I don't see any other related options. I'm using default google stun server address.

    opened by leslie-wang 4
  • can not get LocalAddr in stun package

    can not get LocalAddr in stun package

    // Client simulates "connection" to STUN server.
    type Client struct {
    	rto         int64 // time.Duration
    	a           ClientAgent
    	c           Connection
    	close       chan struct{}
    	rtoRate     time.Duration
    	maxAttempts int32
    	closed      bool
    	closeConn   bool // should call c.Close() while closing
    	wg          sync.WaitGroup
    	clock       Clock
    	handler     Handler
    	collector   Collector
    	t           map[transactionID]*clientTransaction
    	// mux guards closed and t
    	mux sync.RWMutex
    }
    

    there the “c” is a small letter and find not a func to get “conn“

    opened by lluck42 3
  • UDP Question + Proxy Protocol

    UDP Question + Proxy Protocol

    I hope this question isn't too out of scope, but I didn't see a slack channel etc.

    Is it possible to use the proxy protocol in conjunction with udp connections when sending connections through nginx to a stun server? Is tcp an option? Or does proxy protocol support need to be added somehow?

    opened by 4ydx 3
  • client: implement basic hole punching

    client: implement basic hole punching

    Provide a way to use discovered external address to receive actual udp packets from another agent.

    MVP: client1 discover 1> ip:port

    client2 ip:port

    ok

    1> ok from ip:port2

    opened by ernado 3
  • What's the relationship with pion/stun

    What's the relationship with pion/stun

    hi @ernado , I find the source code of pion/stun is so similar to gortc/stun. Can you tell me what's the relationship between them? is it to mean that you will give up maintaining this project and focus on pion/stun.

    opened by songjiayang 2
  • how set username and credential

    how set username and credential

    how test,in client

    {'urls':'stun:webrtcweb.com:4455?transport=udp','credential':'muazkh','username':'muazkh'},
    {'urls':'stun:webrtcweb.com:8877?transport=udp','credential':'muazkh','username':'muazkh'},
    
    

    #29

    opened by hktalent 2
  • Add license scan report and status

    Add license scan report and status

    Your FOSSA integration was successful! Attached in this PR is a badge and license report to track scan status in your README.

    Below are docs for integrating FOSSA license checks into your CI:

    opened by fossabot 2
  • build(deps): bump golangci/golangci-lint-action from v2.3.0 to v2.5.2

    build(deps): bump golangci/golangci-lint-action from v2.3.0 to v2.5.2

    Bumps golangci/golangci-lint-action from v2.3.0 to v2.5.2.

    Release notes

    Sourced from golangci/golangci-lint-action's releases.

    Bump version v2.5.2

    Bug fixes

    • 5c56cd6 Extract and don't mangle User Args. (#200)

    Dependencies

    • e3c53fe bump @​typescript-eslint/eslint-plugin (#194)
    • 3b9f80e bump @​typescript-eslint/parser from 4.18.0 to 4.19.0 (#195)
    • 9845713 bump @​types/node from 14.14.35 to 14.14.37 (#197)
    • e789ee1 bump eslint from 7.22.0 to 7.23.0 (#196)
    • f2e9a96 bump @​typescript-eslint/eslint-plugin (#188)
    • 818081a bump @​types/node from 14.14.34 to 14.14.35 (#189)
    • 6671836 bump @​typescript-eslint/parser from 4.17.0 to 4.18.0 (#190)
    • 526907e bump @​typescript-eslint/parser from 4.16.1 to 4.17.0 (#185)
    • 6b6ba16 bump @​typescript-eslint/eslint-plugin (#186)
    • 9cab4ef bump eslint from 7.21.0 to 7.22.0 (#187)
    • 0c76572 bump @​types/node from 14.14.32 to 14.14.34 (#184)
    • 0dfde21 bump @​typescript-eslint/parser from 4.15.2 to 4.16.1 (#182)
    • 9dcf389 bump typescript from 4.2.2 to 4.2.3 (#181)
    • 34d3904 bump @​types/node from 14.14.31 to 14.14.32 (#180)
    • e30b22f bump @​typescript-eslint/eslint-plugin (#179)
    • 8f30d25 bump eslint from 7.20.0 to 7.21.0 (#177)
    • 0b64a40 bump @​typescript-eslint/parser from 4.15.1 to 4.15.2 (#176)
    • 973b3a3 bump eslint-config-prettier from 8.0.0 to 8.1.0 (#178)
    • 6ea3de1 bump @​typescript-eslint/eslint-plugin (#175)
    • 6eec6af bump typescript from 4.1.5 to 4.2.2 (#174)

    v2.5.1

    Bug fixes:

    • d9f0e73 Check that go.mod exists in reading the version (#173)

    v2.5.0

    New Features:

    • 51485a4 Try to get version from go.mod file (#118)

    v2.4.1

    Fixed bugs:

    • a12ae43 Add --overwrite flag to tar extraction (#156)

    Updated dependencies:

    • f1dee55 build(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.0.0 (#168)
    • 8456024 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#171)
    • 3e54e51 build(deps-dev): bump @​types/node from 14.14.28 to 14.14.31 (#170)
    • 2f717c4 build(deps-dev): bump @​typescript-eslint/parser from 4.15.0 to 4.15.1 (#169)
    • 4a6ab12 build(deps-dev): bump @​types/node from 14.14.25 to 14.14.28 (#164)
    • f9b6927 build(deps-dev): bump eslint from 6.8.0 to 7.20.0 (#163)
    • 41858b8 build(deps-dev): bump typescript from 4.1.3 to 4.1.5 (#162)
    • 67236c0 build(deps-dev): bump @​typescript-eslint/parser from 2.34.0 to 4.15.0 (#161)

    ... (truncated)

    Commits
    • 5c56cd6 Extract and don't mangle User Args. (#200)
    • e3c53fe build(deps-dev): bump @​typescript-eslint/eslint-plugin (#194)
    • 3b9f80e build(deps-dev): bump @​typescript-eslint/parser from 4.18.0 to 4.19.0 (#195)
    • 9845713 build(deps-dev): bump @​types/node from 14.14.35 to 14.14.37 (#197)
    • e789ee1 build(deps-dev): bump eslint from 7.22.0 to 7.23.0 (#196)
    • f2e9a96 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#188)
    • 818081a build(deps-dev): bump @​types/node from 14.14.34 to 14.14.35 (#189)
    • 6671836 build(deps-dev): bump @​typescript-eslint/parser from 4.17.0 to 4.18.0 (#190)
    • 526907e build(deps-dev): bump @​typescript-eslint/parser from 4.16.1 to 4.17.0 (#185)
    • 6b6ba16 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#186)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • build(deps): bump golangci/golangci-lint-action from v2.3.0 to v2.5.1

    build(deps): bump golangci/golangci-lint-action from v2.3.0 to v2.5.1

    Bumps golangci/golangci-lint-action from v2.3.0 to v2.5.1.

    Release notes

    Sourced from golangci/golangci-lint-action's releases.

    v2.5.1

    Bug fixes:

    • d9f0e73 Check that go.mod exists in reading the version (#173)

    v2.5.0

    New Features:

    • 51485a4 Try to get version from go.mod file (#118)

    v2.4.1

    Fixed bugs:

    • a12ae43 Add --overwrite flag to tar extraction (#156)

    Updated dependencies:

    • f1dee55 build(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.0.0 (#168)
    • 8456024 build(deps-dev): bump @typescript-eslint/eslint-plugin (#171)
    • 3e54e51 build(deps-dev): bump @types/node from 14.14.28 to 14.14.31 (#170)
    • 2f717c4 build(deps-dev): bump @typescript-eslint/parser from 4.15.0 to 4.15.1 (#169)
    • 4a6ab12 build(deps-dev): bump @types/node from 14.14.25 to 14.14.28 (#164)
    • f9b6927 build(deps-dev): bump eslint from 6.8.0 to 7.20.0 (#163)
    • 41858b8 build(deps-dev): bump typescript from 4.1.3 to 4.1.5 (#162)
    • 67236c0 build(deps-dev): bump @typescript-eslint/parser from 2.34.0 to 4.15.0 (#161)

    Other improvements:

    • 23487cb Update "version" config in README example (#167)

    v2.4.0

    Features:

    • e4e910b Add a skip-go-installation to use pre-installed Go (#144)
    • 0dd3083 Add options to skip caching of folders. (#154)

    Dependencies:

    • e1ae6cf build(deps-dev): bump @types/node from 14.14.22 to 14.14.25 (#158)
    • 0ef0ffc build(deps): bump @actions/cache from 1.0.5 to 1.0.6 (#159)
    • 125ac48 build(deps-dev): bump @types/node from 14.14.21 to 14.14.22 (#152)
    • 147f37a build(deps-dev): bump @types/node from 14.14.20 to 14.14.21 (#149)
    • a19645e build(deps-dev): bump eslint-plugin-prettier from 3.3.0 to 3.3.1 (#148)
    • 286cf07 build(deps-dev): bump @types/node from 14.14.19 to 14.14.20 (#147)
    • 7641a67 build(deps-dev): bump @types/node from 14.14.16 to 14.14.19 (#145)
    • 89d96d6 build(deps-dev): bump eslint-plugin-simple-import-sort from 5.0.3 to 7.0.0 (#137)
    • 45f3a37 build(deps-dev): bump @types/node from 14.14.14 to 14.14.16 (#143)
    • 943013e build(deps-dev): bump @types/node from 14.14.13 to 14.14.14 (#142)
    • 49a9e46 build(deps-dev): bump typescript from 4.1.2 to 4.1.3 (#140)
    • 528677a build(deps-dev): bump @types/node from 14.14.10 to 14.14.13 (#139)
    • 85798b5 build(deps): bump @actions/cache from 1.0.4 to 1.0.5 (#141)
    • d164f0d build(deps-dev): bump eslint-plugin-prettier from 3.2.0 to 3.3.0 (#138)
    • 9cf34bb build(deps-dev): bump eslint-plugin-prettier from 3.1.4 to 3.2.0 (#136)
    • 629aad1 build(deps-dev): bump @types/node from 14.14.9 to 14.14.10 (#134)
    • 1bac7d9 build(deps-dev): bump prettier from 2.1.2 to 2.2.1 (#133)
    • 44fae30 build(deps-dev): bump typescript from 4.0.5 to 4.1.2 (#131)
    • 689e90e build(deps-dev): bump @types/node from 14.14.7 to 14.14.9 (#130)

    ... (truncated)

    Commits
    • d9f0e73 Check that go.mod exists in reading the version (#173)
    • 51485a4 Try to get version from go.mod file (#118)
    • a12ae43 Add --overwrite flag to tar extraction (#156)
    • f1dee55 build(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.0.0 (#168)
    • 23487cb Update "version" config in README example (#167)
    • 8456024 build(deps-dev): bump @typescript-eslint/eslint-plugin (#171)
    • 3e54e51 build(deps-dev): bump @types/node from 14.14.28 to 14.14.31 (#170)
    • 2f717c4 build(deps-dev): bump @typescript-eslint/parser from 4.15.0 to 4.15.1 (#169)
    • 4a6ab12 build(deps-dev): bump @types/node from 14.14.25 to 14.14.28 (#164)
    • f9b6927 build(deps-dev): bump eslint from 6.8.0 to 7.20.0 (#163)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • build(deps): bump sonatype-nexus-community/nancy-github-action from 1.0.1 to v1.0.2

    build(deps): bump sonatype-nexus-community/nancy-github-action from 1.0.1 to v1.0.2

    Bumps sonatype-nexus-community/nancy-github-action from 1.0.1 to v1.0.2.

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • build(deps): bump golangci/golangci-lint-action from v2.3.0 to v2.4.0

    build(deps): bump golangci/golangci-lint-action from v2.3.0 to v2.4.0

    Bumps golangci/golangci-lint-action from v2.3.0 to v2.4.0.

    Release notes

    Sourced from golangci/golangci-lint-action's releases.

    v2.4.0

    Features:

    • e4e910b Add a skip-go-installation to use pre-installed Go (#144)
    • 0dd3083 Add options to skip caching of folders. (#154)

    Dependencies:

    • e1ae6cf build(deps-dev): bump @types/node from 14.14.22 to 14.14.25 (#158)
    • 0ef0ffc build(deps): bump @actions/cache from 1.0.5 to 1.0.6 (#159)
    • 125ac48 build(deps-dev): bump @types/node from 14.14.21 to 14.14.22 (#152)
    • 147f37a build(deps-dev): bump @types/node from 14.14.20 to 14.14.21 (#149)
    • a19645e build(deps-dev): bump eslint-plugin-prettier from 3.3.0 to 3.3.1 (#148)
    • 286cf07 build(deps-dev): bump @types/node from 14.14.19 to 14.14.20 (#147)
    • 7641a67 build(deps-dev): bump @types/node from 14.14.16 to 14.14.19 (#145)
    • 89d96d6 build(deps-dev): bump eslint-plugin-simple-import-sort from 5.0.3 to 7.0.0 (#137)
    • 45f3a37 build(deps-dev): bump @types/node from 14.14.14 to 14.14.16 (#143)
    • 943013e build(deps-dev): bump @types/node from 14.14.13 to 14.14.14 (#142)
    • 49a9e46 build(deps-dev): bump typescript from 4.1.2 to 4.1.3 (#140)
    • 528677a build(deps-dev): bump @types/node from 14.14.10 to 14.14.13 (#139)
    • 85798b5 build(deps): bump @actions/cache from 1.0.4 to 1.0.5 (#141)
    • d164f0d build(deps-dev): bump eslint-plugin-prettier from 3.2.0 to 3.3.0 (#138)
    • 9cf34bb build(deps-dev): bump eslint-plugin-prettier from 3.1.4 to 3.2.0 (#136)
    • 629aad1 build(deps-dev): bump @types/node from 14.14.9 to 14.14.10 (#134)
    • 1bac7d9 build(deps-dev): bump prettier from 2.1.2 to 2.2.1 (#133)
    • 44fae30 build(deps-dev): bump typescript from 4.0.5 to 4.1.2 (#131)
    • 689e90e build(deps-dev): bump @types/node from 14.14.7 to 14.14.9 (#130)
    • d73150a build(deps-dev): bump @types/node from 14.14.6 to 14.14.7 (#124)
    • 2c3839f build(deps): bump @actions/tool-cache from 1.6.0 to 1.6.1 (#125)
    • f881d99 build(deps): bump @actions/cache from 1.0.3 to 1.0.4 (#123)
    • d3f3b8a build(deps-dev): bump typescript from 4.0.3 to 4.0.5 (#120)
    • e3e2a92 build(deps-dev): bump @types/node from 14.14.3 to 14.14.6 (#121)
    • e1bd435 build(deps-dev): bump eslint-config-prettier from 6.14.0 to 6.15.0 (#122)
    • 345e534 build(deps-dev): bump @types/node from 14.11.10 to 14.14.3 (#116)
    • 13e9e90 build(deps): bump @actions/cache from 1.0.2 to 1.0.3 (#117)
    • 771153b build(deps-dev): bump eslint-config-prettier from 6.13.0 to 6.14.0 (#115)

    Other:

    • 544d2ef Update dist folder (#160)
    • e246bba Fix a typo in README.md (it's->its) (#151)
    Commits
    • 544d2ef Update dist folder (#160)
    • 0dd3083 Add options to skip caching of folders. (#154)
    • e1ae6cf build(deps-dev): bump @types/node from 14.14.22 to 14.14.25 (#158)
    • 0ef0ffc build(deps): bump @actions/cache from 1.0.5 to 1.0.6 (#159)
    • 125ac48 build(deps-dev): bump @types/node from 14.14.21 to 14.14.22 (#152)
    • e246bba Fix a typo in README.md (it's->its) (#151)
    • 147f37a build(deps-dev): bump @types/node from 14.14.20 to 14.14.21 (#149)
    • a19645e build(deps-dev): bump eslint-plugin-prettier from 3.3.0 to 3.3.1 (#148)
    • 286cf07 build(deps-dev): bump @types/node from 14.14.19 to 14.14.20 (#147)
    • 7641a67 build(deps-dev): bump @types/node from 14.14.16 to 14.14.19 (#145)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • build(deps): bump sonatype-nexus-community/nancy-github-action from 1.0.1 to 1.0.2

    build(deps): bump sonatype-nexus-community/nancy-github-action from 1.0.1 to 1.0.2

    Bumps sonatype-nexus-community/nancy-github-action from 1.0.1 to 1.0.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • build(deps): bump golangci/golangci-lint-action from 2.3.0 to 2.5.2

    build(deps): bump golangci/golangci-lint-action from 2.3.0 to 2.5.2

    Bumps golangci/golangci-lint-action from 2.3.0 to 2.5.2.

    Release notes

    Sourced from golangci/golangci-lint-action's releases.

    Bump version v2.5.2

    Bug fixes

    • 5c56cd6 Extract and don't mangle User Args. (#200)

    Dependencies

    • e3c53fe bump @​typescript-eslint/eslint-plugin (#194)
    • 3b9f80e bump @​typescript-eslint/parser from 4.18.0 to 4.19.0 (#195)
    • 9845713 bump @​types/node from 14.14.35 to 14.14.37 (#197)
    • e789ee1 bump eslint from 7.22.0 to 7.23.0 (#196)
    • f2e9a96 bump @​typescript-eslint/eslint-plugin (#188)
    • 818081a bump @​types/node from 14.14.34 to 14.14.35 (#189)
    • 6671836 bump @​typescript-eslint/parser from 4.17.0 to 4.18.0 (#190)
    • 526907e bump @​typescript-eslint/parser from 4.16.1 to 4.17.0 (#185)
    • 6b6ba16 bump @​typescript-eslint/eslint-plugin (#186)
    • 9cab4ef bump eslint from 7.21.0 to 7.22.0 (#187)
    • 0c76572 bump @​types/node from 14.14.32 to 14.14.34 (#184)
    • 0dfde21 bump @​typescript-eslint/parser from 4.15.2 to 4.16.1 (#182)
    • 9dcf389 bump typescript from 4.2.2 to 4.2.3 (#181)
    • 34d3904 bump @​types/node from 14.14.31 to 14.14.32 (#180)
    • e30b22f bump @​typescript-eslint/eslint-plugin (#179)
    • 8f30d25 bump eslint from 7.20.0 to 7.21.0 (#177)
    • 0b64a40 bump @​typescript-eslint/parser from 4.15.1 to 4.15.2 (#176)
    • 973b3a3 bump eslint-config-prettier from 8.0.0 to 8.1.0 (#178)
    • 6ea3de1 bump @​typescript-eslint/eslint-plugin (#175)
    • 6eec6af bump typescript from 4.1.5 to 4.2.2 (#174)

    v2.5.1

    Bug fixes:

    • d9f0e73 Check that go.mod exists in reading the version (#173)

    v2.5.0

    New Features:

    • 51485a4 Try to get version from go.mod file (#118)

    v2.4.1

    Fixed bugs:

    • a12ae43 Add --overwrite flag to tar extraction (#156)

    Updated dependencies:

    • f1dee55 build(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.0.0 (#168)
    • 8456024 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#171)
    • 3e54e51 build(deps-dev): bump @​types/node from 14.14.28 to 14.14.31 (#170)
    • 2f717c4 build(deps-dev): bump @​typescript-eslint/parser from 4.15.0 to 4.15.1 (#169)
    • 4a6ab12 build(deps-dev): bump @​types/node from 14.14.25 to 14.14.28 (#164)
    • f9b6927 build(deps-dev): bump eslint from 6.8.0 to 7.20.0 (#163)
    • 41858b8 build(deps-dev): bump typescript from 4.1.3 to 4.1.5 (#162)
    • 67236c0 build(deps-dev): bump @​typescript-eslint/parser from 2.34.0 to 4.15.0 (#161)

    ... (truncated)

    Commits
    • 5c56cd6 Extract and don't mangle User Args. (#200)
    • e3c53fe build(deps-dev): bump @​typescript-eslint/eslint-plugin (#194)
    • 3b9f80e build(deps-dev): bump @​typescript-eslint/parser from 4.18.0 to 4.19.0 (#195)
    • 9845713 build(deps-dev): bump @​types/node from 14.14.35 to 14.14.37 (#197)
    • e789ee1 build(deps-dev): bump eslint from 7.22.0 to 7.23.0 (#196)
    • f2e9a96 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#188)
    • 818081a build(deps-dev): bump @​types/node from 14.14.34 to 14.14.35 (#189)
    • 6671836 build(deps-dev): bump @​typescript-eslint/parser from 4.17.0 to 4.18.0 (#190)
    • 526907e build(deps-dev): bump @​typescript-eslint/parser from 4.16.1 to 4.17.0 (#185)
    • 6b6ba16 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#186)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • build(deps): bump actions/cache from v2 to v2.1.4

    build(deps): bump actions/cache from v2 to v2.1.4

    Bumps actions/cache from v2 to v2.1.4.

    Release notes

    Sourced from actions/cache's releases.

    v2.1.4

    • Make caching more verbose #650
    • Use GNU tar on macOS if available #701
    Commits
    • 26968a0 Make save/restore logs akin (#509)
    • aeaf731 Use @actions/cache version 1.0.6 (#525)
    • 56a8a2f Merge pull request #514 from eregon/recommend-setup-ruby-bundler-cache
    • 1bfe3ac Recommend ruby/setup-ruby's bundler-cache: true option
    • 3543324 Merge pull request #434 from DanielHabenicht/patch-1
    • 3303695 Merge pull request #507 from odin-delrio/patch-1
    • e64ab30 Improved gradle cache key calculation example
    • 26c48dc Merge pull request #506 from actions/cache-matrix-example
    • 72f66cf Added a cache example when using matrix
    • 9f3a4d3 Merge pull request #443 from guilleijo/pipenv-example
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
Releases(v1.23.0)
Owner
Open source NAT traversal tools in go and WebRTC interop
null
Fast RFC 5389 STUN implementation in go

STUN Package stun implements Session Traversal Utilities for NAT (STUN) [RFC5389] protocol and client with no external dependencies and zero allocatio

null 488 Jan 1, 2023
Package arp implements the ARP protocol, as described in RFC 826. MIT Licensed.

arp Package arp implements the ARP protocol, as described in RFC 826. MIT Licensed. Portions of this code are taken from the Go standard library. The

Matt Layher 305 Dec 20, 2022
CoAP Client/Server implementing RFC 7252 for the Go Language

Canopus Canopus is a client/server implementation of the Constrained Application Protocol (CoAP) Updates 25.11.2016 I've added basic dTLS Support base

Zubair Hamed 150 Nov 18, 2022
Package dhcp6 implements a DHCPv6 server, as described in RFC 3315. MIT Licensed.

dhcp6 Package dhcp6 implements a DHCPv6 server, as described in IETF RFC 3315. MIT Licensed. At this time, the API is not stable, and may change over

Matt Layher 76 Sep 27, 2022
Diameter stack and Base Protocol (RFC 6733) for the Go programming language

Diameter Base Protocol Package go-diameter is an implementation of the Diameter Base Protocol RFC 6733 and a stack for the Go programming language. St

Alexandre Fiori 214 Dec 28, 2022
URI Templates (RFC 6570) implemented in Go

uritemplates -- import "github.com/jtacoma/uritemplates" Package uritemplates is a level 4 implementation of RFC 6570 (URI Template, http://tools.ietf

Joshua Tacoma 71 Jan 15, 2022
RFC 1413 compliant fake identd

RFC 1413 compliant fake identd. It is an implementation of the Ident Protocol, but it lies to the clients and always returns fake identities of queried users.

Hyeon Kim (김지현) 3 Oct 29, 2022
Rabbitio - Rabbit stream cipher package RFC 4503 for Go

rabbitio rabbitio is a rabbit stream cipher packge based on RFC 4503 for golang

Sina Ghaderi 8 Dec 14, 2022
llb - It's a very simple but quick backend for proxy servers. Can be useful for fast redirection to predefined domain with zero memory allocation and fast response.

llb What the f--k it is? It's a very simple but quick backend for proxy servers. You can setup redirect to your main domain or just show HTTP/1.1 404

Kirill Danshin 13 Sep 27, 2022
Fast implementation of the collectd network protocol for go.

go-cdclient A fast, dependency free implementation of the collectd binary network protocol. How fast? This package can form an encrypted metric packet

null 7 Feb 6, 2022
Fast DNS implementation for Go

Fast DNS implementation for Go Features 0 Dependency Similar Interface with net/http Fast DoH Server Co-create with fasthttp Fast DNS Client with rich

phuslu 112 Dec 27, 2022
Chisel is a fast TCP/UDP tunnel, transported over HTTP, secured via SSH.

Chisel is a fast TCP/UDP tunnel, transported over HTTP, secured via SSH. Single executable including both client and server. Written in Go (golang). Chisel is mainly useful for passing through firewalls, though it can also be used to provide a secure endpoint into your network.

Jaime Pillora 8.4k Jan 1, 2023
Fast IP to CIDR lookup in Golang

cidranger Fast IP to CIDR block(s) lookup using trie in Golang, inspired by IPv4 route lookup linux. Possible use cases include detecting if a IP addr

Yulin Chen 778 Dec 30, 2022
Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http

fasthttp Fast HTTP implementation for Go. Currently fasthttp is successfully used by VertaMedia in a production serving up to 200K rps from more than

Aliaksandr Valialkin 18.9k Jan 5, 2023
🚀Gev is a lightweight, fast non-blocking TCP network library based on Reactor mode. Support custom protocols to quickly and easily build high-performance servers.

gev 中文 | English gev is a lightweight, fast non-blocking TCP network library based on Reactor mode. Support custom protocols to quickly and easily bui

徐旭 1.5k Jan 6, 2023
Simple, fast and scalable golang rpc library for high load

gorpc Simple, fast and scalable golang RPC library for high load and microservices. Gorpc provides the following features useful for highly loaded pro

Aliaksandr Valialkin 667 Dec 19, 2022
A MCBE Proxy supporting fast transfer and much more!

Downloads Pipelines Here you can find all the build please select the latest and click Artifacts

sun_proxy 28 Oct 17, 2022
An incredibly fast proxy checker & IP rotator with ease.

An incredibly fast proxy checker & IP rotator with ease.

Kitabisa 913 Jan 7, 2023
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

frp README | 中文文档 What is frp? frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. As of now, it s

null 63.3k Jan 5, 2023