Compare commits
No commits in common. "ruby" and "master" have entirely different histories.
|
@ -1,8 +1,6 @@
|
||||||
PeerTracker - Simple, Efficient and Fast BitTorent Tracker
|
PeerTracker - Simple, Efficient and Fast BitTorent Tracker
|
||||||
--------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
This is a fork from http://code.google.com/p/peertracker/
|
|
||||||
|
|
||||||
|
|
||||||
What Do You Need?
|
What Do You Need?
|
||||||
--------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------
|
||||||
|
@ -126,4 +124,4 @@ Misc Credits:
|
||||||
--------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------
|
||||||
The project icon is (to my knowledge) licensed under the Creative Commons,
|
The project icon is (to my knowledge) licensed under the Creative Commons,
|
||||||
Attribution-Noncommercial-No Derivative Works 3.0. Whomever designed it,
|
Attribution-Noncommercial-No Derivative Works 3.0. Whomever designed it,
|
||||||
feel free to contact me and I will give appropriate credit to said person.
|
feel free to contact me and I will give appropriate credit to said person.
|
8
help.php
8
help.php
|
@ -406,10 +406,10 @@ function setupMySQL()
|
||||||
// we need to locate tracker.mysql.php
|
// we need to locate tracker.mysql.php
|
||||||
// first, try the most obvious location.. which should be in the
|
// first, try the most obvious location.. which should be in the
|
||||||
// same directory as the ./help.php file being ran
|
// same directory as the ./help.php file being ran
|
||||||
if (is_readable('./mysql/tracker.mysql.php'))
|
if (is_readable('./tracker.mysql.php'))
|
||||||
{
|
{
|
||||||
// require
|
// require
|
||||||
require './mysql/tracker.mysql.php';
|
require './tracker.mysql.php';
|
||||||
}
|
}
|
||||||
// unfortunately, it does not seem the file is located in the current
|
// unfortunately, it does not seem the file is located in the current
|
||||||
// directory, we will recurse the paths below and attempt to locate it
|
// directory, we will recurse the paths below and attempt to locate it
|
||||||
|
@ -441,8 +441,6 @@ function setupMySQL()
|
||||||
"`peer_id` binary(20) NOT NULL," .
|
"`peer_id` binary(20) NOT NULL," .
|
||||||
"`compact` binary(6) NOT NULL," .
|
"`compact` binary(6) NOT NULL," .
|
||||||
"`ip` char(15) NOT NULL," .
|
"`ip` char(15) NOT NULL," .
|
||||||
"`as_code` varchar(255) NOT NULL," .
|
|
||||||
"`country` varchar(255) NOT NULL," .
|
|
||||||
"`port` smallint(5) unsigned NOT NULL," .
|
"`port` smallint(5) unsigned NOT NULL," .
|
||||||
"`state` tinyint(1) unsigned NOT NULL DEFAULT '0'," .
|
"`state` tinyint(1) unsigned NOT NULL DEFAULT '0'," .
|
||||||
"`updated` int(10) unsigned NOT NULL," .
|
"`updated` int(10) unsigned NOT NULL," .
|
||||||
|
@ -671,4 +669,4 @@ utilMySQL();
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -1,6 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
// License Information /////////////////////////////////////////////////////////////////////////////
|
// License Information /////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -97,17 +96,11 @@ peertracker::open();
|
||||||
$_GET['info_hash'] = peertracker::$api->escape_sql($_GET['info_hash']);
|
$_GET['info_hash'] = peertracker::$api->escape_sql($_GET['info_hash']);
|
||||||
$_GET['peer_id'] = peertracker::$api->escape_sql($_GET['peer_id']);
|
$_GET['peer_id'] = peertracker::$api->escape_sql($_GET['peer_id']);
|
||||||
|
|
||||||
$json = file_get_contents("http://localhost:4567/as_info/{$_GET['ip']}.json");
|
|
||||||
$parsed_json = json_decode($json);
|
|
||||||
$as_code = $parsed_json->{'as_code'};
|
|
||||||
$country = $parsed_json->{'country'};
|
|
||||||
|
|
||||||
// announce peers
|
// announce peers
|
||||||
// need to pass as_code and country
|
peertracker::peers();
|
||||||
peertracker::peers($as_code, $country);
|
|
||||||
|
|
||||||
// track client
|
// track client
|
||||||
peertracker::event($as_code, $country);
|
peertracker::event();
|
||||||
|
|
||||||
// garbage collection
|
// garbage collection
|
||||||
peertracker::clean();
|
peertracker::clean();
|
||||||
|
@ -115,4 +108,4 @@ peertracker::clean();
|
||||||
// close database
|
// close database
|
||||||
peertracker::close();
|
peertracker::close();
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -1,29 +0,0 @@
|
||||||
|
|
||||||
<?php
|
|
||||||
$_SERVER['tracker'] = array(
|
|
||||||
// general tracker options
|
|
||||||
'open_tracker' => true, /* track anything announced to it */
|
|
||||||
'announce_interval' => 1800, /* how often client will send requests */
|
|
||||||
'min_interval' => 900, /* how often client can force requests */
|
|
||||||
'default_peers' => 50, /* default # of peers to announce */
|
|
||||||
'max_peers' => 100, /* max # of peers to announce */
|
|
||||||
|
|
||||||
// advanced tracker options
|
|
||||||
'external_ip' => true, /* allow client to specify ip address */
|
|
||||||
'force_compact' => false, /* force compact announces only */
|
|
||||||
'full_scrape' => false, /* allow scrapes without info_hash */
|
|
||||||
'random_limit' => 500, /* if peers > #, use alternate SQL RAND() */
|
|
||||||
'clean_idle_peers' => 10, /* tweaks % of time tracker attempts idle peer removal */
|
|
||||||
/* if you have a busy tracker, you may adjust this */
|
|
||||||
/* example: 10 = 10%, 20 = 5%, 50 = 2%, 100 = 1% */
|
|
||||||
// database options
|
|
||||||
'db_host' => 'localhost', /* ip or hostname to mysql server */
|
|
||||||
'db_user' => 'root', /* username used to connect to mysql */
|
|
||||||
'db_pass' => '', /* password used to connect to mysql */
|
|
||||||
'db_name' => 'peertracker', /* name of the PeerTracker database */
|
|
||||||
|
|
||||||
// advanced database options
|
|
||||||
'db_prefix' => 'pt_', /* name prefixes for the PeerTracker tables */
|
|
||||||
'db_persist' => false, /* use persistent connections if available. */
|
|
||||||
);
|
|
||||||
?>
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +0,0 @@
|
||||||
source "http://rubygems.org"
|
|
||||||
|
|
||||||
gem 'activerecord', :require => "active_record"
|
|
||||||
gem 'sinatra'
|
|
||||||
gem 'mysql2'
|
|
||||||
gem "rspec"
|
|
||||||
gem "json"
|
|
|
@ -1,48 +0,0 @@
|
||||||
GEM
|
|
||||||
remote: http://rubygems.org/
|
|
||||||
specs:
|
|
||||||
activemodel (3.2.8)
|
|
||||||
activesupport (= 3.2.8)
|
|
||||||
builder (~> 3.0.0)
|
|
||||||
activerecord (3.2.8)
|
|
||||||
activemodel (= 3.2.8)
|
|
||||||
activesupport (= 3.2.8)
|
|
||||||
arel (~> 3.0.2)
|
|
||||||
tzinfo (~> 0.3.29)
|
|
||||||
activesupport (3.2.8)
|
|
||||||
i18n (~> 0.6)
|
|
||||||
multi_json (~> 1.0)
|
|
||||||
arel (3.0.2)
|
|
||||||
builder (3.0.0)
|
|
||||||
diff-lcs (1.1.3)
|
|
||||||
i18n (0.6.0)
|
|
||||||
json (1.7.4)
|
|
||||||
multi_json (1.3.6)
|
|
||||||
mysql2 (0.3.11)
|
|
||||||
rack (1.4.1)
|
|
||||||
rack-protection (1.2.0)
|
|
||||||
rack
|
|
||||||
rspec (2.11.0)
|
|
||||||
rspec-core (~> 2.11.0)
|
|
||||||
rspec-expectations (~> 2.11.0)
|
|
||||||
rspec-mocks (~> 2.11.0)
|
|
||||||
rspec-core (2.11.1)
|
|
||||||
rspec-expectations (2.11.2)
|
|
||||||
diff-lcs (~> 1.1.3)
|
|
||||||
rspec-mocks (2.11.1)
|
|
||||||
sinatra (1.3.2)
|
|
||||||
rack (~> 1.3, >= 1.3.6)
|
|
||||||
rack-protection (~> 1.2)
|
|
||||||
tilt (~> 1.3, >= 1.3.3)
|
|
||||||
tilt (1.3.3)
|
|
||||||
tzinfo (0.3.33)
|
|
||||||
|
|
||||||
PLATFORMS
|
|
||||||
ruby
|
|
||||||
|
|
||||||
DEPENDENCIES
|
|
||||||
activerecord
|
|
||||||
json
|
|
||||||
mysql2
|
|
||||||
rspec
|
|
||||||
sinatra
|
|
|
@ -1,4 +0,0 @@
|
||||||
#! /usr/bin/ruby
|
|
||||||
require File.join(File.dirname(__FILE__),'../lib/as_info.rb')
|
|
||||||
|
|
||||||
Peertracker::ASInfo.set_as_info
|
|
|
@ -1,7 +0,0 @@
|
||||||
Bundler.require
|
|
||||||
require File.join(File.dirname(__FILE__),'../lib/as_info.rb')
|
|
||||||
|
|
||||||
get '/as_info/:ip_address.json' do |ip_address|
|
|
||||||
response = Peertracker::ASInfo.new.set_as_info_for_ip(ip_address)
|
|
||||||
{:as_code => response[0], :country => response[1]}.to_json
|
|
||||||
end
|
|
|
@ -1,2 +0,0 @@
|
||||||
require './bin/web_interface.rb'
|
|
||||||
run Sinatra::Application
|
|
|
@ -1,7 +0,0 @@
|
||||||
ActiveRecord::Base.establish_connection(
|
|
||||||
:adapter => "mysql2",
|
|
||||||
:host => "localhost",
|
|
||||||
:username => "root",
|
|
||||||
:password => "",
|
|
||||||
:database => "peertracker"
|
|
||||||
)
|
|
|
@ -1,16 +0,0 @@
|
||||||
Bundler.require
|
|
||||||
require File.join(File.dirname(__FILE__), "database.rb")
|
|
||||||
|
|
||||||
class AddASInfoToPeers < ActiveRecord::Migration
|
|
||||||
def up
|
|
||||||
add_column :pt_peers, :as_code, :string
|
|
||||||
add_column :pt_peers, :country, :string
|
|
||||||
end
|
|
||||||
|
|
||||||
def down
|
|
||||||
remove_column :pt_peers, :as_code
|
|
||||||
remove_column :pt_peers, :country
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
AddASInfoToPeers.new.up
|
|
|
@ -1,32 +0,0 @@
|
||||||
Bundler.require
|
|
||||||
require File.join(File.dirname(__FILE__), "../config/database.rb")
|
|
||||||
require File.join(File.dirname(__FILE__), "./model/peer.rb")
|
|
||||||
require File.join(File.dirname(__FILE__), "./url_creator.rb")
|
|
||||||
require File.join(File.dirname(__FILE__), "./http_request.rb")
|
|
||||||
require File.join(File.dirname(__FILE__), "./whois_request.rb")
|
|
||||||
require File.join(File.dirname(__FILE__), "./as_parser.rb")
|
|
||||||
|
|
||||||
module Peertracker
|
|
||||||
class ASInfo
|
|
||||||
def set_as_info_for_ip(ip_address)
|
|
||||||
raw_code = WhoisRequest.new.get_as_info(ip_address)
|
|
||||||
raw_country = WhoisRequest.new.get_country_info(ip_address)
|
|
||||||
ASParser.new.parse_response(raw_code, raw_country)
|
|
||||||
end
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def set_as_info
|
|
||||||
Peer.without_as_info.each do |peer|
|
|
||||||
begin
|
|
||||||
puts "Parsing #{peer.ip}"
|
|
||||||
peer.as_code, peer.country = self.new.set_as_info_for_ip(peer.ip)
|
|
||||||
peer.save
|
|
||||||
rescue => e
|
|
||||||
puts "Could not fetch AS for #{peer.ip}"
|
|
||||||
puts "#{e.to_s}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,23 +0,0 @@
|
||||||
class ASParser
|
|
||||||
def parse_response(raw_code, raw_country)
|
|
||||||
[parse_as(raw_code),parse_country(raw_country)]
|
|
||||||
end
|
|
||||||
|
|
||||||
def parse_as(raw_code)
|
|
||||||
begin
|
|
||||||
raw_code.scan(/origin:\s*([A-Z0-9]*)\s/i)[0][0]
|
|
||||||
rescue => e
|
|
||||||
puts "Could not parse AS"
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def parse_country(raw_country)
|
|
||||||
begin
|
|
||||||
raw_country.scan(/country:\s*([A-Z0-9]*)\s/i)[0][0]
|
|
||||||
rescue => e
|
|
||||||
puts "Could not parse Country"
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Peertracker
|
|
||||||
class HTTPRequest
|
|
||||||
def initialize(host, path = "")
|
|
||||||
@host = host
|
|
||||||
@path = path
|
|
||||||
end
|
|
||||||
|
|
||||||
def perform_request
|
|
||||||
uri = URI("http://#{@host}#{@path}/")
|
|
||||||
response = Net::HTTP.get_response(uri)
|
|
||||||
response.body
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,5 +0,0 @@
|
||||||
class Peer < ActiveRecord::Base
|
|
||||||
self.table_name = "pt_peers"
|
|
||||||
self.primary_key = "peer_id"
|
|
||||||
scope :without_as_info, lambda{ where("pt_peers.as_code IS NULL") }
|
|
||||||
end
|
|
|
@ -1,18 +0,0 @@
|
||||||
require "net/http"
|
|
||||||
|
|
||||||
module Peertracker
|
|
||||||
class URLCreator
|
|
||||||
def initialize(url_host, ip_address)
|
|
||||||
@ip_address = ip_address
|
|
||||||
@url_host = url_host
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_subdomain
|
|
||||||
"%02x%02x%02x%02x" % @ip_address.scan(/(.*)\.(.*)\.(.*)\.(.*)/)[0]
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_url
|
|
||||||
"#{create_subdomain}.#{@url_host}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,11 +0,0 @@
|
||||||
module Peertracker
|
|
||||||
class WhoisRequest
|
|
||||||
def get_as_info(ip_address)
|
|
||||||
`whois -h whois.radb.net #{ip_address}`
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_country_info(ip_address)
|
|
||||||
`whois -h whois.lacnic.net #{ip_address}`
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,20 +0,0 @@
|
||||||
require File.join(File.dirname(__FILE__), "../../spec/spec_helper.rb")
|
|
||||||
|
|
||||||
describe "ASInfo" do
|
|
||||||
context "when given IP address" do
|
|
||||||
describe "sets as info for ip address" do
|
|
||||||
let(:ip_address) {"12.12.12.12"}
|
|
||||||
|
|
||||||
it "stores as_info to database" do
|
|
||||||
ASInfo.new.set_as_info_for_ip(ip_address)
|
|
||||||
Peer.find_by_ip_address(ip_address).as.should_not be_null
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe ".set_as_info" do
|
|
||||||
it "stores as info for all addresses"
|
|
||||||
ASInfo.set_as_info
|
|
||||||
Peer.all.each {|peer| peer.as.should_not be_null}
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1 +0,0 @@
|
||||||
require File.join(File.dirname(__FILE__), "../lib/as_info.rb")
|
|
Loading…
Reference in New Issue
Block a user