#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File name : setup.py
# Author : Podalirius (@podalirius_)
# Date created : 23 may 2024
import setuptools
VERSION = "2.1.6"
long_description = """
smbclient-ng, a fast and user friendly way to interact with SMB shares.
## Features
- [x] `bat`: Pretty prints the contents of a file. Syntax: `bat `
- [x] `cat`: Get the contents of a file. Syntax: `cat `
- [x] `cd`: Change the current working directory. Syntax: `cd `
- [x] `close`: Closes the SMB connection to the remote machine. Syntax: `close`
- [x] `connect`: Connect to the remote machine (useful if connection timed out). Syntax: `connect`
- [x] `dir`: List the contents of the current working directory. Syntax: `dir`
- [x] `exit`: Exits the smbclient-ng script. Syntax: `exit`
- [x] `get`: Get a remote file. Syntax: `get [-r] `
- [x] `help`: Displays this help message. Syntax: `help`
- [x] `info`: Get information about the server and or the share. Syntax: `info [server|share]`
- [x] `lbat`: Pretty prints the contents of a local file. Syntax: `lbat `
- [x] `lcat`: Print the contents of a local file. Syntax: `lcat `
- [x] `lcd`: Changes the current local directory. Syntax: `lcd `
- [x] `lcp`: Create a copy of a local file. Syntax: `lcp `
- [x] `lls`: Lists the contents of the current local directory. Syntax: `lls`
- [x] `lmkdir`: Creates a new local directory. Syntax: `lmkdir `
- [x] `lpwd`: Shows the current local directory. Syntax: `lpwd`
- [x] `lrename`: Renames a local file. Syntax: `lrename `
- [x] `lrm`: Removes a local file. Syntax: `lrm `
- [x] `lrmdir`: Removes a local directory. Syntax: `lrmdir `
- [x] `ls`: List the contents of the current remote working directory. Syntax: `ls`
- [x] `ltree`: Displays a tree view of the local directories. Syntax: `ltree [directory]`
- [x] `mkdir`: Creates a new remote directory. Syntax: `mkdir `
- [x] `module`: Loads a specific module for additional functionalities. Syntax: `module `
- [x] `mount`: Creates a mount point of the remote share on the local machine. Syntax: `mount `
- [x] `put`: Put a local file or directory in a remote directory. Syntax: `put [-r] `
- [x] `reconnect`: Reconnect to the remote machine (useful if connection timed out). Syntax: `reconnect`
- [x] `reset`: Reset the TTY output, useful if it was broken after printing a binary file on stdout. Syntax: `reset`
- [x] `rm`: Removes a remote file. Syntax: `rm `
- [x] `rmdir`: Removes a remote directory. Syntax: `rmdir `
- [x] `sessions`: Manage the SMB sessions. Syntax: `sessions [interact|create|delete|execute|list]`
- [x] `shares`: Lists the SMB shares served by the remote machine. Syntax: `shares`
- [x] `sizeof`: Recursively compute the size of a folder. Syntax: `sizeof [directory|file]`
- [x] `tree`: Displays a tree view of the remote directories. Syntax: `tree [directory]`
- [x] `umount`: Removes a mount point of the remote share on the local machine. Syntax: `umount `
- [x] `use`: Use a SMB share. Syntax: `use `
## Install
To install `smbclient-ng`, you can use pip. Run the following command in your terminal:
```
python3 -m pip install smbclientng
```
## Demonstration

## Usage
```
$ ./smbclient-ng.py
_ _ _ _
___ _ __ ___ | |__ ___| (_) ___ _ __ | |_ _ __ __ _
/ __| '_ ` _ \| '_ \ / __| | |/ _ \ '_ \| __|____| '_ \ / _` |
\__ \ | | | | | |_) | (__| | | __/ | | | ||_____| | | | (_| |
|___/_| |_| |_|_.__/ \___|_|_|\___|_| |_|\__| |_| |_|\__, |
by @podalirius_ v2.1.5 |___/
usage: smbclient-ng.py [-h] [--debug] [--no-colors] [-S startup_script] [-N] [-L LOGFILE] --host HOST [--port PORT] [--kdcHost FQDN KDC] [-d DOMAIN] [-u USER] [--no-pass | -p [PASSWORD] | -H [LMHASH:]NTHASH | --aes-key hex key] [-k]
smbclient-ng, a fast and user friendly way to interact with SMB shares.
options:
-h, --help show this help message and exit
--debug Debug mode.
--no-colors No colors mode.
-S startup_script, --startup-script startup_script
File containing the list of commands to be typed at start of the console.
-N, --not-interactive
Non interactive mode.
-L LOGFILE, --logfile LOGFILE
File to write logs to.
Target:
--host HOST IP address or hostname of the SMB Server to connect to.
--port PORT Port of the SMB Server to connect to. (default: 445)
Authentication & connection:
--kdcHost FQDN KDC FQDN of KDC for Kerberos.
-d DOMAIN, --domain DOMAIN
(FQDN) domain to authenticate to.
-u USER, --user USER User to authenticate with.
--no-pass Don't ask for password (useful for -k).
-p [PASSWORD], --password [PASSWORD]
Password to authenticate with.
-H [LMHASH:]NTHASH, --hashes [LMHASH:]NTHASH
NT/LM hashes, format is LMhash:NThash.
--aes-key hex key AES key to use for Kerberos Authentication (128 or 256 bits).
-k, --kerberos Use Kerberos authentication. Grabs credentials from .ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command line.
```
## Quick win commands
+ Connect to a remote SMB server:
```
./smbclient-ng.py -d "LAB" -u "Administrator" -p 'Admin123!' --host "10.0.0.201"
```
## Contributing
Pull requests are welcome. Feel free to open an issue if you want to add other features.
""".strip()
with open("requirements.txt", "r", encoding="utf-8") as f:
requirements = [x.strip() for x in f.readlines()]
setuptools.setup(
name="smbclientng",
version=VERSION,
description="smbclient-ng, a fast and user friendly way to interact with SMB shares.",
url="https://github.com/p0dalirius/smbclient-ng",
author="Podalirius",
long_description=long_description,
long_description_content_type="text/markdown",
author_email="podalirius@protonmail.com",
packages=["smbclientng", "smbclientng.core", "smbclientng.modules"],
package_data={'smbclientng': ['smbclientng/']},
include_package_data=True,
license="GPL3",
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
install_requires=requirements,
entry_points={
'console_scripts': [
'smbclientng=smbclientng.__main__:main',
'smbng=smbclientng.__main__:main'
]
}
)