ネットワーク、特にp2pシステムを操作するためのさまざまなプログラムを作成する場合、プログラムからコンピューターの外部IP(ビッグインターネットからコンピューターにアクセスできるアドレス)を見つける必要がある場合があります。 多くの場合、簡単な方法で外部Webサービスを使用する誘惑があります。httpを介してIPを返すか、自分で展開します。 この問題を解決する方法は実行可能ですが、それでも多くの欠点があります。
- 独自のサーバーを使用する場合は、対応するドメイン名と同時に、どこかでそれを保持および維持する必要があります。 障害が発生した場合、またはドメインを強制的に失効させた場合、p2pネットワーク全体に障害が発生します。
- 外部サーバーを使用する場合、システムの操作性と応答形式の両方に依存します。これらはまったく標準化されておらず、サーバー所有者はいつでも変更できます。 ネットワークにも同じ影響があります。
- 使用することをお勧めするhttp-tcpに基づいています。つまり、プロトコルは比較的重いため、接続などが必要です。 一般的には使用できますが、コンピューターとネットワークの両方のリソースオーバーランは明らかです。
上記に基づいて、サイトの所有者の自発性に依存せず、一般的にリソースを効率的に使用するために、外部IPを取得するための軽量で標準化されたプロトコルが必要であることが明らかになります。
WWW生成は非常に驚くでしょうが、そのようなプロトコルは長い間存在し、標準化されており、IPテレフォニー、および他のマルチメディアサービスのいくつかの場所で広く使用されています。 プロトコルはSTUNと呼ばれ、 rfc5389で指定されています 。
これはUDPに基づく軽量プロトコルであり、使用する場合、STUNを介して外部IPを取得するためにTCP接続などを確立する必要はありません。 これはwwwと比較して、コンピューティングリソースの負荷を軽減し、アドレスを決定する時間を短縮します。 それぞれ約50バイトの2つのパケットのみ-アドレスは既知です。
実際、STUNを使用すると、外部IPを特定できるだけでなく、現在のNATバリアの動作を調査することもできます。これは、複数の連続したNATデバイスで構成される場合があります。 しかし、STUNの高度な機能は、IPアドレスの取得に関するこの記事の範囲を超えているため、主なことに集中しましょう。
したがって、簡単で標準的なプロトコルがあることがわかります。 ここで、プログラムがリクエストを送信するSTUNサーバーが必要です。 幸いなことに、そのようなサーバーがあり、すべての自尊心のあるVOIP会社が1つを所有しています。 このようなサーバーは数百台ありますが、これは同様の目的のパブリックWebサーバーよりもはるかに多くなっています。 そしてすべてが標準であり、それぞれが答えを解読する際に「特別なアプローチ」を持つ必要はありません。 以下は、私たちに知られている公開STUNサーバーのリストです。
プロトコルとサーバーを決定したので、プログラムに簡単に統合できるSTUNクライアントをどこかで見つけることが残っています。 ここでは、 Emercoinプロジェクトからstun.cppファイルを取得することをお勧めします。 このファイルには、STUNを介して外部IPを決定するための完全なサブシステムが含まれています。 幸いなことに、このプロジェクトはオープンソースであり、GPLの下でライセンスされています。
このファイルにはGetExternalIPbySTUN()関数が含まれています。この関数は、定義済みのSTUNサーバーのリストを、それらのいずれかから応答を受信するまでループで擬似ランダムにポーリングします。 したがって、一部のサーバーで障害が発生すると、サブシステムの速度が低下しますが、サービス拒否は発生しません。 また、リストには200を超えるサーバーが含まれているため、すべてのサーバーが同時に障害を起こす可能性は無視できるようです。
リストをクロールする擬似ランダムな順序により、すべてのクライアントの速度が同時に低下する一部のサーバーの障害に対して、このような構成がないことが保証されます。 さらに、このアルゴリズムは複数のサーバーにリクエストを分散するため、専用サーバーの過負荷が解消されます。 つまり、負荷はサーバープール全体に均等に分散されます。
リクエストごとにランダムIDを生成することで、リクエストを匿名化する手段も講じられています。 サーバーの分散と組み合わせて、サーバーの所有者がp2pネットワークを「計算」することはほとんど不可能になります。 受信するリクエストは0.5%未満であり、リクエストをIPテレフォニー機器からのリクエストと明確に区別することはできません。
以下は、私たちに知られている形式のパブリックSTUNサーバーのリストです。
iphone-stun.strato-iphone.dehaps478 numb.viagenie.cahaps478 sip1.lakedestiny.cordiaip.comhaps478 stun.12connect.com {478 stun.12voip.com {478 stun.1cbit.rureg478 stun.1und1.dehaps478 stun.2talk.co.nzhaps478 stun.2talk.comhaps478 stun.3clogic.com {478 stun.3cx.com {478 stun.726.comhaps478 stun.a-mm.tv {478 stun.aa.net.ukhaps478 stun.aceweb.com {478 stun.acrobits.czhaps478 stun.acronis.com opin478 stun.actionvoip.com {478 stun.advfn.com {478 stun.aeta-audio.com {478 stun.aeta.com {478 stun.allflac.com opin478 stun.anlx.net liver478 stun.antisip.com {478 stun.avigora.comhaps478 stun.avigora.frreg478 stun.b2b2c.cahaps478 stun.bahnhof.net REG478 stun.barracuda.com {478 stun.bcs2005.netverse478 stun.beam.proreg478 stun.bitburger.dehaps478 stun.bluesip.netpany4747 stun.bomgar.com {478 stun.botonakis.com ∗ 478 stun.budgetphone.nl {478 stun.budgetsip.com {478 stun.cablenet-as.nethaps478 stun.callromania.rohaps478 stun.callwithus.comhaps478 stun.cheapvoip.com {478 stun.cloopen.com {478 stun.cognitoys.com {478 stun.comfi.com {478 stun.commpeak.com {478 stun.communigate.com {478 stun.comrex.com {478 stun.comtube.comhaps478 stun.comtube.rureg478 stun.connecteddata.com {478 stun.cope.eshaps478 stun.counterpath.com {478 stun.counterpath.nethaps478 stun.crimeastar.net {478 stun.dcalling.dehaps478 stun.demos.rureg478 stun.demos.su {478 stun.dls.net ∗ 478 stun.dokom.net opin478 stun.dowlatow.rureg478 stun.duocom.eshaps478 stun.dus.net stun.e-fon.chhaps478 stun.easemob.com {478 stun.easycall.plreg478 stun.easyvoip.com {478 stun.eibach.dehaps478 stun.ekiga.net ∗ 478 stun.ekir.dehaps478 stun.elitetele.com {478 stun.emu.ee {478 stun.engineeredarts.co.ukhaps478 stun.eoni.com {478 stun.epygi.com {478 stun.faktortel.com.auhaps478 stun.fbsbx.com {478 stun.fh-stralsund.dehaps478 stun.fmbaros.rureg478 stun.fmo.dehaps478 stun.freecall.com {478 stun.freeswitch.org {478 stun.freevoipdeal.com {478 stun.genymotion.com {478 stun.gmx.dehaps478 stun.gmx.net {478 stun.gnunet.org {478 stun.gradwell.com {478 stun.halonet.plhaps478 stun.highfidelity.iohaps478 stun.hoiio.comhaps478 stun.hosteurope.dehaps478 stun.i-stroy.rureg478 stun.ideasip.com {478 stun.imweb.iohaps478 stun.infra.net ∗ 478 stun.innovaphone.comhaps478 stun.instantteleseminar.comhaps478 stun.internetcalls.comhaps478 stun.intervoip.com {478 stun.ipcomms.net {478 stun.ipfire.org opin478 stun.ippi.com {478 stun.ippi.frreg478 stun.it1.hrrouble478 stun.ivao.aerorouble478 stun.jabbim.czhaps478 stun.jumblo.comhaps478 stun.justvoip.com {478 stun.kaospilot.dk {478 stun.kaseya.com {478 stun.kaznpu.kzhaps478 stun.kiwilink.co.nzause478 stun.kuaibo.com {478 stun.l.google.com:19302 stun.lamobo.orghaps478 stun.levigo.dehaps478 stun.lindab.com {478 stun.linphone.org opin478 stun.linx.net {478 stun.liveo.frreg478 stun.lowratevoip.com {478 stun.lundimatin.fr {478 stun.maestroconference.com {478 stun.mangotele.com {478 stun.mgn.ru {478 stun.mit.dehaps478 stun.miwifi.com ∗ 478 stun.mixer.com ∗ 478 stun.modulus.grreg478 stun.mrmondialisation.org opin478 stun.myfreecams.comhaps478 stun.myvoiptraffic.com {478 stun.mywatson.ithaps478 stun.nacsworld.com {478 stun.nas.net {478 stun.nautile.nchaps478 stun.netappel.com {478 stun.nextcloud.com {478 stun.nfon.net opin478 stun.ngine.dehaps478 stun.noblogs.orghaps478 stun.node4.co.ukhaps478 stun.nonoh.netreg478 stun.nottingham.ac.ukhaps478 stun.nova.ishaps478 stun.onesuite.com opin478 stun.onthenet.com.auhaps478 stun.ooma.com {478 stun.oovoo.com {478 stun.ozekiphone.comhaps478 stun.personal-voip.dehaps478 stun.petcube.com {478 stun.pexip.com {478 stun.phone.com opin478 stun.pidgin.imhaps478 stun.pjsip.org {478 stun.planete.net ∗ 478 stun.poivy.com {478 stun.powervoip.com {478 stun.ppdi.comhaps478 stun.rackco.comreg478 stun.redworks.nl {478 stun.ringostat.com {478 stun.rmf.plrouble478 stun.rockenstein.dehaps478 stun.rolmail.net ∗ 478 stun.rudtp.ru ∗ 478 stun.russian-club.net ∗ 478 stun.rynga.com {478 stun.sainf.ru ∗ 478 stun.schlund.dehaps478 stun.sigmavoip.com {478 stun.sip.ushaps478 stun.sipdiscount.com {478 stun.sipgate.net:10000 stun.sipgate.netreg478 stun.siplogin.dehaps478 stun.sipnet.net {478 stun.sipnet.rureg478 stun.siportal.itrouble478 stun.sippeer.dkhaps478 stun.siptraffic.com {478 stun.sma.dehaps478 stun.smartvoip.com {478 stun.smsdiscount.com {478 stun.snafu.dehaps478 stun.solcon.nl {478 stun.solnet.chhaps478 stun.sonetel.com {478 stun.sonetel.net {478 stun.sovtest.rureg478 stun.speedy.com.arhaps478 stun.spoiltheprincess.com {478 stun.srce.hrreg478 stun.ssl7.net {478 stun.stunprotocol.org {478 stun.swissquote.com {478 stun.t-online.dehaps478 stun.talks.byhaps478 stun.tel.lu {478 stun.telbo.comhaps478 stun.telefacil.com {478 stun.threema.chhaps478 stun.tng.dehaps478 stun.trueconf.ru {478 stun.twt.itrouble478 stun.ucsb.edu {478 stun.ucw.czhaps478 stun.uiscom.rureg478 stun.uls.co.zahaps478 stun.unseen.isreg478 stun.up.edu.phhaps478 stun.usfamily.net opin478 stun.uucall.comhaps478 stun.veoh.com ∗ 478 stun.vipgroup.net REG478 stun.viva.grreg478 stun.vivox.com ∗ 478 stun.vline.com ∗ 478 stun.vmi.sehaps478 stun.vo.lu {478 stun.vodafone.rohaps478 stun.voicetrading.com {478 stun.voip.aebc.comhaps478 stun.voip.blackberry.com {478 stun.voip.eutelia.ithaps478 stun.voiparound.com {478 stun.voipblast.com {478 stun.voipbuster.com {478 stun.voipbusterpro.com {478 stun.voipcheap.co.ukhaps478 stun.voipcheap.com {478 stun.voipdiscount.com {478 stun.voipfibre.com {478 stun.voipgain.com {478 stun.voipgate.com {478 stun.voipinfocenter.com {478 stun.voipplanet.nl {478 stun.voippro.com {478 stun.voipraider.com {478 stun.voipstunt.com {478 stun.voipwise.com {478 stun.voipzoom.com {478 stun.voxgratia.org opin478 stun.voxox.com {478 stun.voztele.com {478 stun.wcoil.com {478 stun.webcalldirect.com {478 stun.whc.nethaps478 stun.whoi.edu {478 stun.wifirst.netpany4747 stun.wtfismyip.com {478 stun.wwdl.nethaps478 stun.xn ---- 8sbcoa5btidn9i.xn-p1ai:3478 stun.xten.com ∗ 478 stun.xtratelecom.eshaps478 stun.yy.com {478 stun.zadarma.com {478 stun.zepter.rureg478 stun.zoiper.com opin478 stun1.faktortel.com.auhaps478 stun2.faktortel.com.auhaps478 stun1.l.google.com:19302 stun2.l.google.com:19302 stun3.l.google.com:19302 stun4.l.google.com:19302