@S.Lott からの回答を支持します。STUN (またはその他のプロトコル) を使用して、背後にある NAT のタイプを 100% 確実に判断することはできません。
問題は (私が最近目撃したように)、NAT がアドレス依存(対称)として機能することもあれば、エンドポイント非依存(フル、制限、またはポート制限コーン) として機能することもあります。
考えてみると、アドレス依存であることは、NAT の背後にあるクライアントの 1 つのソケットから 2 つの異なるサーバーにパケットを送信すると、NAT が各サーバーに対して 2 つのカスタム public address:port タプルを作成することを意味します。私の場合、これらのバインディングは完全にランダムに見えましたが、範囲が小さい場合、これらのタプルが実際に等しいことが時々ありました! これはテストを混乱させました。
私は当時このライブラリを使用していましたが、NAT の動作はアドレス依存であり、エンドポイントに依存しない場合もありました (2 つの間の切り替えも完全にランダムに見え、デバイスの再起動後に発生することもあれば、再起動後に発生することもあります)。期間、...)。
これは、主にDeutsche Telekomが所有するSlovak Telekomのモバイル デバイスで発生したため、問題は少なくともヨーロッパ全体に及ぶと思います。
ここでのルールは次のとおりです。STUN テストで対称 NAT の背後にいることがわかった場合はそうではありませんが、そうでないことがわかった場合は 100% 確実ではありません。
最後に、TCP に関する NAT の動作を確認する簡単な方法は、Google に「私の IP アドレスは何ですか」と入力してから、最初の (たとえば) 5 ページを開くことです。ページがIP アドレスに関して一貫していない場合、 NAT の動作はアドレス依存またはアドレスとポート依存 (対称) になります。しかし、繰り返しになりますが、それらが対応している場合は、確信が持てません。