mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-13 10:30:16 +00:00
tor: Reimplement getting ports in Python
This commit is contained in:
parent
36adc84b5d
commit
3d5f68381d
51
actions/tor
51
actions/tor
@ -22,11 +22,16 @@ Configuration helper for the Tor service
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import codecs
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
|
import socket
|
||||||
|
|
||||||
from plinth import action_utils
|
from plinth import action_utils
|
||||||
|
|
||||||
TOR_CONFIG = '/etc/tor/torrc'
|
TOR_CONFIG = '/etc/tor/torrc'
|
||||||
|
TOR_STATE_FILE = '/var/lib/tor/state'
|
||||||
|
TOR_AUTH_COOKIE = '/var/run/tor/control.authcookie'
|
||||||
|
|
||||||
|
|
||||||
def parse_arguments():
|
def parse_arguments():
|
||||||
@ -34,20 +39,12 @@ def parse_arguments():
|
|||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
|
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
|
||||||
|
|
||||||
# Enable and start the service
|
|
||||||
subparsers.add_parser('enable', help='Enable and start Tor service')
|
subparsers.add_parser('enable', help='Enable and start Tor service')
|
||||||
|
|
||||||
# Disable and stop the service
|
|
||||||
subparsers.add_parser('disable', help='Disable and stop Tor service')
|
subparsers.add_parser('disable', help='Disable and stop Tor service')
|
||||||
|
|
||||||
# Get currently configured Tor hidden service information
|
|
||||||
subparsers.add_parser('get-hs', help='Get hidden service')
|
subparsers.add_parser('get-hs', help='Get hidden service')
|
||||||
|
|
||||||
# Enable Tor hidden service
|
|
||||||
subparsers.add_parser('enable-hs', help='Enable hidden service')
|
subparsers.add_parser('enable-hs', help='Enable hidden service')
|
||||||
|
|
||||||
# Disable Tor hidden service
|
|
||||||
subparsers.add_parser('disable-hs', help='Disable hidden service')
|
subparsers.add_parser('disable-hs', help='Disable hidden service')
|
||||||
|
subparsers.add_parser('get-ports', help='Get list of Tor ports')
|
||||||
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
@ -146,6 +143,42 @@ def get_hidden_service():
|
|||||||
return hs_hostname + ' ' + ','.join(hs_ports)
|
return hs_hostname + ' ' + ','.join(hs_ports)
|
||||||
|
|
||||||
|
|
||||||
|
def subcommand_get_ports(_):
|
||||||
|
"""Return a list of running Tor ports."""
|
||||||
|
try:
|
||||||
|
print('orport', _get_orport())
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
with open(TOR_STATE_FILE, 'r') as state_file:
|
||||||
|
for line in state_file:
|
||||||
|
matches = re.match(r'^\s*TransportProxy\s+(\S*)\s+\S+:(\d+)\s*$',
|
||||||
|
line)
|
||||||
|
if matches:
|
||||||
|
print('{0} {1}'.format(matches.group(1), matches.group(2)))
|
||||||
|
|
||||||
|
|
||||||
|
def _get_orport():
|
||||||
|
"""Return the ORPort by querying running instance."""
|
||||||
|
cookie = open(TOR_AUTH_COOKIE, 'rb').read()
|
||||||
|
cookie = codecs.encode(cookie, 'hex').decode()
|
||||||
|
|
||||||
|
commands = '''AUTHENTICATE {cookie}
|
||||||
|
GETINFO net/listeners/or
|
||||||
|
QUIT
|
||||||
|
'''.format(cookie=cookie)
|
||||||
|
|
||||||
|
tor_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
tor_socket.connect(('localhost', 9051))
|
||||||
|
tor_socket.send(commands.encode())
|
||||||
|
response = tor_socket.recv(1024)
|
||||||
|
tor_socket.close()
|
||||||
|
|
||||||
|
line = response.split(b'\r\n')[1].decode()
|
||||||
|
matches = re.match(r'.*="[^:]+:(\d+)"', line)
|
||||||
|
return matches.group(1)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""Parse arguments and perform all duties"""
|
"""Parse arguments and perform all duties"""
|
||||||
arguments = parse_arguments()
|
arguments = parse_arguments()
|
||||||
|
|||||||
@ -1,28 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# This file is part of Plinth.
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Action to get ports used by Tor.
|
|
||||||
|
|
||||||
echo "ORPort" `tor-get-orport`
|
|
||||||
|
|
||||||
transports="obfs3 scramblesuit"
|
|
||||||
for transport in $transports
|
|
||||||
do
|
|
||||||
echo $transport `grep $transport /var/lib/tor/state | awk -F'[: ]*' '{print $4}'`
|
|
||||||
done
|
|
||||||
@ -73,7 +73,7 @@ def index(request):
|
|||||||
|
|
||||||
def get_status():
|
def get_status():
|
||||||
"""Return the current status"""
|
"""Return the current status"""
|
||||||
output = actions.superuser_run('tor-get-ports')
|
output = actions.superuser_run('tor', ['get-ports'])
|
||||||
port_info = output.split('\n')
|
port_info = output.split('\n')
|
||||||
ports = {}
|
ports = {}
|
||||||
for line in port_info:
|
for line in port_info:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user