Git Product home page Git Product logo

meshcentralrouter's Introduction

MeshCentral Router

For more information, visit MeshCentral.com.

Download the full PDF user's guide with more information on using the MeshCentral Router.

MeshCentral Router is a Windows TCP/UDP port mapping tool. You first needs to have an account on a MeshCentral server like MeshCentral.com or your own server. You can then run MeshCentral Router, login to your account that start performing port mappings.

A typical use of this tool is to perform a Remote Desktop RDP session with another computer over the Internet without the need to set a VPN.

Video Tutorials

You can watch many tutorial videos on the MeshCentral YouTube Channel. MeshCentral Router has it's own introduction video.

Introduction to MeshCentral Router.
MeshCentral - Router

License

This software is licensed under Apache 2.0.

meshcentralrouter's People

Contributors

cookta2012 avatar fornax-a avatar jbfuzier avatar petervanv avatar si458 avatar sschoen avatar ylianst avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meshcentralrouter's Issues

Automatically reconnect when disconnected

Reopening issue previously closed because I don't think it has been resolved.

The screenshot attached in the message closing the previous issue was for Remote Desktop, not MeshCentral Router.

The MeshCentral Router version 1.8.8217 bundled with the latest MeshCentral 1.0.45 does not have any a Reconnect option anywhere in the program settings, or when logged in.
MeshCentralRouter(2)_jGYgBtxhZC
MeshCentralRouter(2)_njEBbF6LXP

Update Tab order

Bit of a request here .... would it be possible to update the tab order that's used when setting up a new mapping?

Today this is how it works:

  1. Right click host, then add map / relay map - this results in the cursor not been focused to any field (would be great if it was name)
  2. Manually select the Name field, enter text and then hit tab - this then jumps the cursor to the cancel button (would be great if it went to the protocol selection)

And from there tab seems to jump from field to field .... it would be lovely if it followed the fields in the window.

Does that make any sense ?

MeshCentral Router 2FA Issue

I'm not sure if this is just me or not but recently, logging into the Windows version MeshCentral Router with 2FA enabled and checking the "Don't ask for 30 days" box seems to be crashing the application. It completes the login but the device list never loads and the entire application becomes unresponsive. This does not happen when logging in without that box checked or on the Mac version.

Server Version: 0.9.58
MeshCentral Router Version: 1.8.7998.37571 (according to the details tab under right click > Properties - not sure if this is relevant)

Bug / Question

I am trying to Tunnel Wireguard over UDP port mapping with MeshCentralRouter
( due to restricted networks - School Network in My case)
image

However it appears that after the first packet the mapping "Stops"
image

Looking at the mesh central server web ui for the endpoint iam trying to tunnel i recive the fallowing error:

uncaughtException1: Error: dgram.message() dispatch error => EventEmitter.emit(): Event dispatch for 'message' on 'dgram.socket' threw an exception: TypeError: cannot read property 's' of undefined in method 'onUdpRelayTargetTunnelConnect()'

I am using:
Server version 0.8.16
MCRouter 1.6.7764

Feature Request: services detection

Ok this is a biggie, but what would be really awesome is to integrate nmap, or any other similar tool for that matter, into mc router so it can detect any network services running on the remote device/network into a list from where you can easily add (relay) maps with the click of a button.

Automatically reconnect when disconnected

The current implementation of the MeshCentralRouter program seems to not include any auto-reconnect features, and if the connection breaks during an unattended session, the program logs you out and all connections are broken, requiring manual action to relogin and restore the saved connections.

This makes it difficult to keep a long-term connection open to another Meshcentral server, for example in SSH tunneling. Auto-reconnect should be implemented so that there is no need to reconnect every time the connection is disrupted.

Remote desktop settings not saved

When I start the Remote Desktop from the router app, the settings are not saved. When I set the quality to 90% and the frame rate to "fast", in the next connection it's always set back to 60% and "middle" again.

image

The settings, once done, should be recognized for any new session which is established via the router app.

Alternatively, the default settings could be added to the settings menu of the router app:

image

PS: In German this menu should be just named "Einstellungen", not "Die Einstellungen". Although it's not fully wrong, nobody would name it like this ;-)

image

Bug: Application Crashes when the user do not have a group permission.

When the user have a device only permission, the application crashes when trying to add a port mapping.

Adding any of the group permissions solves the issue. Nevertheless, allows the user to access those devices, and add relayed connection.

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at MeshCentralRouter.AddRelayMapForm.fillNodesInDropDown()
at MeshCentralRouter.AddRelayMapForm.AddRelayMapForm_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4121.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll

MeshCentralRouter
Assembly Version: 1.0.7400.22784
Win32 Version: 1.0.7400.22784
CodeBase: file:///C:/Users/xxxxxx/Downloads/Temp/MeshCentralRouter.exe

System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4121.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4001.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3761.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3761.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4121.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3761.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3761.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll

System.Web.Extensions
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4075.0
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Web.Extensions/v4.0_4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll

System.Web
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4075.0 built by: NET48REL1LAST
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_64/System.Web/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Web.dll

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at MeshCentralRouter.AddPortMapForm.fillNodesInDropDown()
at MeshCentralRouter.AddPortMapForm.AddPortMapForm_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4121.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll

MeshCentralRouter
Assembly Version: 1.0.7400.22784
Win32 Version: 1.0.7400.22784
CodeBase: file:///C:/Users/xxxxxx/Downloads/Temp/MeshCentralRouter.exe

System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4121.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4001.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3761.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3761.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4121.0 built by: NET48REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3761.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.8.3761.0 built by: NET48REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll

System.Web.Extensions
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4075.0
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Web.Extensions/v4.0_4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll

System.Web
Assembly Version: 4.0.0.0
Win32 Version: 4.8.4075.0 built by: NET48REL1LAST
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_64/System.Web/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Web.dll

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

MC Router logging in with no password!!!

So to recreate the issue you can do the following:

  1. Log in to MC
  2. Download and install MC Router
  3. Close newly installed MC Router
  4. Start MC Router from MC by "Router"->"Launch MC Router"
  5. MC Router opens and logging in automatically, which is fine as MC webpage is open and I believe session is live.
  6. Keep MC Router open, and log out from the MC Web Page.
  7. Logout from MC Router.
  8. Now, when clicking on Login on MC Router with and empty password, it is logging in without any problems.
    I already kept MC Router open for a good couple of hours without logging in to MC via any browser, and still can login with no password .............

big quality difference between MCR Remote desktop and browser desktop control

i've been playing with MeshCentral as part of a testing lab. it's all been going pretty well, although i missed having a native desktop control tool. i discovered today that MeshCentralRouter actually contains this functionality (i'd read about the feature set of MCR before, but i thought it was a port forwarding tool).

anyhow - so i'm super happy to see a desktop tool - exactly what i wanted, so i continued to test and play and i've noticed there is a significant difference in video quality between the web desktop and the MCR remote desktop.

initially i thought it was to do with the quality and framerate settings, but even with the quality at 100% and the framerate set to high, it doesn't come close to matching what the web desktop does at 40% and medium.

i can see the method/codec being used is very different between the two. with the MCR remote desktop, i see parts of the screen "wiggling", whereas the web desktop is very stable. when i scroll something like my outlook inbox, the MCR remote desktop updates in big square chunks, whereas i don't see the same on the web desktop.

for quick testing, i brought up one of the meshcentral youtube videos, playing in normal (ie: not fullscreen) view. when i use MCR remote desktop your picture down the bottom left hand corner makes it look like you are wobbling your arms back and forth. again the web desktop doesn't have this issue.

i thought this might be an issue already resolved somewhere. i am running v1.8.8096 which i downloaded from my MeshCentral server using the "Router" link. i went to this page https://meshcentral.com/info/downloads.html and downloaded MeshCentralRouter and this turned out to be v1.3.7704. i tested the remote desktop - same issue.

is there a way to resolve this issue? or perhaps you could include an option to switch between the two encoding methods? i love the concept of using MCR as a desktop native tool (avoids all of the issues with full screening the browser), but it's very hard to remote control machines when the content is wobbling and sometimes becomes unreadable.

i love all the work you've put into this product to date. it's awesome what you've done :-)

cheers, Wiz!!

WebRTC support for MeshCentral Router

MeshCentral Router is great tool and with its increasing usage, more and more traffic will be relayed via MeshCentral Server and increase the server's bandwidth usage and hosting cost.

Just to see if you will consider to make MeshCentral Router to support WebRTC, which can make the MeshCentral Router will try to establish connection with MeshCentral Agent directly first to reduce the server's relay pressure?

I assume that both MeshCentral Router and MeshCentral Agent use your own WebRTC stack and doesn't depend on Chrome or Firefox's WebRTC, which has less WebRTC compatibility issue when transferring P2P data between MeshCentral Router and Againt via WebRTC..

BTW, where can I find the source code of MeshCentral Router? I tried to find in MeshCentral Server and MeshCentral Agent's source code, but no luck. Thanks in advance for the help.

Mouse pointer position always overwrite local mouse movements

Hi,
I do not know is this a Bug or a feature.
When I go over "Remote Desktop" (not RDP) on a destination pc, my pc is constaly overwrite the mousposition on the destination pc. Even when the mouse on the source side is not moving.
So it is impossible to work on the destination side until the connection is closed (or the Remotedektop window has not longer the focus on the source side).

(Enhancement Request) MeshRouter grouping of connections

I think MCR would benefit from mimicking the groups that are present on MC, so that upon opening MCR, you're presented with the groups that the maps are associated to, rather than just a (potentially) long list of connections. When you select the group that you're interested in, then you should see the maps associated to that group and be able to Open / Remove them as necessary.

Feature request: automatic Quality parameter

Hi,

it would be very helpful that the "Remotedesktop" has an option "automatic" for the quality/speed parameters.
qu
That it trys the best quality and the best speed for the actual connction speed.

Or (if automatic is not possible) that it stores the last settings for this pc. So that every pc can have its own setting.
Now I must every time adjust the settings. Different pc has different conncetion speeds. I do not have a very useful default quality/speed setting for ever pc connection.

An autmatic feature would be very very very nice :-)

Doubleclick action combobox is missing RDP item

I noticed when setting the doubleclick action to SSH, it opened RDP.

When I look in below file, I see the items added to the doubleclick combobox in the device settings:

<data name="doubleClickComboBox.Items6" xml:space="preserve">

Item 6 should be RDP and SSH and SCP should be item 7 and 8 according to setDoubleClickDeviceAction on mainform.

private void setDoubleClickDeviceAction()

Request consent + Bar on Router Viewer

May I request same options as in MC2 main webpage, to have them on MC Router when connecting via Router Viewer?

image

I think the best way will be:

  • click on the agent and select "Remote Desktop..."

image

  • When remote desktop viewer is open NO automatic connection to be established and to have a right click on "Connect..." button

image

  • With consent+bar, with consent only, bar only, and no consent at all

Please advise if that is possible and which way it will be better to have this option available.

unable to upload folders only files

Hi,
amazing software with meshcentral but just one nit pick thing,
i cant copy a whole folder over with the remote files,
you have to create the folder on the remote pc first, then go into the folders on local and remote pcs,
then highlight all the files and click the arrow to upload,
this can be annoying if a folder has loads of subfolders!
it would be amazing to upload folders!

Mappings only work for so long

So i have a bit on an issue with router (latest version and previous).

I use router to create remote mappings to enable me to access websites using router as a proxy.

It works lovely at first, but after a while (maybe 30 mins) it stops working, i can get to the homepage of the site I am mapped to, but any pages outside of the home page I get:

image

Anyone else seeing the same ?

Meshcentral Router hanging with 2FA

Using the win32 version of the router, when I have 2FA enabled, it hangs upon startup (had it working once after restarting computer, but not when trying a second time).

When I disable 2FA in meshcentral, all is good and works flawlessly.

Special key combinations don't work in remote desktop

Yes I downloaded and built the newest code last night for the router. I also updated the agent, and meshcentral2 server to the latest public release.
Examples include:
Win + R
Shift + Del (while a file is selected)

Using Application Settings for Custom Builds

Hey all,

I think it would be very nice if we could customize the build of MeshCentralRouter so when it is built the customizations are more-or-less baked into the compiled exe. This would make distribution of the executable easier because it would be a single file and not need any customization files that the end user would see and possibly modify.

Looking through the code, I implemented a simple method of doing this with "Application Settings" that doesn't remove any current functionality.

Basically, things like which buttons to show (install, website, etc...), double-click action, allowing command line args, etc... are controlled through Application scoped settings. The customization options which @Ylianst added with #10 are still there as well, albeit controlled by Application scoped settings. I'll be adding options for hiding the creation of port mappings to prevent the user from doing that themselves as we're mostly going to use Router as a Work from Home tool.

When using this method, a MeshCentralRouter.exe.config file is created on build and output with the exe but it doesn't have to be deployed with the exe. Any settings the developer set are the default settings for the compiled exe. For my purposes, this is okay, although I would like to prevent the use of the config file entirely.

I know there is a MeshCentral issue (3688) to include MeshCentral config options with the exe download so things are done in a single place. I think that's great but Ylianst has said that it would be a big undertaking and it would more than likely result in the use of customization files that have to coexist with the exe.

Ultimately, what I'm after here, is some feedback from @Ylianst and the community on whether what I've come up with is something that would be included in the core. If it is, I'll gladly create a PR. My initial code is here. The biggest reason I think this method would be useful to everyone is that it would mean a developer could customize the compiled exe, provide a single exe to their users, and pull in future changes to Router without having to merge those changes with a heavily customized source code.

Finally, in order for this all to work the way I want, I need to be able to replace the exe that is downloaded from my MeshCentral server and I haven't found where to do that. I know that would mean keeping the version of Router in sync with the version of MeshCentral I'm running but that doesn't seem to be a hard task. Any help in that respect would be very much appreciated.

"Unable to Connect" Error

When running on a device behind a company firewall, I get the error "Unable to Connect"
Everything else works however. I was able to install the agent and otherwise remotely control the device in every other way through the website (Remote Desktop, Files etc)
Something about the way that the MeshCentralRouter tool connects to the server must be on a non standard port that is getting blocked.
Is there any chance that this traffic can use whatever traffic/ports that the mesh agent is already using successfully?
If not, can you please enumerate the ports that need to be opened for a firewall exception policy (unlikely to be approved but worth noting)

image

Implement a way to have a "permanent" port mapping

Currently if I want to open a port, I have to:

  • Open MeshCentral Router
  • Connect using password
  • Find the remote from gui
  • Create the port mapping

I would like instead:

  • Have MeshCentral Router start automatically as a service in the background
  • MeshCentral Router reconnects automatically silently
  • MeshCentral Router remembers the previous port mappings and allows them to persist on restart

MeshCentral Router remember logon for 30 days (2FA)

I haven't found a way to do this so assume it's not available, but it would be great if there was an option for the meshcentral router client to remember a device for 30 days so that 2fa is not required for every login (like the web logon option)

Of course, this not been an option could be deliberate?

MeshCentral Router - map incoming port, not only outgoing

hi, i'm using your meshcentral to manage all the server i have in my customer's site and now i'm studying the Router tool that is Awesome!
i have only a request, at the moment the router is able "only" to map a local port to a remote endpoint; is it possible to improve it to map a remote agent port to a local port? actually i should install the router on both the endpoint to configure a full bidirectional port, but i'm planning to use raspberry as remote "router".
my finall goal is to move all the customer's server in cloud and use the raspberry at the customer site to enable local printers and let the client connect to a local ip (the raspberry's ip) that is forwarded to the cloud server without expose any port directly on internet.

scaling at different percentages causes mouse alignment problem

greetings,

when selecting the screen scaling percentages of: 87.5%, 62.5%, 37.5% or 12.5%, the local on-screen mouse is not aligned with the remote mouse. as you are moving your local mouse across the screen, the actual remote pointer slowly becomes further and further to the right.

the simplest way to illustrate this is to launch paint on the remote machine. it will display the pointer as a dot (for the paint brush) so you can see both your mouse and the remote mouse.

i recently discovered an annoying issue with screen scaling and moving images, and 87.5% appears to resolve the issue, but i can't use the mouse accurately (or multiple monitors).

at 75% and 25%, the actual mouse pointer is down from the local mouse pointer.

at 100% or 50% scaling, everything is perfect.

cheers, Wiz!!

Enhancement request - Split view when more than one screen

May I request please a Split Screen View? In order when client have a two screens and I also have two screens, it will be very useful to have that option.

Let say if we have this:
90166783-a4ea3e80-dd92-11ea-84e1-53131e0fcacd

and once it is selected to have two windows of Router Viewer, one windows for Screen 1, and the second one for screen 2.

If the picture below is achievable - that would be great:

image

In this case on my local PC I will be able to move different remote screens onto different local screens.

Thanks.

Session disconnects after 300 - 317 seconds

When opening a RDP oder SSH Session in MeshCentralRouter it disconnects automatically between after 300 to 317 seconds.
I observed this during a longer RDP-session (like a few hours) and this disconnects are very stable (mostly all 316/317 seconds). This is also discoverable on clients in different home networks.

MyEvents is showing the following: (IPv4 and IPv6 adresses are hidden)
image

RDP is reconnecting automatically causing a black "waiting for recconection" screen for a few seconds. The SSH session (via putty) is terminated permanently.

I'm currently using meshcentral behind a apache reverse proxy. I did a test without the reverse proxy as well by changing my complete setup and have the same behavoir. So I would except the reverse proxy.

It looks like any kind of timeout.

I'm currently running meshcentral 0.5.11 (stable) with MeshCentralRouter 1.0.7416.
I can confirm this bug with meshcentral 0.5.18 and 0.5.19 with MeshCentralCouter 1.0.7416 as well.

In 0.5.19 the Router Version changed to a newer one wich even doesn't want to connect to meshcentral. I guess this might be another bug.

Option to change picture on MC Router ...

MC have lots of option to change pictures and text on it, but what about MC Router? Is there an option to change this text
image
to a customised text????? Possibly MC Router to get this text from a MC that is connected to or from MC where it is downloaded from.....
Thanks.

Question: How to make Router links show up in MC?

I am trying to make MeshCentral Router fly on Linux. But when accessing MC using Firefox or Chromium on Linux, "Router" links do not show up, while they do when using MC in Windows.
I have manually registered the mcrouter:// URI scheme and accessing such URLs from the browsers works fine.

Is it possible to force MC to show Router links, so one may make use of mcrouter:// URLs?

"Forward all keys" setting kills keyboard in remote desktop

I found that I could not make any input via the keyboard in remote desktop via the router. All was working via Browser.

Finally I found the issue in the setting to forward all keys to the remote end:

image

Once I've disabled this setting, the keyboard was working on all remotes.

Enhancement Request:- Save port mappings for re-use

Copied from >> Ylianst/MeshCentral#669

I'd like to save 'active port mappings' for a user.

My plan would be to set the user up on the server as a user with a group.
On their other pc (eg home) , download the meshCentralRouter.exe, and run it.
Logging in (using TFA set in meshcentral), then they would simply need to click the 'open' button for the machine that they want to RDP to.

Ideally the meshcentralrouter settings would be saved and modifiable from the meshcentral server.

Enhancement: WebRTC support for MeshCentral Router

Hi Ylian,

I noticed that you've started to work on MeshCenteral Router enhancement recently,
I used to raise an enhancement request #266 in "MeshCentral" repository last June, and now I realize that I should log it here which is the right place for MeshCentral Routr related request.

Here's the request detail I copied from previous one:

MeshCentral Router is great tool and with its increasing usage, more and more traffic will be relayed via MeshCentral Server and increase the server's bandwidth usage and hosting cost.

Just to see if you will consider to make MeshCentral Router to support WebRTC, which can make the MeshCentral Router will try to establish connection with MeshCentral Agent directly first to reduce the server's relay pressure?

PS, just a thought on the WebRTC support:
MeshCMD has similar functionality on port forwarding as MeshCentral Router. I cannot find the repository of MeshCMD, so just a wild guess that MeshCMD might be also implemented using NodeJS as MeshCentral does which support WebRTC.
If yes and it's easier to implement WebRTC in MeshCMD by reuse NodeJS code from Meshcentral than rewrite in C# to implement WebRTC in MeshCentral Router, please consider to implement WebRTC in MeshCMD then whichever is easier.

Enhancement Request: Naming Port Mapping

Hey Ylianst,
I just want to first say amazing job. Working for Intel and managing a ambitious and well working project such as this KUDOS!

I had one relatively small request is is possible to add a way in the mappings section to give a mapping a "Friendly Name"
I would do it but I really don't have any development software installed ATM, using shared computer >:|

Thanks for reading this have a good one and stay safe.

Enhancements for including in scripts (e.g. SSH ProxyCommand)

I have just started using MeshCentralRouter on Linux as a way of connecting to remote devices with SSH. I do similar things with SSH over cloudflared (formerly argo) tunnels and SSH over SSH.

I was somewhat surprised to find that this is quite simple to do with MeshCentralRouter as well. This is going to make my day job much more efficient. There are just a few small tweaks needed before it's "perfect".

This is what I am using as "ProxyCommand" in my SSH config file:

Host <target hostname>
  user    <username>
  ProxyCommand  bash -c 'PORT=$(freeport); nohup wine Z:\\home\\<username>\\Downloads\\MeshCentralRouter.exe -map:TCP:${PORT}:<name in meshcentral>::22 -tray & loop=1; while [ $loop -gt 0 ]; do socat tcp:127.0.0.1:${PORT} STDIO 2>/dev/tty; loop=$?; sleep 0.5; done' 2>/dev/tty

freeport is another external script that picks a random local listening port number and makes sure it's not in use.

This method is not without quirks though.

I can't see a nice way to detect when MeshCentralRouter.exe has established the connection. I'm running a loop that tries to connect repeatedly until it connects. This will become an infinite loop if the connection never becomes available (e.g. cancelling the MeshCentralRouter.exe login dialogue). It would be awesome if MeshCentralRouter.exe wrote to stdout or to a log some message that indicates that the connection was established. I tried adding the "-debug" command line argument but I couldn't find where the log was written to.

This method starts a new instance of MeshCentralRouter.exe each time I use it. If I'm connecting to multiple servers, I get multiple instances of MeshCentralRouter.exe running and therefore multiple tray icons. It would be great if there was a way to tell an existing running instance of MeshCentralRouter.exe to add another mapping. That would also mean I don't need to re-authenticate with MeshCentral for each connection, just the first. I guess this means having a way to communicate with the running MeshCentralRouter.exe instance (other than by the UI) and having it add a mapping.

Any guidance anyone can offer to help streamline my process?

Launching via mcrouter:// not working on macOS

Environment

macOS 11.1
MeshCentral 0.7.76
MeshCentral Router 0.0.4

Details

Cannot launch MeshRouter from MeshCentral within the browser using the mcrouter:// protocol in macOS.

I took a quick peek into MeshRouter's Info.plist and noticed that the CFBundleURLName and CFBundleURLSchemes parameters required to register a protocol for an app is not present.

Adding the following to Info.plist enabled the correct behavior for me.

	<key>CFBundleURLTypes</key>
	<array>
		<dict>
			<key>CFBundleTypeRole</key>
			<string>Viewer</string>
			<key>CFBundleURLName</key>
			<string>com.meshcentral.router</string>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>mcrouter</string>
			</array>
		</dict>
	</array>

wont show single devices only groups

when assigning a single device in meshcentral, the app is showing a blank screen and no devices

issue started here - Ylianst/MeshCentral#4188

ListViewGroup grp = devicesListView.Groups.Add(devicesListView.Groups.Count.ToString(), node.mesh.name);
this is the line its crashing at it would seem, because we arent sending any groups, only the devices

EDIT: if you send the group with NO RIGHTS it will not crash, HOWEVER it shows ALL devices

UDP relay mapping not working

I am unable to get UDP relay mapping to work. To try to troubleshoot the issue, I set up a UDP mapping to a Windows 10 machine relayed through a second Windows 10 machine. I installed Wireshark on both machines and then tried to send an ASCII string from my Windows 11 machine over the UDP relay mapping. Nothing shows up at the destination machine. At the relay machine, I do see a TLS packet come in from the Meshcentral server, but nothing else. I have no problem making a TCP relay mapping work. And I have no problem making a standard mapping work for TCP or UDP.

Does anyone else have issues with UDP relay mapping, or am I just doing something wrong?

MeshCentralRouter v1.8.8231
MeshCentral v1.0.65

Cant RDP

Ive been getting up to speed with MeshCentral 2

ITs installed on a Win Computer, on a FQDN inc SSL.

On another computer, ive got Mesh Router installed, logged in. All is well.
Click righting on a agent, remote desktop option works fine, just like it does on the web gui of mesh central.

However when trying to setup a RDP it hangs on 'Configuring Remote Connection'

Opening meshrouter with the debug flag, give me this log.
Looks like the connect was open for 3 seconds and then closed.

Can anyone point me in a direction?

13:33:PM.3700: WebSocket: WebSocketClient-SEND-Binary-Len:19
13:33:PM.3730: WebSocket: Websocket got string data, len = 323
ServerData-{"action":"event","event":{"etype":"relay","action":"relaylog","domain":"","userid":"user//matt","username":"matt","msgid":13,"msgArgs":["5257419226804847","192.168.0.1","146.200.65.15"],"msg":"Started relay session "5257419226804847" from 192.168.0.1 to 146.200.65.15","protocol":null,"time":"2022-01-12T13:33:30.986Z"}}
13:33:PM.4189: WebSocket: Websocket got string data, len = 232
ServerData-{"action":"event","event":{"etype":"node","action":"devicesessions","nodeid":"node//nt$yvFmmF@BtiClI8s4RXzsNIMomtnhzXZZiZGWe4OCqytuf5zW4w5r9d4VjNSRi","domain":"","sessions":{"kvm":{"user//matt":1},"tcp":{"user//matt":1}},"nolog":1}}
13:33:PM.9568: WebSocket: Websocket got string data, len = 444
ServerData-{"action":"event","event":{"etype":"relay","action":"relaylog","domain":"","userid":"user//matt","username":"matt","msgid":11,"msgArgs":["23wxftdys9c","192.168.0.1","146.200.65.15",29],"msg":"Ended desktop session "23wxftdys9c" from 192.168.0.1 to 146.200.65.15, 29 second(s)","protocol":2,"nodeid":"node//nt$yvFmmF@BtiClI8s4RXzsNIMomtnhzXZZiZGWe4OCqytuf5zW4w5r9d4VjNSRi","bytesin":182732,"bytesout":179750,"time":"2022-01-12T13:33:33.571Z"}}
13:33:PM.9895: WebSocket: Websocket got string data, len = 209
ServerData-{"action":"event","event":{"etype":"node","action":"devicesessions","nodeid":"node//nt$yvFmmF@BtiClI8s4RXzsNIMomtnhzXZZiZGWe4OCqytuf5zW4w5r9d4VjNSRi","domain":"","sessions":{"tcp":{"user//matt":1}},"nolog":1}}
13:33:PM.8492: WebSocket: Websocket got string data, len = 394
ServerData-{"action":"event","event":{"etype":"relay","action":"relaylog","domain":"","userid":"user//matt","username":"matt","msgid":15,"msgArgs":["h1y9mwn9i3g","192.168.0.1","146.200.65.15"],"msg":"Started desktop session "h1y9mwn9i3g" from 192.168.0.1 to 146.200.65.15","protocol":2,"nodeid":"node//nt$yvFmmF@BtiClI8s4RXzsNIMomtnhzXZZiZGWe4OCqytuf5zW4w5r9d4VjNSRi","time":"2022-01-12T13:33:34.465Z"}}
13:33:PM.8863: WebSocket: Websocket got string data, len = 232
ServerData-{"action":"event","event":{"etype":"node","action":"devicesessions","nodeid":"node//nt$yvFmmF@BtiClI8s4RXzsNIMomtnhzXZZiZGWe4OCqytuf5zW4w5r9d4VjNSRi","domain":"","sessions":{"tcp":{"user//matt":1},"kvm":{"user//matt":1}},"nolog":1}}
13:33:PM.9565: WebSocket: Websocket got string data, len = 401
ServerData-{"action":"event","event":{"etype":"node","action":"agentlog","nodeid":"node//nt$yvFmmF@BtiClI8s4RXzsNIMomtnhzXZZiZGWe4OCqytuf5zW4w5r9d4VjNSRi","domain":"","msg":"Started remote desktop without notification (192.168.0.1)","msgid":36,"remoteaddr":"192.168.0.1","userid":"user//matt","username":"matt","sessionid":"user//matt/6544031773e314a92da50492fa36faf33f38f1fe","time":"2022-01-12T13:33:34.573Z"}}
13:33:PM.8448: WebSocket: Websocket got string data, len = 440
ServerData-{"action":"event","event":{"etype":"relay","action":"relaylog","domain":"","userid":"user//matt","username":"matt","msgid":11,"msgArgs":["h1y9mwn9i3g","192.168.0.1","146.200.65.15",3],"msg":"Ended desktop session "h1y9mwn9i3g" from 192.168.0.1 to 146.200.65.15, 3 second(s)","protocol":2,"nodeid":"node//nt$yvFmmF@BtiClI8s4RXzsNIMomtnhzXZZiZGWe4OCqytuf5zW4w5r9d4VjNSRi","bytesin":59899,"bytesout":57661,"time":"2022-01-12T13:33:38.459Z"}}
13:33:PM.8991: WebSocket: Websocket got string data, len = 209
ServerData-{"action":"event","event":{"etype":"node","action":"devicesessions","nodeid":"node//nt$yvFmmF@BtiClI8s4RXzsNIMomtnhzXZZiZGWe4OCqytuf5zW4w5r9d4VjNSRi","domain":"","sessions":{"tcp":{"user//matt":1}},"nolog":1}}

Meshcentral router Stop working

Dear @Ylianst

I have approximate 6000+ system connected with meshcentral. when i login to meshcentral router application it will automatically close after input my 2F auth code.

The debug file generated showing below errors.

_________________________________________________________________________________________________________________________________-

UnhandledExceptionEventSink: System.ArgumentException: Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
Parameter name: input
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)
at MeshCentralRouter.MeshCentralServer.processServerData(String data)
at MeshCentralRouter.MeshCentralServer.xwebclient.ProcessWsBuffer(Byte[] data, Int32 offset, Int32 len, Int32 op)
at MeshCentralRouter.MeshCentralServer.xwebclient.ProcessBuffer(Byte[] buffer, Int32 offset, Int32 len)
at MeshCentralRouter.MeshCentralServer.xwebclient.OnTlsDataSink(IAsyncResult ar)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Security._SslStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security._SslStream.ReadFrameCallback(AsyncProtocolRequest asyncRequest)
at System.Net.AsyncProtocolRequest.CompleteRequest(Int32 result)
at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes)
at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
UnhandledExceptionEventSink: System.ArgumentException: Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
Parameter name: input
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)
at MeshCentralRouter.MeshCentralServer.processServerData(String data)
at MeshCentralRouter.MeshCentralServer.xwebclient.ProcessWsBuffer(Byte[] data, Int32 offset, Int32 len, Int32 op)
at MeshCentralRouter.MeshCentralServer.xwebclient.ProcessBuffer(Byte[] buffer, Int32 offset, Int32 len)
at MeshCentralRouter.MeshCentralServer.xwebclient.OnTlsDataSink(IAsyncResult ar)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Security._SslStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security._SslStream.ReadFrameCallback(AsyncProtocolRequest asyncRequest)
at System.Net.AsyncProtocolRequest.CompleteRequest(Int32 result)
at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes)
at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

Security tool report MeshCentralRouter is monitring keyboard

Hi @Ylianst ,

Thanks for your excellent work and bring MeshCentralRouter to another level after introduced "Remote Desktop" and "File Manager", which make MeshCentralRouter not only a route tool but a semi MeshCentral client software.

One thing I noticed after I started to use the version with "Remote Desktop" and "File manager" function, some time I got message from my security tool that MeshCentralRouter is monioring the key press, which I didn't get this kind of alert before.
I'm not sure if that key hook is required for cerntain feature, but even I only use the route function that key hook alert still shows up.

Just woud like to check with you if it's global key hook accross programs, or only applies to MeshCentralRouter.
If it's only key hook for MeshCentralRouter only, it's not a problem.
If it's global key hook accross for all programs, it might be good to only start global key hook when needed for certain feature to have less security concern. E.g. if gobal key hook is only required by "Remote Desktop" and not others function(eg. route), the global key hook should be activated when started "Remote Desktop".
Hope it make sense.

Script for automapping of a port

Goodday,

I hope someone can help me with an issue that i am having with the MeshCentralRouter. What i am trying to script (with powershell) is a mapping of a RDP connection without the need for entering a password when it is run. This coudl then also be used to auto-map a port for specific functions or monitoring when there is no vpn access to a location.

Whitin Powershell I use the ConvertFrom-SecureString to save a password file in my script directory and a ConvertTo-SecureString to read it back into a variable to be used when connecting to Meshcentral.

but when i run the script somehow the router does not recognize my password. It looks like it cannot read it form a secure powershell string? Is there a way to fix/work around this or how would you advise me to do this.

My script so far: (I removed my personal information for privacy)
`

This script is used for setting up a remote desktop connection with MeshCentral Router.

Use the command below to generate the password file in the folder (Place this together with this script)

Variables

Set-Location -Path $PSScriptRoot
$hostname = "mesh.example.com"
$username = "[email protected]"
#Password
if (!(Test-Path .\Password.txt)) {
ECHO "ERROR: Password file is not generated... Generating file"
Read-Host "Enter Meshcentral Password" -AsSecureString | ConvertFrom-SecureString | Out-File ".\Password.txt"
$password = Get-Content ".\Password.txt" | ConvertTo-SecureString
}
else {
$password = Get-Content ".\Password.txt" | ConvertTo-SecureString
}
$password

Start the connection to the MeshCentral server

if (!(Test-Path .\MeshCentralRouter.exe)) {
ECHO "Error: MeshCentralRouter.exe was not found. Please download the application from the Meshcentral server before conecting"
BREAK
}
.\MeshCentralRouter.exe -debug
-host:$hostname -user:$username
-pass:$password
`

MeshCentralRouter closes after entering 2-factor token

The application closes without showing any error. From the windows application log:

Toepassing: MeshCentralRouter.exe
Framework-versie: v4.0.30319
Beschrijving: het proces is beëindigd als gevolg van een onverwerkte uitzondering.
Uitzonderingsinformatie: System.NullReferenceException
bij MeshCentralRouter.MeshCentralServer.processServerData(System.String)
bij MeshCentralRouter.MeshCentralServer+xwebclient.ProcessWsBuffer(Byte[], Int32, Int32, Int32)
bij MeshCentralRouter.MeshCentralServer+xwebclient.ProcessBuffer(Byte[], Int32, Int32)
bij MeshCentralRouter.MeshCentralServer+xwebclient.OnTlsDataSink(System.IAsyncResult)
bij System.Net.LazyAsyncResult.Complete(IntPtr)
bij System.Net.LazyAsyncResult.ProtectedInvokeCallback(System.Object, IntPtr)
bij System.Net.Security._SslStream.ProcessFrameBody(Int32, Byte[], Int32, Int32, System.Net.AsyncProtocolRequest)
bij System.Net.Security._SslStream.ReadHeaderCallback(System.Net.AsyncProtocolRequest)
bij System.Net.AsyncProtocolRequest.CompleteRequest(Int32)
bij System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32)
bij System.Net.FixedSizeReader.ReadCallback(System.IAsyncResult)
bij System.Net.LazyAsyncResult.Complete(IntPtr)
bij System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
bij System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
bij System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
bij System.Net.ContextAwareResult.Complete(IntPtr)
bij System.Net.LazyAsyncResult.ProtectedInvokeCallback(System.Object, IntPtr)
bij System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
bij System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)

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.