Package stun
implementiert Sitzungsverläufe für NAT (Stun) (RFC 5389) und Client ohne externe Abhängigkeiten und Nullzuweisungen in heißen Pfaden. Der Client unterstützt automatische Anfragen -Wiederholungen.
Sie können Ihre aktuelle IP -Adresse von jedem Stun -Server erhalten, indem Sie eine Bindungsanforderung senden. Siehe idiomatteres Beispiel bei cmd/stun-client
.
package main
import (
"fmt"
"github.com/pion/stun"
)
func main () {
// Parse a STUN URI
u , err := stun . ParseURI ( "stun:stun.l.google.com:19302" )
if err != nil {
panic ( err )
}
// Creating a "connection" to STUN server.
c , err := stun . DialURI ( u , & stun. DialConfig {})
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 )
}
}
RFC 5389 veraltet RFC 3489, sodass die Implementierung nach Zweck ignoriert wurde. RFC 3489 kann jedoch leicht als separates Paket implementiert werden.
Das Paket ist derzeit stabil, mit Ausnahme von kritischen Fehler oder Sicherheitsbehebungen werden keine rückwärtskompatiblen Änderungen erwartet.
Es ist unwahrscheinlich, dass zusätzliche Attribute im Umfang des Stun -Pakets implementiert werden. Die einzige Ausnahme sind Konstanten für Attribut- oder Nachrichtentypen.
Go 1.12 wird derzeit in CI unterstützt und getestet.
Das Kundenverhalten wird in vielerlei Hinsicht getestet und verifiziert:
api
-Verzeichnis Weitere Informationen finden Sie unter TeamCity Project und e2e
-Verzeichnis. Auch die Wireshark .pcap
-Dateien sind für den E2E -Test in Artefakten für die Erstellung verfügbar.
Intel (R) Core (TM) i7-8700k:
version: 1.22.2
goos: linux
goarch: amd64
pkg: github.com/pion/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 github.com/pion/stun 60.973s
Die Bibliothek wird als Teil unserer WebRTC -Implementierung verwendet. Bitte beachten Sie diese Roadmap, um unsere Hauptmeilensteine zu verfolgen.
Pion hat eine aktive Gemeinschaft auf der Lücke.
Folgen Sie dem Pion Twitter, um Projektupdates und wichtige WebRTC -Nachrichten zu erhalten.
Wir sind immer versuchen, Ihre Projekte zu unterstützen. Bitte erreichen Sie, ob Sie etwas zu bauen haben! Wenn Sie kommerzielle Unterstützung benötigen oder keine öffentlichen Methoden verwenden möchten, können Sie uns unter [email protected] kontaktieren
Schauen Sie sich das beitragende Wiki an, um sich der Gruppe erstaunlicher Menschen anzuschließen, die dieses Projekt ermöglichen
MIT -Lizenz - Siehe Lizenz für Volltext