AutoTor
Table of Contents
About the Project
Simple package to make requests throughout Tor in an automated way, with circuit renewal and randomised user-agents. It can be used to easily navigate in an anonymus way or to get information from webs. At the moment, AutoTor is not OS-agnostic as it is tailored to Windows.
Contents
The most important source code elements in the project are outlined and described as follows:
main.py
: Implements an example of how the library should be used.- AutoTor module:
autotor_base.py
: Implements a class that takes care of all the logic to automate Tor download, Tor configuration, Tor initialisation, getting request sessions, Tor circuit renewal and releasing Tor resources.autotor_ip.py
: Implements an example class to override the request function that actually takes care of the requests. In this case, the function tries to get the IP in use by Tor.
Dependencies
Among others, the project has been built around the following Python libraries:
- requests[socks] (>=2.27.1)
- stem (>=1.8.0)
- fake-useragent (>=0.1.11)
Getting Started
Installation
Option 1 - setup.py
To install with pip
by using the setup.py, one should just follow two steps:
- Clone the project:
git clone https://github.com/salvaba94/AutoTor.git
- Run the following command to install the dependencies and AutoTor:
pip install .
Option 2 - PyPI
Installing AutoTor from PyPI is the simplest. It only requires the following command:
pip install autotor
Coding
Create your class
The main class of the package is TorRequests. It is a class with an abstract method request
that should be implemented in any derived class to customise the request as desired by the user. Below is the metacode for a sample implementation
from autotor import TorRequests
class MyClass(TorRequests):
# Override the initialisation function (if needed)
def __init__(self, tor_root = "..", another_arg = 5):
# Initialise superclass
super(MyClass, self).__init__(tor_root = tor_root)
# Initialise other parameters
self.another_arg = another_arg
# Override the request function and implement custom functionality
def request(self):
# Get Tor session
session = self.get_tor_session()
# Renew Tor circuit
self.renew_tor_ip()
# Use the session to get information
...
Note: In order to make the requests with another IP and user-agent just get another session and call the renew method. It is also recommended to randomise the waiting time between requests.
Usage
Once one has implemented the request method in the derived class, it can be used within a with
statement. Any opened resources will be automatically cleared upon exiting the statement.
# Use request within a with statement
with MyClass(tor_root = ".", another_arg = 20) as tor:
tor.request()
Contributing
Any contributions are greatly appreciated. If you have suggestions that would make the project any better, fork the repository and create a pull request or simply open an issue. If you decide to follow the first procedure, here is a reminder of the steps:
- Fork the project.
- Create your branch:
git checkout -b branchname
- Commit your changes:
git commit -m "Add some amazing feature"
- Push to the branch:
git push origin branchname
- Open a pull request.
If you like the project and/or any of its contents results useful to you, don't forget to give it a star in GitHub! It means a lot to me .