大家好,又见面了,我是你们的朋友全栈君。
Is your email address OK? You are signed up for our newsletters but your email address is either unconfirmed, or has not been reconfirmed in a long time. Please click here to have a confirmation email sent so we can confirm your email address and start sending you newsletters again. Alternatively, you can update your subscriptions.
Introduction
STUN – Simple Traversal of User Datagram Protocol (UDP) through Network Address Translators (NATs). In few words, it just helps you to map your local computer IP:port to public IP:port.
STUN working idea is pretty simple. The client just sends a UDP packet out to the STUN server and the server answers back with IP:port you connected. STUN does three tests to detect the NAT type.
Collapse|Copy Code
In test I, the client sends a STUN Binding Request to a server,
without any flags set in the CHANGE-REQUEST attribute,
and without the RESPONSE-ADDRESS attribute. This causes the server
to send the response back to the address and port that the request came from.
In test II, the client sends a Binding Request with both the
“change IP” and “change port” flags from the CHANGE-REQUEST attribute set.
In test III, the client sends a Binding Request with only the “change port” flag set.
+——–+
| Test |
| I |
+——–+
|
|
V
/\ /\
N / \ Y / \ Y +——–+
UDP / IP \————->| Test |
Blocked \ ? / \Same/ | II |
\ / \? / +——–+
\/ \/ |
| N |
| V
V /\
+——–+ Sym. N / \
| Test | UDP
| II | Firewall \ ? /
+——–+ \ /
| \/
V |Y
/\ /\ |
Symmetric N / \ +——–+ N / \ V
NAT
\Same/ | I | \ ? / Internet
\? / +——–+ \ /
\/ \/
| |Y
| |
| V
| Full
| Cone
V /\
+——–+ / \ Y
| Test |——>/Resp\—->Restricted
| III | \ ? /
+——–+ \ /
\/
|N
| Port
+——>Restricted
///
/// UDP is always blocked.
///
UdpBlocked,
///
/// No NAT, public IP, no firewall.
///
OpenInternet,
///
/// No NAT, public IP, but symmetric UDP firewall.
///
SymmetricUdpFirewall,
///
/// A full cone NAT is one where all requests from the same internal
/// IP address and port are mapped to the same external IP address and port.
/// Furthermore, any external host can send a packet to the internal host,
/// by sending a packet to the mapped external address.
///
FullCone,
///
/// A restricted cone NAT is one where all requests from the same
/// internal IP address and port are mapped to the same external IP address and port.
/// Unlike a full cone NAT, an external host (with IP address X)
/// can send a packet to the internal host only if the internal host
/// had previously sent a packet to IP address X.
///
RestrictedCone,
///
/// A port restricted cone NAT is like a restricted cone NAT, but the restriction
/// includes port numbers. Specifically, an external host can send a packet,
/// with source IP address X and source port P, to the internal host only if
/// the internal host had previously sent a packet to IP address X and port P.
///
PortRestrictedCone,
///
/// A symmetric NAT is one where all requests
/// from the same internal IP address and port,
/// to a specific destination IP address and port, are mapped to the same external
/// IP address and port. If the same host sends a packet with the same source address
/// and port, but to a different destination, a different mapping is used.
/// Furthermore, only the external host that
/// receives a packet can send a UDP packet back to the internal host.
///
Symmetric
Using the Code
Collapse|Copy Code
//Create new socket for STUN client.Socket socket = new Socket
(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
socket.Bind(new IPEndPoint(IPAddress.Any,0));
//Query STUN serverSTUN_Result result = STUN_Client.Query(“stunserver.org”,3478,socket);
if(result.NetType != STUN_NetType.UdpBlocked){
//UDP blocked or !!!! bad STUN server}
else{
IPEndPoint publicEP = result.PublicEndPoint;
//Do your stuff}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160521.html原文链接:https://javaforall.cn