패키지 stun NAT (STUN) (RFC 5389) 프로토콜을위한 세션 트래버스 유틸리티를 구현합니다. 클라이언트는 자동 요청 재전송을 지원합니다.
바인딩 요청을 보내서 STUN 서버에서 현재 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 Obsoletes RFC 3489, 따라서 구현은 목적에 따라 무시되었지만 RFC 3489는 별도의 패키지로 쉽게 구현할 수 있습니다.
패키지는 현재 안정적이며 중요한 버그 또는 보안 수정을 제외하고는 뒤로 호환되지 않는 변경 사항이 예상되지 않습니다.
추가 속성은 Stun 패키지의 범위로 구현되지 않을 것입니다. 유일한 예외는 속성 또는 메시지 유형의 상수입니다.
GO 1.12는 현재 CI에서 지원 및 테스트되었습니다.
클라이언트 행동은 여러 가지 방법으로 테스트 및 검증됩니다.
api 디렉토리를 참조하십시오 자세한 내용은 TeamCity Project 및 e2e 디렉토리를 참조하십시오. 또한 Wireshark .pcap 파일은 빌드를위한 아티팩트에서 E2E 테스트에 사용할 수 있습니다.
인텔 (R) 코어 (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은 Slack에 활발한 커뮤니티를 가지고 있습니다.
프로젝트 업데이트 및 중요한 WEBRTC 뉴스는 Pion Twitter를 팔로우하십시오.
우리는 항상 귀하의 프로젝트를 지원하려고합니다. 구축 할 것이 있으면 연락하십시오! 상업적 지원이 필요하거나 공개 방법을 사용하고 싶지 않은 경우 [email protected]로 문의하십시오.
이 프로젝트를 가능하게하는 놀라운 사람들의 그룹에 가입하려면 기고 된 위키를 확인하십시오.
MIT 라이센스 - 전체 텍스트 라이센스를 참조하십시오