Skip to content

Instantly share code, notes, and snippets.

@rafapolo
Created April 25, 2010 15:04
Show Gist options
  • Save rafapolo/378464 to your computer and use it in GitHub Desktop.
Save rafapolo/378464 to your computer and use it in GitHub Desktop.
Esse script gera um grafo dos semeadores de um dado torrent por país
# Esse script gera um grafo dos semeadores de um dado torrent por país
#!ruby19
# encoding: utf8
# author: Rafael Polo
# created_at 25.abr.2010
require 'rubygems'
require 'rubytorrent'
require 'timeout'
require 'geoip'
require "graphviz"
torrent_file = "http://torrents.thepiratebay.org/5434382/Alice_In_Wonderland_2010_TS_XViD_-_IMAGiNE%5BExtraTorrent%5D.5434382.TPB.torrent"
mi = RubyTorrent::MetaInfo.from_location(torent_file)
torrent_name = mi.info.name
puts "Analisando semeadores de #{torrent_name}"
hosts = []
mi.trackers.each do |track|
puts "#{track}:"
begin
timeout(8) do # só tem 8 segundos para carregar
tc = RubyTorrent::TrackerConnection.new(track, mi.info.sha1, mi.info.total_length, 9999, "rubytorrent.dumppeer")
begin
tc.force_refresh
puts "<no peers>" if tc.peers.length == 0
tc.peers.each do |p|
puts "#{p.ip}:#{p.port}"
hosts << p.ip
end
rescue RubyTorrent::TrackerError => e
puts "erro ao conectar"
end
end
rescue Exception=>error
puts "Lerdo!"
end
end
puts "Fazendo gráfico..."
g = GraphViz::new( "G", :type => "digraph")
g[:overlap] = false
torrent_node = g.add_node(torrent_name)
hosts.uniq.each do |ip|
geoip = GeoIP.new('GeoIP.dat').country(ip)
pais = geoip[5] if geoip[5]
host_node = g.add_node(ip)
if pais_node = g.get_node(pais)
g.add_edge(host_node, pais_node)
else
pais_node = g.add_node(pais, :fillcolor=>"#ffffcc")
g.add_edge(pais_node, torrent_node)
g.add_edge(host_node, pais_node)
end
end
puts "\nSalvando..."
g.output( :png => "result-circo.png", :use=>:circo)
puts "Salvo!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment