Coder Social home page Coder Social logo

Comments (5)

TalAloni avatar TalAloni commented on August 20, 2024

Hi James,
I believe that using ports 139 / 445, even if it means running in privileged mode, is the most viable option to get started when using the library on those platforms with limited access to those ports.
If there is indeed a situation where you prefer using other ports (> 1023) and utilize port forwarding, it seems too specific and you should make your own changes to the code, it's not common enough for the library IMO.

from smblibrary.

j4m3z0r avatar j4m3z0r commented on August 20, 2024

Hi Tal,

Thanks for the thoughtful reply. I spent some more time looking at this today and realized that it's really only viable to do port forwarding for Direct TCP mode, since NetBIOS mode requires root permissions for packets sent from the server, which can't easily be forwarded.

The solution I ended up with was just to change DirectTCPPort from a const int to a virtual property. This allows inheriting from the SMBServer class and setting the port very easily, without adding any obfuscation. For what it's worth, I also looked at adding another method in my inherited class to start the server which listens on a different port, but all the fields on SMBServer are private, so that would have been a much more disruptive change.

I'll send a PR, in case you decide that a one line change is acceptable -- feel free to delete it if you like. I'm happy to fork the project if need be, but I'm not sure it's worth it for a one line diff, and this makes it much easier to work with on Unixy systems (eg: my IDE won't load when I launch it as root).

Thanks for such an awesome library! :)

from smblibrary.

TalAloni avatar TalAloni commented on August 20, 2024

Thanks James,
As the one who provide support for the library, I really want to avoid confusion about the SMB protocol.
I locked down the port selection in the first place because I saw too much evidence that programmers are not familiar with the capabilities and limitations of the SMB protocol (which are not easily understandable).
I do see the value in your change, it's practical and useful, but from an educational point of view it works against me.
It seems odd to me that your IDE won't load when launched as root, you should definitely send a PR to them :)
Seriously though, many programs require elevation to perform various functions, and IDEs (including MonoDevelop) generally can run and debug as superuser under Linux.

from smblibrary.

JiGDk7Jb4XpiF25SQ avatar JiGDk7Jb4XpiF25SQ commented on August 20, 2024

Starting in Linux 4.11 you can use sysfs (/proc/sys/net/ipv4/ip_unprivileged_port_start) to override the privileged port range.

from smblibrary.

TalAloni avatar TalAloni commented on August 20, 2024

Hi James,
Thanks again for your valuable feedback, you can now use reflection to override the default port:

System.Reflection.FieldInfo directTCPPortFieldInfo = typeof(SMBLibrary.Server.SMBServer).GetField("DirectTCPPort");
directTCPPortFieldInfo.SetValue(null, 8445);

from smblibrary.

Related Issues (20)

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.