Overview
IPScout asks a lookup service for the public IP address of the current machine. The request runs asynchronously through the engine's HTTP module, so the game thread never waits, and the result is broadcast through a Blueprint-assignable event. It is useful for lobbies and server browsers, listen-server hosting screens, dedicated test servers and your own backends.
- One call starts the lookup: Get My Public IP.
- The result arrives in On IPAddress Received; the IP is an empty string if the request failed.
- Get Cached IP returns the last received address at any time.
- By default the free public ipify service (
api.ipify.org, JSON format) is queried; Override APIUrl and Override JSONKey point IPScout at any other service that answers with a flat JSON object. - Only the engine's HTTP and Json modules are used.
Requirements
| Requirement | Details |
|---|---|
| Unreal Engine | 4.27 and 5.8 (verified clean on both) |
| Modules | IPScout (Runtime) |
| Dependencies | None. No other plugins are required; the engine HTTP and Json modules are used. |
| Language | Blueprints and C++ |
| Platforms | The plugin has no platform restriction. Win64 is built and verified by Alpha XP; other platforms are supported by the code, not verified by Alpha XP. The machine needs internet access. |
Installation
- Close the editor. Copy the
IPScoutfolder into your project'sPluginsfolder (create it if needed), or install the plugin to the engine from the launcher. - Open the project. For C++ projects, rebuild when the editor asks you to compile the plugin.
- Open Edit > Plugins, find IPScout in the Networking category, enable it and restart the editor.
- C++ only: add
"IPScout"toPublicDependencyModuleNames(orPrivateDependencyModuleNames) in your module's.Build.cs.
Quick start
Blueprint
- In an actor or game instance Blueprint, add Construct Object from Class with class IPScout and promote the result to a variable so it is not garbage collected while the request is running.
- From the variable, drag out and add Bind Event to On IPAddress Received; create a custom event with a string input
IP. - Call Get My Public IP on the variable.
- When the response arrives the custom event fires with the address (empty if the request failed). Later, Get Cached IP returns the same value.
C++
// MyActor.h
#include "IPScout.h"
UPROPERTY()
UIPScout* Scout = nullptr;
UFUNCTION()
void HandleIP(FString IP);
// MyActor.cpp
void AMyActor::BeginPlay()
{
Super::BeginPlay();
Scout = NewObject<UIPScout>(this);
Scout->OnIPAddressReceived.AddDynamic(this, &AMyActor::HandleIP);
Scout->GetMyPublicIP();
}
void AMyActor::HandleIP(FString IP)
{
UE_LOG(LogTemp, Log, TEXT("Public IP: %s"), *IP);
}
IPScout API
All members belong to the class UIPScout (shown as IPScout in the editor, category IPScout). Create an instance with Construct Object from Class (Blueprint) or NewObject<UIPScout>() (C++).
| Node | Type | Description |
|---|---|---|
| IPScout | Class | Blueprintable UObject (UIPScout) that performs the lookup and stores the last result. |
| Get My Public IP | Callable | Clears the cached address and starts the HTTP request to the configured service. |
| Get Cached IP | Pure | Last received address, or an empty string if no response has arrived yet (a warning is logged in that case). |
| Override APIUrl | Callable | Replaces the lookup URL (default api.ipify.org with JSON format). Call before Get My Public IP. |
| Override JSONKey | Callable | Name of the JSON field that holds the address in the response (default ip). Flat JSON objects only. |
| On IPAddress Received | Event | Event dispatcher (FString IP) broadcast when the request finishes; the IP is empty if the request failed. |
LogIPScout category of the Output Log.Troubleshooting
| Symptom | Cause and fix |
|---|---|
| On IPAddress Received fires with an empty string. | The request failed (no internet access, firewall or proxy, service unreachable). The Output Log shows IPScout: request failed. Check connectivity or point Override APIUrl to a reachable service. |
| The event never fires. | The IPScout object was garbage collected before the response arrived. Store it in a variable (Blueprint) or a UPROPERTY() member (C++), and bind the event before calling Get My Public IP. |
| A custom service returns the address but the result is empty. | IPScout parses a flat JSON object. Call Override JSONKey with the name of the field that holds the address; plain-text responses are not parsed. |
Warning IPScout: public IP address not obtained yet. Processing... | Get Cached IP was called before a response arrived, or right after a new Get My Public IP (which clears the cached value). Wait for the event. |
Credits
© 2026 Alpha XP — alphaxp.net · Support: support@alphaxp.net. Built and verified for Unreal Engine 4.27 and 5.8.