NATTypeDetection Plugin¶
The NATTypeDetection plugin determines the NAT (Network Address Translation) type of the local router. This information is useful for predicting connection success rates and choosing appropriate NAT traversal strategies.
Basic Usage¶
Client-side detection:
#include "mafianet/NatTypeDetectionClient.h"
MafiaNet::NatTypeDetectionClient natClient;
peer->AttachPlugin(&natClient);
// Connect to detection server (must have 3+ IP addresses)
natClient.DetectNATType(serverAddress);
Handling detection results:
MafiaNet::Packet* packet;
while ((packet = peer->Receive()) != nullptr) {
if (packet->data[0] == ID_NAT_TYPE_DETECTION_RESULT) {
MafiaNet::NATTypeDetectionResult result =
(MafiaNet::NATTypeDetectionResult)packet->data[1];
switch (result) {
case NAT_TYPE_NONE:
printf("No NAT detected (public IP)\n");
break;
case NAT_TYPE_FULL_CONE:
printf("Full cone NAT - easiest to traverse\n");
break;
case NAT_TYPE_ADDRESS_RESTRICTED:
printf("Address restricted NAT\n");
break;
case NAT_TYPE_PORT_RESTRICTED:
printf("Port restricted NAT\n");
break;
case NAT_TYPE_SYMMETRIC:
printf("Symmetric NAT - hardest to traverse\n");
break;
}
}
peer->DeallocatePacket(packet);
}
Server-side setup:
#include "mafianet/NatTypeDetectionServer.h"
// Server requires 3 different IP addresses
MafiaNet::NatTypeDetectionServer natServer;
peer->AttachPlugin(&natServer);
Key Features¶
Identifies 5 NAT types: None, Full Cone, Address Restricted, Port Restricted, Symmetric
Predicts NAT punchthrough success probability
Works with standard STUN-like detection algorithm
Server component for self-hosted detection
NAT Type Compatibility¶
NAT Types |
None |
Full |
Addr |
Port |
Sym |
|---|---|---|---|---|---|
None |
Yes |
Yes |
Yes |
Yes |
Yes |
Full Cone |
Yes |
Yes |
Yes |
Yes |
Yes |
Address Restricted |
Yes |
Yes |
Yes |
Yes |
No |
Port Restricted |
Yes |
Yes |
Yes |
Yes |
No |
Symmetric |
Yes |
Yes |
No |
No |
No |
See Also¶
NAT Traversal Architecture - Complete NAT solution
FullyConnectedMesh2 Plugin - P2P mesh with NAT traversal
Router2 Plugin - Relay fallback for failed punchthrough