tor-ctrl.sh
上传用户:awang829
上传日期:2019-07-14
资源大小:2356k
文件大小:6k
源码类别:

网络

开发平台:

Unix_Linux

  1. #!/bin/bash
  2. #
  3. # tor-ctrl is a commandline tool for executing commands on a tor server via
  4. # the controlport.  In order to get this to work, add "ControlPort 9051" and
  5. # "CookieAuthentication 1" to your torrc and reload tor.  Or - if you want a
  6. # fixed password - leave out "CookieAuthentication 1" and use the following
  7. # line to create the appropriate HashedControlPassword entry for your torrc
  8. # (you need to change yourpassword, of course):
  9. #
  10. # echo "HashedControlPassword $(tor --hash-password yourpassword | tail -n 1)"
  11. #
  12. # tor-ctrl will return 0 if it was successful and 1 if not, 2 will be returned
  13. # if something (telnet, xxd) is missing.  4 will be returned if it executed
  14. # several commands from a file.
  15. #
  16. # For setting the bandwidth for specific times of the day, I suggest calling
  17. # tor-ctrl via cron, e.g.:
  18. #
  19. # 0 22 * * * /path/to/tor-ctrl -c "SETCONF bandwidthrate=1mb"
  20. # 0 7 * * *  /path/to/tor-ctrl -c "SETCONF bandwidthrate=100kb"
  21. #
  22. # This would set the bandwidth to 100kb at 07:00 and to 1mb at 22:00.  You can
  23. # use notations like 1mb, 1kb or the number of bytes.
  24. #
  25. # Many, many other things are possible, see
  26. #              https://www.torproject.org/svn/trunk/doc/spec/control-spec.txt
  27. #
  28. # Copyright (c) 2007 by Stefan Behte
  29. #
  30. # tor-ctrl is free software; you can redistribute it and/or modify
  31. # it under the terms of the GNU General Public License as published by
  32. # the Free Software Foundation; either version 2 of the License, or
  33. # (at your option) any later version.
  34. #
  35. # tor-ctrl is distributed in the hope that it will be useful,
  36. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  37. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  38. # GNU General Public License for more details.
  39. #
  40. # You should have received a copy of the GNU General Public License
  41. # along with tor-ctrl; if not, write to the Free Software
  42. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  43. #
  44. # Written by Stefan Behte
  45. #
  46. # Please send bugs, comments, wishes, thanks and success stories to:
  47. # Stefan dot Behte at gmx dot net
  48. #
  49. # Also have a look at my page:
  50. # http://ge.mine.nu/
  51. #
  52. # 2007-10-03: First version, only changing bandwidth possible.
  53. # 2007-10-04: Renaming to "tor-ctrl", added a lot of functions, it's now a
  54. #             general-purpose tool.
  55. #             Added control_auth_cookie/controlpassword auth, getopts,
  56. #             program checks, reading from file etc.
  57. VERSION=v1
  58. TORCTLIP=127.0.0.1
  59. TORCTLPORT=9051
  60. TOR_COOKIE="/var/lib/tor/data/control_auth_cookie"
  61. SLEEP_AFTER_CMD=1
  62. VERBOSE=0
  63. usage()
  64. {
  65. cat <<EOF
  66. tor-ctrl $VERSION by Stefan Behte (http://ge.mine.nu)
  67. You should have a look at 
  68. https://www.torproject.org/svn/trunk/doc/spec/control-spec.txt
  69. usage: tor-ctrl [-switch] [variable]
  70.        [-c] [command] = command to execute
  71.                         notice: always "quote" your command
  72.        [-f] [file]    = file to execute commands from
  73.                         notice: only one command per line
  74.        [-a] [path]    = path to tor's control_auth_cookie
  75.                         default: /var/lib/tor/data/control_auth_cookie
  76.                         notice: do not forget to adjust your torrc
  77.        [-s] [time]    = sleep [var] seconds after each command sent
  78.                         default: 1 second
  79.                         notice: for GETCONF, you can use smaller pause times
  80.                         than for SETCONF; this is due to telnet's behaviour.
  81.        [-p] [pwd]     = Use password [var] instead of tor's control_auth_cookie
  82.                         default: not used
  83.                         notice: do not forget to adjust your torrc
  84.                                 
  85.        [-P] [port]     = Tor ControlPort
  86.                         default: 9051
  87.        [-v]           = verbose
  88.                         default: not set
  89.                         notice: the default output is the return code ;)
  90.                         You propably want to set -v when running manually
  91.        Examples:      $0 -c "SETCONF bandwidthrate=1mb"
  92.                       $0 -v -c "GETINFO version"
  93.                       $0 -v -s 0 -P 9051 -p foobar -c "GETCONF bandwidthrate"
  94. EOF
  95. exit 2
  96. }
  97. checkprogs()
  98. {
  99.         programs="telnet"
  100.         if [ "$PASSWORD" = "" ]   
  101.         then
  102.                 # you only need xxd when using control_auth_cookie
  103.                 programs="$programs xxd"
  104.         fi
  105.         for p in $programs
  106.         do
  107.                 which $p &>/dev/null            # are you there?
  108.                 if [ "$?" != "0" ]
  109.                 then
  110.                         echo "$p is missing."
  111.                         exit 2
  112.                 fi
  113.         done
  114. }
  115. sendcmd()
  116. {
  117.         echo "$@"
  118.         sleep ${SLEEP_AFTER_CMD}
  119. }
  120. login()
  121. {
  122.         if [ "$PASSWORD" = "" ]
  123.         then
  124.                 sendcmd "AUTHENTICATE $(xxd -c 32 -g 0 ${TOR_COOKIE} | awk '{print $2}')"
  125.         else
  126.                 sendcmd "AUTHENTICATE "${PASSWORD}""
  127.         fi
  128. }
  129. cmdpipe()
  130. {
  131.         login
  132.         sendcmd "$@"
  133.         sendcmd "QUIT"
  134. }
  135. vecho()
  136. {
  137.         if [ $VERBOSE -ge 1 ]
  138.         then
  139.                 echo "$@"
  140.         fi
  141. }
  142. myecho()
  143. {
  144.         STR=$(cat)
  145.         vecho "$STR"
  146.         echo "$STR" | if [ "$(grep -c ^"250 ")" = 3 ]
  147.         then
  148.                 exit 0
  149.         else
  150.                 exit 1
  151.         fi
  152. }
  153. filepipe()
  154. {
  155.         login
  156.         cat "$1" | while read line
  157.         do
  158.                 sendcmd "$line"
  159.         done
  160.         sendcmd "QUIT"
  161. }
  162. while getopts ":a:c:s:p:P:f:vh" Option
  163. do
  164.         case $Option in
  165.                 a) TOR_COOKIE="${OPTARG}";;
  166.                 c) CMD="${OPTARG}";;
  167.                 s) SLEEP_AFTER_CMD="${OPTARG}";;
  168.                 p) PASSWORD="${OPTARG}";;
  169.                 P) TORCTLPORT="${OPTARG}";;
  170.                 f) FILE="${OPTARG}";;
  171.                 v) VERBOSE=1;;
  172.                 h) usage;;
  173.                 *) usage;;
  174.         esac
  175. done
  176. if [ -e "$FILE" ]
  177. then
  178.         checkprogs
  179.         filepipe "$FILE" | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho
  180.         exit 4
  181. fi
  182. if [ "$CMD" != "" ]
  183. then
  184.         checkprogs
  185.         cmdpipe $CMD | telnet $TORCTLIP $TORCTLPORT 2>/dev/null | myecho
  186. else
  187.         usage
  188. fi