stun
v2.0.0
软件包stun
实现了NAT(stun)(RFC 5389)协议的会话遍历实用程序,并且在热路径中没有外部依赖关系和零分配的客户端。客户支持自动请求重新启动。
您可以通过发送绑定请求从任何眩晕服务器中获取当前的IP地址。在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 Omboteletes RFC 3489,因此实现被目的忽略了,但是,RFC 3489可以轻松地作为单独的软件包实现。
当前软件包是稳定的,除关键错误或安全修复程序外,预计不会向后不兼容的更改。
其他属性不太可能在Stun软件包的范围中实现,唯一的例外是属性或消息类型的常数。
目前在CI中支持和测试GO 1.12。
客户行为经过许多方式进行了测试和验证:
api
目录有关更多信息,请参见Teamcity项目和e2e
目录。此外,Wireshark .pcap
文件也可用于构建工件中的E2E测试。
英特尔(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
该库被用作我们WEBRTC实施的一部分。请参考该路线图,以跟踪我们的主要里程碑。
Pion在懈怠中有一个活跃的社区。
关注Pion Twitter进行项目更新和重要的WEBRTC新闻。
我们一直在寻求支持您的项目。如果您有东西要建造,请伸出援手!如果您需要商业支持或不想使用公共方法,则可以通过[email protected]与我们联系。
查看贡献Wiki加入一群令人惊叹的人,使这个项目成为可能
麻省理工学院许可证 - 有关全文的许可证