instabot 0.1.73 → 0.1.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b5a4f1641bd00040c9f7e813eadc920184ac9cbe
4
- data.tar.gz: dbef1f5c1960256dd80f01ab50db3623ffc3004c
3
+ metadata.gz: 2ef6db5c38e62a1e5a352d8e88e60c001920e8a2
4
+ data.tar.gz: b927e8656eea81c622e75fa5cb953b9f740e544f
5
5
  SHA512:
6
- metadata.gz: 40f46b5e5a278930c6ee4e96785e2db3d43db02f7ed0b4306e975b39942ee8f5ecb325f1f71db7479e50d342867515778f576b9ea731edb69cc37403c2e32b5d
7
- data.tar.gz: 619d455f64c0e32bcf92a97b9d3ad6880371c198f95daa644d8674620a309bd49ec2924c17239e9cbd161d90e77cc5d065ad97839e93b1f4ec3561d7d7d1d345
6
+ metadata.gz: f55cf8bd4541db3d03e34c76cfff534910d0aec44749063f3a8b4af4c3fb83c20fa5752ee9e1eede78d4019cf802a7fe4f728ca393aaf09f7390a79043b582b9
7
+ data.tar.gz: 966b141b4c034c5bffe6ba23af9de88e22836efdfaceeaacc3d2e23658bfc50cc739de8f79b23c06d2019f038de85e9ceafef97263e909a0e35006979d859d17
@@ -1,4 +1,5 @@
1
1
  require_relative 'instabot/create_protocol'
2
+ require_relative 'instabot/tor_protocol'
2
3
  require_relative 'instabot/version'
3
4
  require_relative 'instabot/actions'
4
5
  require_relative 'instabot/grabber'
@@ -13,7 +13,8 @@ module Config
13
13
  attr_accessor :username, :password, :tags, :use_proxy, :proxy, :comments,
14
14
  :print_banner, :pre_load, :wait_per_action, :infinite_tags,
15
15
  :max_like_per_day, :max_follow_per_day, :max_unfollow_per_day,
16
- :max_comment_per_day, :unwanted_list, :white_list_users,:log_status
16
+ :max_comment_per_day, :unwanted_list, :white_list_users,
17
+ :log_status, :use_tor
17
18
  def initialize
18
19
  @wait_per_action = 1 * 60
19
20
  @max_comment_per_day = 50
@@ -29,6 +30,7 @@ module Config
29
30
  @print_banner = true
30
31
  @log_status = true
31
32
  @use_proxy = false
33
+ @use_tor = false
32
34
  @tags = []
33
35
  @unwanted_list = []
34
36
  @white_list_users = []
@@ -3,7 +3,7 @@
3
3
  # @Authors eVanilla + https://github.com/eVanilla/instabot.rb/graphs/contributors
4
4
  #
5
5
 
6
- %w[colorize mechanize io/console hashie json logger pp active_support/core_ext/numeric/time rbconfig].each { |gem| require gem }
6
+ %w[colorize mechanize io/console hashie json logger pp active_support/core_ext/numeric/time rbconfig net/telnet socksify socksify/http].each { |gem| require gem }
7
7
 
8
8
  # main core class
9
9
  class Instabot
@@ -18,6 +18,7 @@ class Instabot
18
18
  include Login
19
19
  include Log
20
20
  include Protocol
21
+ include TorProtocol
21
22
 
22
23
  attr_accessor :users, :medias, :media_information, :user_information
23
24
 
@@ -73,6 +74,7 @@ class Instabot
73
74
  tags: Config.options.tags,
74
75
  unwanted_list: Config.options.unwanted_list,
75
76
  use_proxy: Config.options.use_proxy,
77
+ use_tor: Config.options.use_tor,
76
78
  wait_per_action: Config.options.wait_per_action,
77
79
  white_list_users: Config.options.white_list_users,
78
80
  log_status: Config.options.log_status
@@ -94,7 +96,7 @@ class Instabot
94
96
  check_log_files
95
97
  log('log files are checked', 'CORE')
96
98
  log('Machine started', 'CORE')
97
- create_mechanic
99
+ create_protocol
98
100
  puts '[+] '.cyan + 'Processing successfully completed'
99
101
  log('Processing successfully completed', 'CORE')
100
102
  unless mode != :default
@@ -1,5 +1,8 @@
1
1
  module Protocol
2
- def create_mechanic
2
+ def create_protocol
3
+ if options[:use_tor]
4
+ @tor = TorProtocol::Tor.new
5
+ end
3
6
  @agent = Mechanize.new
4
7
  @agent.max_history = 2
5
8
  # @agent.ca_file = './cacert.pem' # Because i use windows and... you know... ._.
@@ -12,6 +15,11 @@ module Protocol
12
15
  @agent.set_proxy(proxy[0], proxy[1].to_i, proxy[2], proxy[3])
13
16
  end
14
17
  end
18
+
19
+ if options[:use_tor]
20
+ @agent.agent.set_socks('localhost', 9050)
21
+ log('tor has been started', 'CREATE_PROTOCOL')
22
+ end
15
23
 
16
24
  puts 'PROCESSING: '.cyan.bold + 'protocol created'
17
25
  log('Protocol successfully created', 'CREATE_PROTOCOL')
@@ -0,0 +1,81 @@
1
+ require 'mechanize'
2
+ module TorProtocol
3
+ class Tor
4
+ # debug
5
+ # Socksify::debug = true
6
+
7
+ def initialize(control_port='9051',socks_port='9050')
8
+ puts '[+] '.cyan + "[TOR] STARTED"
9
+ @tor_control_port = control_port
10
+ @tor_socks_port = socks_port
11
+ TCPSocket::socks_server = "127.0.0.1"
12
+ TCPSocket::socks_port = @tor_socks_port
13
+ puts '[+] '.cyan + "[TOR] current ip [#{current_ip.yellow}]"
14
+ end
15
+
16
+ def current_ip
17
+ a = Mechanize.new
18
+ a.user_agent_alias = 'Mac Safari'
19
+ return a.get('http://www.myexternalip.com/raw').body.chomp
20
+ rescue Exception => e
21
+ puts "error getting ip: #{e.class} #{e.message}\n#{e.backtrace.inspect}".red
22
+ # break
23
+ # puts "An error occured ... #{e.class} #{e.message}\n#{e.backtrace.inspect}\n[ignored]"
24
+ end
25
+
26
+ def get_new_ip
27
+ puts '[+] '.cyan + "[TOR] trying to get a new ip address.."
28
+ old_ip_address = current_ip
29
+ tor_switch_endpoint
30
+ sleep 10
31
+ new_ip_address = current_ip
32
+ if (old_ip_address != new_ip_address)
33
+ puts '[+] '.cyan + "[TOR] ip changed from [#{old_ip_address.yellow}] to [#{new_ip_address.yellow}]"
34
+ return true
35
+ else
36
+ puts '[+] '.yellow + "[TOR] ip same [#{old_ip_address}]"
37
+ get_new_ip
38
+ end
39
+ end
40
+
41
+ def tor_switch_endpoint
42
+ # puts "tor_switch_endpoint.."
43
+ tor_protocol = Net::Telnet::new("Host" => "localhost", "Port" => "#{@tor_control_port}", "Timeout" => 10, "Prompt" => /250 OK\n/)
44
+ tor_protocol.cmd('AUTHENTICATE ""') { |c| throw "Cannot authenticate to Tor" if c != "250 OK\n" }
45
+ tor_protocol.cmd('signal NEWNYM') { |c| throw "Cannot switch Tor to new route" if c != "250 OK\n" }
46
+ tor_protocol.close
47
+ end
48
+
49
+ end
50
+ end
51
+
52
+
53
+ class Mechanize::HTTP::Agent
54
+ public
55
+ def set_socks addr, port
56
+ set_http unless @http
57
+ class << @http
58
+ attr_accessor :socks_addr, :socks_port
59
+
60
+ def http_class
61
+ Net::HTTP.SOCKSProxy(socks_addr, socks_port)
62
+ end
63
+ end
64
+ @http.socks_addr = addr
65
+ @http.socks_port = port
66
+ end
67
+ end
68
+
69
+ # tor = Tor.new
70
+ # agent = Mechanize.new
71
+ # agent.agent.set_socks('localhost', 9050)
72
+ # 3.times do |i|
73
+ # puts "##{i}"
74
+ # page = agent.get('http://myexternalip.com/raw')
75
+ # puts "Body << #{page.body.chomp}..."
76
+ # tor.get_new_ip
77
+ # end
78
+
79
+
80
+
81
+
@@ -1,5 +1,5 @@
1
1
  module Version
2
- VERSION = '0.1.73'.freeze
2
+ VERSION = '0.1.75'.freeze
3
3
  SUMMARY = 'Ruby instagram bot'.freeze
4
4
  DESCRIPTION = 'An instagram bot works without instagram api, only needs your username and password'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instabot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.73
4
+ version: 0.1.75
5
5
  platform: ruby
6
6
  authors:
7
7
  - eVanilla
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-19 00:00:00.000000000 Z
11
+ date: 2017-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -144,6 +144,7 @@ files:
144
144
  - lib/instabot/logger.rb
145
145
  - lib/instabot/login.rb
146
146
  - lib/instabot/modes.rb
147
+ - lib/instabot/tor_protocol.rb
147
148
  - lib/instabot/version.rb
148
149
  homepage: https://github.com/eVanilla/instabot.rb
149
150
  licenses: