Giter Site home page Giter Site logo

playegggo / switch-lan-play Goto Github PK

View Code? Open in Web Editor NEW

This project forked from spacemeowx2/switch-lan-play

0.0 1.0 0.0 3.2 MB

Make you and your friends play games like in a LAN.

License: GNU General Public License v3.0

CMake 0.21% C 97.88% Batchfile 0.01% Shell 0.02% HTML 0.07% Makefile 0.21% Perl 0.07% C++ 1.32% Dockerfile 0.01% TypeScript 0.21%

switch-lan-play's Introduction

switch-lan-play

Build status Chat on discord

Make you and your friends play games like in a LAN.

                     Internet
                        |
                  [SOCKS5 Proxy] (optional)
                        |
        ARP,IPv4        |          LAN Packets
Switch <-------->  PC(lan-play)  <-------------> Server
                                       UDP

NOTE:

  • This project is in an early stage. The protocol may change frequently.

Usage

To play with your friends, you and your friends should run lan-play client connecting to the same Server on your PC, and set static IP on your Switch.

Your PC and Switch must be connected to the same router.

1. Windows Client

  1. Download and install WinPcap from https://www.winpcap.org/install/default.htm

  2. Download the latest lan-play.exe from https://github.com/spacemeowx2/switch-lan-play/releases

  3. Run lan-play.exe with paramter --relay-server-addr. For example:

lan-play.exe --relay-server-addr example.com:11451

After that, you may see the list like below:

1. \Device\NPF_{538AED4A-7BC9-47D9-A1DD-3F8E0AD2D2B0} (Microsoft Corporation)
        IP: [10.0.75.1]
2. \Device\NPF_{A885EB2A-D362-4846-8554-E6F59A044EB9} (Intel(R) Ethernet Connection (2) I219-V)
        IP: [192.168.233.153]
Enter the interface number (1-2):

Select the interface which is in the same LAN with your Switch.

2. Switch

  1. Make sure lan-play client is running.

  2. Go to your Switch settings page, set the IP address to static. The IP address can be any from 10.13.0.1 to 10.13.255.254, excepting 10.13.37.1. But don't use the same IP address with your friend.

    IP Address 10.13.?.?
    Subnet Mask 255.255.0.0
    Gateway 10.13.37.1
  3. Click save. Your Switch now can access the Internet via your PC.

  4. Launch your game, hold L+R+LStick to enter lan-play mode. Host or join a game, enjoy!

Server

git clone https://github.com/spacemeowx2/switch-lan-play.git
cd switch-lan-play/server
npm install
npm run build
npm run server

SOCKS5 Proxy

lan-play --socks5-server-addr example.com:1080

Data sent to the relay server does not pass through the proxy.

Build

Debug or Release

cmake -DCMAKE_BUILD_TYPE=Debug .. cmake -DCMAKE_BUILD_TYPE=Release ..

Ubuntu / Debian

This project depends on libpcap, you can install libpcap0.8-dev on Ubuntu or Debian:

sudo apt install libpcap0.8-dev git gcc g++ cmake

Prepare a cmake, gcc, and run like this:

mkdir build
cd build
cmake ..
make

Windows

Use MSYS2 to compile.

pacman -Sy
pacman -S make \
    mingw-w64-x86_64-cmake \
    mingw-w64-x86_64-gcc

To compile 32bit program:

pacman -S mingw-w64-i686-cmake \
    mingw-w64-i686-gcc

Open MSYS2 MinGW 64-bit or MSYS2 MinGW 32-bit.

mkdir build
cd build
cmake -G "MSYS Makefiles" ..
make

Mac OS

brew install cmake
mkdir build
cd build
cmake ..
make

Server

Docker

docker run -d -p 11451:11451/udp -p 11451:11451/tcp spacemeowx2/switch-lan-play

Node

git clone https://github.com/spacemeowx2/switch-lan-play
cd switch-lan-play/server
npm install
npm run build # build ts to js. run it again when code changed.
npm start

The server will listen to port 11451/udp.

Meanwhile the monitor service will be started on port 11451/tcp by default, you can get online client count via HTTP request:

Request: GET http://{YOUR_SERVER_IP}:11451/info

Response: { "online": 42 }

Protocol

The protocol is very simple now, but I'm going to add some fileds to calculate network quality(packet loss, ping), like timestamp, seq_id, etc.

struct packet {
    uint8_t type;
    uint8_t payload[packet_len - 1];
};
enum type {
    KEEPALIVE = 0,
    IPV4 = 1,
    PING = 2,
    IPV4_FRAG = 3
};

The server can read IP addresses from payload and save source IP -> LAN IP to a cache table. If target ip address shown in payload doesn't hit the cache, broadcast this packet to the entire room(now a server is a room).

switch-lan-play's People

Contributors

spacemeowx2 avatar angrypowman avatar cubuss avatar bao3 avatar greatwizard avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.