SoV - StarCraft Over VPN - Version 2

Thank you for your interest and time in testing SoV2

Please use the comments at the bottom of this page to provide feedback on how it worked or didnt on your system, and what your environment was, what arguments you used, and so on.

There are currently three methods of injection, I am trying to ensure the one I set as default is the one that works everywhere. We'll be trying them in order of ease. In my experience, most people find the first one (raw udp) just fine.

Sections

Disclaimer

I am in no way affiliated with Blizzard Entertainment nor StarCraft. They are, Im quite sure, registered trademarks (and a grrrrreat game ^^). Same goes for Mac OS X, libpcap, WinPcap and Windows.

You're getting this for free, and it comes with no garantees whatsoever. It comes as-is.

Downloads

Windows

(for Mac OS X click here)

1) Installation - Finding your interfaces

2) Check connectivity

3) Start the games

4.a) Running in UDP RAW mode

4.b) Running in UDP Bound mode

4.c) Running in Injection mode

(This is quite different on Mac OS X, see Mac OS X Injection Mode.)

Ok, now this will be a major PIA, but we can try. The trouble is that we have to rebuild much of the packet, and because were cheating, we have no help. Someone can write this better Im sure. Here goes.

Mac OS X

1) Installation - Finding your interfaces

Mac OS X - 4.c) Injection Mode

No need to do the whole ethernet MAC address kung-fu:

Command line arguments

Switch Argument Description
-p port Set interception and forwarding target port
default: 6111
-f pcap filter Force PCap filter to a specific value.
default: udp port 6111 and dst net 255.255.255.255
-bind   Use bound UDP socket to forward packets. See 4.b.
-i device_name Inject packets into specified device using PCap (instead of UDP socket). See 4.c.
-esrc
-edst
MAC in hex Windows only. Set source and destination MAC address to use when injecting packets.
-nost   Dont print packet statistics
-pc   Print captured packets summary details
-pr   Print captured packets summary details and hex dump of raw contents
-v   Activate verbose mode. Output more about what SoV is doing.
-L   List available interfaces and exit.
-h   Show the list of options and exit.
-ver   Show version information and exit.

Further troubleshooting

Change Log

Source code

Source code is available on GitHub at http://github.com/ddlsmurf/SoV.
Contributions welcome !

Technical info

In short: intercepts StarCrafts game discovery UDP broadcast packets and reinjects to a specific IP and interface to avoid broadcasts being blocked at VPNs (and NATs). There no specific understanding of StarCraft packets, any similar UDP packets may be forwarded (using the /p port switch).

When StarCraft is looking for a game, it sends a UDP broadcast packet to your whole local network saying "Hey, you got a game created ?"

Most computers ignore it, and any StarCraft with a running game, replies with a directed UDP packet saying "Hey, I got a game" and so on.

That broadcast packet is not forwarded by mosts VPNs.

SoV uses pcap to snoop in on the network, and looks for StarCraft packets.

When it finds one, it makes a copy, changes the destination to go specifically to the game host.

Just because its not a broadcast packet, like all other StarCraft packets, it gets caried by VPNs and the like just fine.

Here is a quick summary of how the injection methods sum up and work. Understanding of low level UDP packet headers is helpful.

OSI UDP Packet Layer Injection method Trigger flag Windows Mac OS X
2 Ethernet
(eg: MAC addresses)
injection
(Windows)
/i interface Requires injection interface,
correct MAC addresses,
uses failable logic to find IP.
Requires injection interface,
uses failable logic to find IP.
3 IP
(eg: IPv4 addresses)
injection
(Mac OS X)
4 UDP
(eg: port numbers)
RAW UDP
socket(SOCK_RAW)
default Works fine on XP.
Untested
Seems to work fine
Data Bound UDP
socket(SOCK_DGRAM)
bind()
/bind Works fine on XP.
Fails on Windows 7 on socket bind (already in use).
Seems to work fine

Credits

Known Issues