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