mirror of
https://github.com/simon-ding/polaris.git
synced 2026-06-10 03:57:39 +08:00
WIP: stun proxy
This commit is contained in:
169
pkg/nat/stun.go
Normal file
169
pkg/nat/stun.go
Normal file
@@ -0,0 +1,169 @@
|
||||
package nat
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"polaris/log"
|
||||
|
||||
"github.com/pion/stun/v3"
|
||||
)
|
||||
|
||||
func getNatIpAndPort() (*stun.XORMappedAddress, error) {
|
||||
|
||||
var xorAddr stun.XORMappedAddress
|
||||
|
||||
for _, server := range getStunServers() {
|
||||
log.Infof("try to connect to stun server: %s", server)
|
||||
u, err := stun.ParseURI("stun:" + server)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
// Creating a "connection" to STUN server.
|
||||
c, err := stun.DialURI(u, &stun.DialConfig{})
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
// Building binding request with random transaction id.
|
||||
message := stun.MustBuild(stun.TransactionID, stun.BindingRequest)
|
||||
// Sending request to STUN server, waiting for response message.
|
||||
var err1 error
|
||||
if err := c.Do(message, func(res stun.Event) {
|
||||
if res.Error != nil {
|
||||
err1 = res.Error
|
||||
return
|
||||
}
|
||||
log.Infof("stun server %s response: %v", server, res.Message.String())
|
||||
// Decoding XOR-MAPPED-ADDRESS attribute from message.
|
||||
|
||||
if err := xorAddr.GetFrom(res.Message); err != nil {
|
||||
err1 = err
|
||||
return
|
||||
}
|
||||
fmt.Println("your IP is", xorAddr.IP)
|
||||
fmt.Println("your port is", xorAddr.Port)
|
||||
}); err != nil {
|
||||
log.Warnf("stun server %s error: %v", server, err)
|
||||
continue
|
||||
}
|
||||
if err1 != nil {
|
||||
log.Warnf("stun server %s error: %v", server, err1)
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
return &xorAddr, nil
|
||||
}
|
||||
|
||||
func getStunServers() []string {
|
||||
var servers []string
|
||||
for _, line := range strings.Split(strings.TrimSpace(stunServers1), "\n") {
|
||||
line = strings.TrimSpace(line)
|
||||
if line == "" {
|
||||
continue
|
||||
}
|
||||
servers = append(servers, line)
|
||||
}
|
||||
return servers
|
||||
}
|
||||
|
||||
// https://github.com/heiher/natmap/issues/18
|
||||
const stunServers1 = `
|
||||
stun.miwifi.com:3478
|
||||
stun.chat.bilibili.com:3478
|
||||
stun.cloudflare.com:3478
|
||||
turn.cloudflare.com:3478
|
||||
fwa.lifesizecloud.com:3478
|
||||
`
|
||||
|
||||
// https://github.com/pradt2/always-online-stun
|
||||
const stunServers = `
|
||||
stun.miwifi.com:3478
|
||||
stun.ukh.de:3478
|
||||
stun.kanojo.de:3478
|
||||
stun.m-online.net:3478
|
||||
stun.nextcloud.com:3478
|
||||
stun.voztovoice.org:3478
|
||||
stun.oncloud7.ch:3478
|
||||
stun.antisip.com:3478
|
||||
stun.bitburger.de:3478
|
||||
stun.acronis.com:3478
|
||||
stun.signalwire.com:3478
|
||||
stun.sonetel.net:3478
|
||||
stun.poetamatusel.org:3478
|
||||
stun.avigora.fr:3478
|
||||
stun.diallog.com:3478
|
||||
stun.nanocosmos.de:3478
|
||||
stun.romaaeterna.nl:3478
|
||||
stun.heeds.eu:3478
|
||||
stun.freeswitch.org:3478
|
||||
stun.engineeredarts.co.uk:3478
|
||||
stun.root-1.de:3478
|
||||
stun.healthtap.com:3478
|
||||
stun.allflac.com:3478
|
||||
stun.vavadating.com:3478
|
||||
stun.godatenow.com:3478
|
||||
stun.mixvoip.com:3478
|
||||
stun.sip.us:3478
|
||||
stun.sipthor.net:3478
|
||||
stun.stochastix.de:3478
|
||||
stun.kaseya.com:3478
|
||||
stun.files.fm:3478
|
||||
stun.meetwife.com:3478
|
||||
stun.myspeciality.com:3478
|
||||
stun.3wayint.com:3478
|
||||
stun.voip.blackberry.com:3478
|
||||
stun.axialys.net:3478
|
||||
stun.bridesbay.com:3478
|
||||
stun.threema.ch:3478
|
||||
stun.siptrunk.com:3478
|
||||
stun.ncic.com:3478
|
||||
stun.1cbit.ru:3478
|
||||
stun.ttmath.org:3478
|
||||
stun.yesdates.com:3478
|
||||
stun.sonetel.com:3478
|
||||
stun.peethultra.be:3478
|
||||
stun.pure-ip.com:3478
|
||||
stun.business-isp.nl:3478
|
||||
stun.ringostat.com:3478
|
||||
stun.imp.ch:3478
|
||||
stun.cope.es:3478
|
||||
stun.baltmannsweiler.de:3478
|
||||
stun.lovense.com:3478
|
||||
stun.frozenmountain.com:3478
|
||||
stun.linuxtrent.it:3478
|
||||
stun.thinkrosystem.com:3478
|
||||
stun.3deluxe.de:3478
|
||||
stun.skydrone.aero:3478
|
||||
stun.ru-brides.com:3478
|
||||
stun.streamnow.ch:3478
|
||||
stun.atagverwarming.nl:3478
|
||||
stun.ipfire.org:3478
|
||||
stun.fmo.de:3478
|
||||
stun.moonlight-stream.org:3478
|
||||
stun.f.haeder.net:3478
|
||||
stun.nextcloud.com:443
|
||||
stun.finsterwalder.com:3478
|
||||
stun.voipia.net:3478
|
||||
stun.zepter.ru:3478
|
||||
stun.sipnet.net:3478
|
||||
stun.hot-chilli.net:3478
|
||||
stun.zentauron.de:3478
|
||||
stun.geesthacht.de:3478
|
||||
stun.annatel.net:3478
|
||||
stun.flashdance.cx:3478
|
||||
stun.voipgate.com:3478
|
||||
stun.genymotion.com:3478
|
||||
stun.graftlab.com:3478
|
||||
stun.fitauto.ru:3478
|
||||
stun.telnyx.com:3478
|
||||
stun.verbo.be:3478
|
||||
stun.dcalling.de:3478
|
||||
stun.lleida.net:3478
|
||||
stun.romancecompass.com:3478
|
||||
stun.siplogin.de:3478
|
||||
stun.bethesda.net:3478
|
||||
stun.alpirsbacher.de:3478
|
||||
stun.uabrides.com:3478
|
||||
stun.technosens.fr:3478
|
||||
stun.radiojar.com:3478
|
||||
`
|
||||
Reference in New Issue
Block a user