Web Snooper 
 WormNET server list 
How it works

Valid XHTML 1.0 Strict


Warning! This module is obsolete and is no longer supported.
You should use the new WormNAT2 module instead, which comes with WormKit.


What is WormNAT?

WormNAT is a program for Worms: Armageddon that allows you to host on-line WormNET games, even if you are behind NAT, a misconfigured router or firewall. You will also need this program to play games hosted with WormNAT.

WormNAT places itself between Worms: Armageddon and your Internet connection. It intercepts game connections and routes them through a 3rd-party server. The connection parameters are transmitted via WormNET, afterwards all players connect to the same server which routes the data.

Currently there are two methods (protocols) for routing data - IRC and SOCKS.

How to get up and running

This step-by-step walkthrough describes how to configure WormNAT to host using the SOCKS protocol, which is the preferred method.

  1. Download WormNAT, and unpack the ZIP to the directory where you installed Worms: Armageddon.
  2. Run WormNATConfig.exe.
  3. Set Hosting mode to SOCKS.
  4. Click on the Automatic configuration button. Have patience, this could take some time.
  5. When the auto-configuration has successfully finished, click OK.
  6. From now on, to play on-line using WormNAT you will need to launch WormNAT.exe instead of the usual WA.exe. Consider updating your desktop shortcuts.

If you can host games without WormNAT, uncheck Enable WormNAT hosting in the configuration utility. Since the connection parameters are retrieved from the hosting player, your network settings are ignored.

WormNAT will not interfere with normal WormNET games. You will still be able to join, and if you have disabled WormNAT hosting, host normal WormNET games.

Note: When you are creating or joining a WormNAT game, Worms may appear to freeze for about 10-20 seconds. This is to be expected - during this time WormNAT retrieves the connection parameters and creates the routed connection.


You can configure WormNAT with the configuration utility WormNATConfig.exe, or by directly editing the INI file. We'll describe the former method.

WormNAT configuration screenshot

Common options:

Settings for IRC:

WormNAT configuration screenshot

Settings for SOCKS:

Please note that not any SOCKS server will do. WormNAT can work only with SOCKS4-compatible servers that support the BIND command and are configured correctly. You can use the Check button to verify if WormNAT can work with a specified SOCKS server.

Note: for SOCKS to work, you will need to configure your external address in the WormNET configuration (or leave it blank if you wish WormNET to detect it). This is needed because the SOCKS server needs to know from what IP to expect an incoming connection on the bound port.

How it works


Before you try to understand how WormNAT works, you should at least have some knowledge of WormNET's structure.

A WormNET server is basically composed of a slightly (if at all) modified IRC server and an HTTP server with a few scripts. As of writing this page, WormNET is running 2.8/hybrid-6.3.1(20020418_1) and Apache/2.0.54 + PHP/4.3.10-16 on Debian GNU/Linux.

So, the typical screen you see in a WormNET channel is actually made up of two logical parts:

  1. The first is the game list, which lists all games in the "waiting for players" state; WormNET games are managed by the PHP scripts.
  2. The second is the nickname list and the chatter area, which are managed through IRC.

These parts aren't really interconnected - thus, it's possible to create a game without connecting to the IRC server, and it is possible to connect to the IRC server without logging in through the web interface (this might change with time).

A typical connection sequence to WormNET is as following:


WormNAT intercepts almost all WormNET-related traffic, and modifies it as it passes between Worms and WormNET.

First of all, WormNAT intercepts game creation (hosting) commands. It substitutes your address (as it is configured in Worms' network options) with the URL to the WormNAT homepage, which will be visible to players who do not have WormNAT. This is needed so WormNAT will distinguish normal games and WormNAT games.
Secondly, WormNAT does not allow Worms to disconnect the player from IRC when he is hosting a game - instead it "takes over" the connection (thou it doesn't stop Worms parting from any joined channels first). This is necessary to communicate the connection parameters to players who wish to join the game.

When a player (with WormNAT) tries to join the aforementioned game, WormNAT queries the host player for the connection parameters. After those are received, WormNAT connects to the server configured by the host and creates the back-end connection.


WormNAT connects to the IRC server (which might not necessarily be the WormNET IRC server), using a modified version of the player's WormNET nickname (see the configuration page). The client then communicates with the host via NOTICE messages; binary data that is sent between the games is packed and encoded into printable characters before being transmitted over IRC.

The users don't join any channels, nor is it necessary; all nicknames are calculated with the same algorithm, and a copy of data is sent to each player by the game host.


WormNAT uses the BIND command of SOCKS servers. By far not all SOCKS servers are configured correctly for BIND commands; that's why an automatic configuration utility was written.

For each player, the server connects to the SOCKS proxy and requests a BIND; the proxy replies with the port to which it is listening for an incoming connection. The server then sends that port as part of the network configuration to the client via WormNET IRC, after which the client proceeds to connect to that port, thus establishing the link.

You can get more detail on the inner workings of WormNAT by examining the log file (WormNAT.log).

Source code

I have included the full Delphi source code for WormNAT. You will need madCollection to recompile the core DLLs.


WormNAT is now distributed as a WormKit module; see the WormKit homepage for more information.


WormNAT started out as a quick hack / experiment so I could play with my friend (we both couldn't host at the time), but my network administrator gave in to my never-ending pleads to forward the required ports before I could finish the program.
I haven't touched it since then for some time, until I decided to finish the project - more as an exercise in networking, hooking and data-tunneling, then for any personal gain. And here we are :)

Thanks to ViruX, for giving me the idea to implement a SOCKS BIND back-end.

Thanks to Spiker, Alexis, Bughish and RUN for testing and support.

Thanks to Team17 for the game, and Deadcode for the updates;
perhaps one day, thanks to him, we won't need programs like this one at all ;)

The author of this program is Vladimir Panteleev (aka The_CyberShadow). Contact me by .