Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
The Tor Project
Network Health
sbws
Commits
b5d3fb4f
Commit
b5d3fb4f
authored
Jul 03, 2018
by
juga
Committed by
Matt Traudt
Jul 05, 2018
Browse files
Remove is_controller_ok and log exceptions
parent
43856fdb
Changes
5
Hide whitespace changes
Inline
Side-by-side
sbws/core/scanner.py
View file @
b5d3fb4f
...
...
@@ -347,7 +347,6 @@ def run_speedtest(args, conf):
'exists for sbws developers. It is expected to be broken and may '
'even lead to messed up results.'
,
conf
[
'tor'
][
'control_socket'
])
time
.
sleep
(
15
)
assert
stem_utils
.
is_controller_okay
(
controller
)
rl
=
RelayList
(
args
,
conf
,
controller
)
cb
=
CB
(
args
,
conf
,
controller
,
rl
)
rd
=
ResultDump
(
args
,
conf
,
end_event
)
...
...
sbws/lib/circuitbuilder.py
View file @
b5d3fb4f
from
stem
import
CircuitExtensionFailed
,
InvalidRequest
,
ProtocolError
,
Timeout
from
stem
import
InvalidArguments
import
random
import
sbws.util.stem
as
stem_utils
from
.relaylist
import
Relay
import
logging
...
...
@@ -59,28 +58,30 @@ class CircuitBuilder:
def
get_circuit_path
(
self
,
circ_id
):
c
=
self
.
controller
assert
stem_utils
.
is_controller_okay
(
c
)
circ
=
c
.
get_circuit
(
circ_id
,
default
=
None
)
if
circ
is
None
:
return
None
return
[
relay
[
0
]
for
relay
in
circ
.
path
]
try
:
circ
=
c
.
get_circuit
(
circ_id
,
default
=
None
)
except
Exception
as
e
:
log
.
exception
(
"Exception trying to get circuit: %s."
,
e
)
else
:
return
[
relay
[
0
]
for
relay
in
circ
.
path
]
return
None
def
close_circuit
(
self
,
circ_id
):
c
=
self
.
controller
if
not
stem_utils
.
is_controller_okay
(
c
):
return
if
c
.
get_circuit
(
circ_id
,
default
=
None
):
try
:
c
.
get_circuit
(
circ_id
,
default
=
None
)
try
:
c
.
close_circuit
(
circ_id
)
except
InvalidArguments
:
pass
self
.
built_circuits
.
discard
(
circ_id
)
except
Exception
as
e
:
log
.
exception
(
"Error trying to get circuit to close it: %s."
,
e
)
def
_build_circuit_impl
(
self
,
path
):
if
not
valid_circuit_length
(
path
):
raise
PathLengthException
()
c
=
self
.
controller
assert
stem_utils
.
is_controller_okay
(
c
)
timeout
=
self
.
circuit_timeout
fp_path
=
'['
+
' -> '
.
join
([
p
[
0
:
8
]
for
p
in
path
])
+
']'
log
.
debug
(
'Building %s'
,
fp_path
)
...
...
@@ -92,6 +93,9 @@ class CircuitBuilder:
ProtocolError
,
Timeout
)
as
e
:
log
.
warning
(
e
)
continue
except
Exception
as
e
:
log
.
exception
(
"Exception trying to build circuit: %s."
,
e
)
continue
else
:
return
circ_id
return
None
...
...
@@ -100,14 +104,16 @@ class CircuitBuilder:
c
=
self
.
controller
if
not
self
.
close_circuits_on_exit
:
return
if
not
stem_utils
.
is_controller_okay
(
c
):
return
for
circ_id
in
self
.
built_circuits
:
if
c
.
get_circuit
(
circ_id
,
default
=
None
):
try
:
c
.
get_circuit
(
circ_id
,
default
=
None
)
try
:
c
.
close_circuit
(
circ_id
)
except
InvalidArguments
:
pass
except
Exception
as
e
:
log
.
exception
(
"Exception trying to get circuit to delete: %s"
,
e
)
self
.
built_circuits
.
clear
()
...
...
sbws/lib/relaylist.py
View file @
b5d3fb4f
from
stem.descriptor.router_status_entry
import
RouterStatusEntryV3
from
stem.descriptor.server_descriptor
import
ServerDescriptor
import
sbws.util.stem
as
stem_utils
from
stem
import
Flag
from
stem.util.connection
import
is_valid_ipv4_address
from
stem.util.connection
import
is_valid_ipv6_address
...
...
@@ -25,17 +24,22 @@ class Relay:
'''
assert
isinstance
(
fp
,
str
)
assert
len
(
fp
)
==
40
assert
stem_utils
.
is_controller_okay
(
cont
)
if
ns
is
not
None
:
assert
isinstance
(
ns
,
RouterStatusEntryV3
)
self
.
_ns
=
ns
else
:
self
.
_ns
=
cont
.
get_network_status
(
fp
,
default
=
None
)
try
:
self
.
_ns
=
cont
.
get_network_status
(
fp
,
default
=
None
)
except
Exception
as
e
:
log
.
exception
(
"Exception trying to get ns %s"
,
e
)
if
desc
is
not
None
:
assert
isinstance
(
desc
,
ServerDescriptor
)
self
.
_desc
=
desc
else
:
self
.
_desc
=
cont
.
get_server_descriptor
(
fp
,
default
=
None
)
try
:
self
.
_desc
=
cont
.
get_server_descriptor
(
fp
,
default
=
None
)
except
Exception
as
e
:
log
.
exception
(
"Exception trying to get ns %s"
,
e
)
def
_from_desc
(
self
,
attr
):
if
not
self
.
_desc
:
...
...
@@ -190,9 +194,12 @@ class RelayList:
def
_init_relays
(
self
):
c
=
self
.
_controller
assert
stem_utils
.
is_controller_okay
(
c
)
relays
=
[
Relay
(
ns
.
fingerprint
,
c
,
ns
=
ns
)
for
ns
in
c
.
get_network_statuses
()]
try
:
relays
=
[
Relay
(
ns
.
fingerprint
,
c
,
ns
=
ns
)
for
ns
in
c
.
get_network_statuses
()]
except
Exception
as
e
:
log
.
exception
(
"Exception trying to init relays %s"
,
e
)
return
[]
return
relays
def
_refresh
(
self
):
...
...
sbws/util/stem.py
View file @
b5d3fb4f
...
...
@@ -17,7 +17,6 @@ stream_building_lock = RLock()
def
attach_stream_to_circuit_listener
(
controller
,
circ_id
):
''' Returns a function that should be given to add_event_listener(). It
looks for newly created streams and attaches them to the given circ_id '''
assert
is_controller_okay
(
controller
)
def
closure_stream_event_listener
(
st
):
if
st
.
status
==
'NEW'
and
st
.
purpose
==
'USER'
:
...
...
@@ -28,21 +27,25 @@ def attach_stream_to_circuit_listener(controller, circ_id):
except
(
UnsatisfiableRequest
,
InvalidRequest
)
as
e
:
log
.
warning
(
'Couldn
\'
t attach stream to circ %s: %s'
,
circ_id
,
e
)
except
Exception
as
e
:
log
.
exception
(
"Exception trying to get ns %s"
,
e
)
else
:
pass
return
closure_stream_event_listener
def
add_event_listener
(
controller
,
func
,
event
):
assert
is_controller_okay
(
controller
)
controller
.
add_event_listener
(
func
,
event
)
try
:
controller
.
add_event_listener
(
func
,
event
)
except
Exception
as
e
:
log
.
exception
(
"Exception trying to add event listener %s"
,
e
)
def
remove_event_listener
(
controller
,
func
):
if
not
is_controller_okay
(
controller
)
:
log
.
warning
(
'Controller not okay so not trying to
remove
event
'
)
return
controller
.
remove
_
event
_listener
(
func
)
try
:
controller
.
remove
_
event
_listener
(
func
)
except
Exception
as
e
:
log
.
exception
(
"Exception trying to
remove
event
%s"
,
e
)
def
init_controller
(
port
=
None
,
path
=
None
,
set_custom_stream_settings
=
True
):
...
...
@@ -72,9 +75,11 @@ def init_controller(port=None, path=None, set_custom_stream_settings=True):
def
is_bootstrapped
(
c
):
if
not
is_controller_okay
(
c
):
try
:
line
=
c
.
get_info
(
'status/bootstrap-phase'
)
except
Exception
as
e
:
log
.
exception
(
"Exception bootstrapping %s"
,
e
)
return
False
line
=
c
.
get_info
(
'status/bootstrap-phase'
)
state
,
_
,
progress
,
*
_
=
line
.
split
()
progress
=
int
(
progress
.
split
(
'='
)[
1
])
if
state
==
'NOTICE'
and
progress
==
100
:
...
...
@@ -83,12 +88,6 @@ def is_bootstrapped(c):
return
False
def
is_controller_okay
(
c
):
if
not
c
:
return
False
return
c
.
is_alive
()
and
c
.
is_authenticated
()
def
_init_controller_port
(
port
):
assert
isinstance
(
port
,
int
)
try
:
...
...
@@ -106,6 +105,10 @@ def _init_controller_socket(socket):
c
=
Controller
.
from_socket_file
(
path
=
socket
)
c
.
authenticate
()
except
(
IncorrectSocketType
,
SocketError
):
log
.
debug
(
"Error initting controller socket: socket error."
)
return
None
except
Exception
as
e
:
log
.
exception
(
"Error initting controller socket: %s"
,
e
)
return
None
# TODO: Allow for auth via more than just CookieAuthentication
return
c
...
...
@@ -182,21 +185,26 @@ def launch_tor(conf):
torrc
,
init_msg_handler
=
log
.
debug
,
take_ownership
=
True
)
# And return a controller to it
cont
=
_init_controller_socket
(
conf
[
'tor'
][
'control_socket'
])
assert
is_controller_okay
(
cont
)
# Because we build things by hand and can't set these before Tor bootstraps
cont
.
set_conf
(
'__DisablePredictedCircuits'
,
'1'
)
cont
.
set_conf
(
'__LeaveStreamsUnattached'
,
'1'
)
log
.
info
(
'Started and connected to Tor %s via %s'
,
cont
.
get_version
(),
conf
[
'tor'
][
'control_socket'
])
return
cont
try
:
log
.
info
(
'Started and connected to Tor %s via %s'
,
cont
.
get_version
(),
conf
[
'tor'
][
'control_socket'
])
return
cont
except
Exception
as
e
:
log
.
exception
(
"Exception trying to launch tor %s"
,
e
)
def
get_socks_info
(
controller
):
''' Returns the first SocksPort Tor is configured to listen on, in the form
of an (address, port) tuple '''
assert
is_controller_okay
(
controller
)
socks_ports
=
controller
.
get_listeners
(
Listener
.
SOCKS
)
return
socks_ports
[
0
]
try
:
socks_ports
=
controller
.
get_listeners
(
Listener
.
SOCKS
)
return
socks_ports
[
0
]
except
Exception
as
e
:
log
.
exception
(
"Exception trying to get socks info: %e."
,
e
)
exit
(
1
)
def
only_relays_with_bandwidth
(
controller
,
relays
,
min_bw
=
None
,
max_bw
=
None
):
...
...
@@ -206,7 +214,6 @@ def only_relays_with_bandwidth(controller, relays, min_bw=None, max_bw=None):
min_bw nor max_bw are given, essentially just returns the input list of
relays.
'''
assert
is_controller_okay
(
controller
)
assert
min_bw
is
None
or
min_bw
>=
0
assert
max_bw
is
None
or
max_bw
>=
0
ret
=
[]
...
...
@@ -221,7 +228,6 @@ def only_relays_with_bandwidth(controller, relays, min_bw=None, max_bw=None):
def
circuit_str
(
controller
,
circ_id
):
assert
is_controller_okay
(
controller
)
assert
isinstance
(
circ_id
,
str
)
int
(
circ_id
)
try
:
...
...
@@ -230,6 +236,9 @@ def circuit_str(controller, circ_id):
log
.
warning
(
'Circuit %s no longer seems to exist so can
\'
t return '
'a valid circuit string for it: %s'
,
circ_id
,
e
)
return
None
except
Exception
as
e
:
log
.
exception
(
"Exception trying to get circuit string %s"
,
e
)
return
None
return
'['
+
\
' -> '
.
join
([
'{} ({})'
.
format
(
n
,
fp
[
0
:
8
])
for
fp
,
n
in
circ
.
path
])
+
\
']'
tests/integration/util/test_stem.py
View file @
b5d3fb4f
...
...
@@ -3,5 +3,4 @@ import sbws.util.stem as stem_utils
def
test_launch_and_okay
(
persistent_launch_tor
):
cont
=
persistent_launch_tor
assert
stem_utils
.
is_controller_okay
(
cont
)
assert
stem_utils
.
is_bootstrapped
(
cont
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment