Полезная информация

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№103-06-2011 18:55:23

Keepun
Участник
 
Группа: Extensions
Зарегистрирован: 08-12-2007
Сообщений: 591
UA: Firefox 4.0
Веб-сайт

BitTorrent или Как качать?

Ну, раз тут собралось много лохов незнающих людей, то займусь просветлением.

BitTorrent - открытый протокол типа P2P.
Tracker - сервер, который предоставляет список пиров и сидов и ведет статистику. Не участвует в обмене.
DHT - если кратко: получает список пиров и сидов у и НЕ ведет статистику.

Для учета статистики к адресу трекера добавляется набор уникальных символов для идентификации (в народе прозван "passkey").

Запрос на tracker такой: "Дай мне список сидов и пиров. Я скачал Х байт, отдал Х байт."
Первый Запрос на tracker такой: "Дай мне список сидов и пиров. Я скачал 0 байт, отдал 0 байт."

То есть, если удалить tracker с passkey сразу после получения от него списка сидов и пиров, то статистика НЕ будет передаваться yes.gif

Я вообще программно добавляю список анонимных трекеров еще при добавлении торрента в uTorrent biggrin.gif

Trackers
Ретрекер вашего провайдера
http://retracker.local/announce

Анонимные трекеры. uTorrent принимает список разделенный пустой строкой.
http://harryy.us:8080/announce

http://tracker.bittorrent.am/announce

http://tracker.mightynova.com/announce

http://tracker.mightynova.com:4315/announce

http://tracker.openbittorrent.com/announce

http://tracker.openbittorrent.com/announce

http://tracker.prq.to/announce

http://tracker.publicbt.com/announce

http://tracker.thepiratebay.org/announce

http://tracker.torrentalk.com:2710/announce

udp://tracker.openbittorrent.com:80/announce

udp://tracker.publicbt.com/announce

udp://tracker.thepiratebay.org:80/announce

А чтобы использовать DHT на полную катушку, нужно пропатчить клиент, чтобы он не отключал эту сеть на приватных торрентах. DHT опрашивает всех известных пиров и сидов на предмет содержимого. Чем больше у вас закачек с уже известными пирами и сидами, тем быстрее будет получен список пиров и сидов для новой закачки. Патченный uTorrent можно скачать с левых сайтов или пропатчить самому (не каждый сможет) - разница в одном байте.

uTorrent DHT Patcher
uTorrent DHT Patcher 2.0.3 (упакован UPX):
00408E1B  |. 57             PUSH EDI
00408E1C  |. 68 600E4700    PUSH utorrent.00470E60                   ;  ASCII "private"
00408E21  |. 8BCE           MOV ECX,ESI
00408E23  |. 8943 08        MOV DWORD PTR DS:[EBX+8],EAX
00408E26  |. E8 EE8DFFFF    CALL utorrent.00401C19
00408E2B  |. 85C0           TEST EAX,EAX
00408E2D  |. 74 04          JE SHORT utorrent.00408E33
00408E2F  |. 804B 46 02     OR BYTE PTR DS:[EBX+46],2
00408E33  |> 57             PUSH EDI

00408E2D     EB 04          JMP SHORT utorrent.00408E33


==============

krigstask пишет

Ну-ну, это только «Сумерки» какие-нибудь так качать можно, а не редкое, когда приходится дожидаться днями раздачи.

Читай про DHT - из "редкого" превращает в "популярное"

Raf-9600 пишет

Да и к тому же, подобный чит можно вычислить, если его часто юзать.

Если прочтешь устройство BitTorrent, то поймешь (наверно), что нелегальный чит только один: отправка на трекер ложной статистики. Это делается с помощью левых программ и только твоя жадность (множитель завысил на отдачу) и криворукость программиста выдадут тебя трекеру. Я этим не пользуюсь, а все, что описано выше, информацию на трекер вообще не передает!


Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?

Отсутствует

 

№203-06-2011 19:10:05

Raf-9600
Участник
 
Группа: Members
Зарегистрирован: 15-05-2007
Сообщений: 560
UA: Firefox 4.0

Re: BitTorrent или Как качать?

Keepun пишет

Ну, раз тут собралось много лохов незнающих людей, то займусь просветлением.

Это раздел "юмор"?

Keepun пишет

Я вообще программно добавляю список анонимных трекеров еще при добавлении торрента в uTorrent

И много таких как ты?

Keepun пишет

Если прочтешь устройство BitTorrent, то поймешь (наверно), что нелегальный чит только один

Сразу вспоминается бородатая шутка Задорнова: Если по новостям говорят что задержали того, кто распространял наркотики нелегально, значит есть те, кто распространяют их легально?

Keepun пишет

Я этим не пользуюсь, а все, что описано выше, информацию на трекер вообще не передает!

Ну насколько я знаю, когда ты в клиенте нажимаешь на паузу, или стопаешь скачивание, на трекер об этом сообщается. Когда ты просто удаляешь трекер после получения сидов, то как ты подметил, на трекер ничего не отсылается. Иными словами, спалить можно ;)


Иногда мне кажется, что лучшие программисты мира и лучшие технические умы работают только над одним - как сделать так, чтоб на новом скоростном железе тормозило также, как на хламе 10 летней давности.
(с)

Отсутствует

 

№303-06-2011 19:15:48

Keepun
Участник
 
Группа: Extensions
Зарегистрирован: 08-12-2007
Сообщений: 591
UA: Firefox 4.0
Веб-сайт

Re: BitTorrent или Как качать?

Raf-9600 пишет

Ну насколько я знаю, когда ты в клиенте нажимаешь на паузу, или стопаешь скачивание, на трекер об этом сообщается. Когда ты просто удаляешь трекер после получения сидов, то как ты подметил, на трекер ничего не отсылается. Иными словами, спалить можно ;)

Старт, стоп, пауза - это вообще дополнительные данные и полагаться на них вообще нельзя, так что мимо.


Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?

Отсутствует

 

№403-06-2011 19:25:18

AC/PC
Участник
 
Группа: Members
Зарегистрирован: 13-05-2011
Сообщений: 44
UA: Nightly 7.0
Веб-сайт

Re: BitTorrent или Как качать?

Keepun
Сидели себе качки, тихо мирно свои приблуды обсуждали. Не трогали никого, так сказать... Ты пошто боярыню обидел, смерд святые войны разжигаешь? :)

Отредактировано AC/PC (03-06-2011 19:31:21)


Раздаю плюсы за минусы. Расценка 1 к 3. Первой десятке скидка. 2 плюса за 4 минуса.

Отсутствует

 

№503-06-2011 19:46:10

Sid
Участник
 
Группа: Extensions
Зарегистрирован: 10-05-2007
Сообщений: 5676
UA: Nightly 7.0

Re: BitTorrent или Как качать?

Keepun пишет

Я вообще программно добавляю список анонимных трекеров еще при добавлении торрента в uTorrent

Каким образом?

Отсутствует

 

№603-06-2011 20:02:28

Keepun
Участник
 
Группа: Extensions
Зарегистрирован: 08-12-2007
Сообщений: 591
UA: Firefox 4.0
Веб-сайт

Re: BitTorrent или Как качать?

Sid пишет

Каким образом?

Патчер можно и самому написать. Или найти.

Я, например, свой написал на C# Делюсь кодом, но он на каждом 5 торренте дает сбой (писал для себя).

скрытый текст

Выделить код

Код:

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text;
using System.Diagnostics;

namespace TorrentPatcher
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                foreach (String arg in args)
                {
                    new Torrent(arg);
                }
                return;
            }
        }
    }

    public struct BenCode
    {
        public bool is_num;
        public long num;
        public bool is_list;
        public bool is_dict;
        public Byte[] bytes;
        public int grp;
        public int grp_index;
    }
    public class Torrent
    {
        public Torrent(string torrent)
        {
            try
            {
                if (!File.Exists(torrent)) return;

                BinaryReader bin = new BinaryReader(File.OpenRead(torrent));

                //if (bin.ReadChar() != 'd') return;
                
                BenCode[] bcode = new BenCode[0];

                this.Decode(ref bin, ref bcode, 0);

                int x = 0;
                List<string> urls = new List<string>();
                int ann = 0;
                for (x = 0; x < bcode.Length; x++ )
                {
                    if (bcode[x].bytes != null && Encoding.ASCII.GetString(bcode[x].bytes) == "announce" && x + 1 < bcode.Length)
                    {
                        ann = x + 1;
                        urls.Add(Encoding.ASCII.GetString(bcode[ann].bytes));
                        break;
                    }
                }
                int annlist = 0;
                for (x = 0; x < bcode.Length; x++)
                {
                    if (bcode[x].bytes != null && Encoding.ASCII.GetString(bcode[x].bytes) == "announce-list" && x + 1 < bcode.Length)
                    {
                        annlist = x + 1;
                        this.AnnList(ref urls, bcode, bcode[annlist].grp);
                        break;
                    }
                }

                urls.RemoveAll(DelTracker);
                
                urls.Add("http://retracker.local/announce");
                urls.Add("http://harryy.us:8080/announce");
                urls.Add("http://tracker.mightynova.com/announce");
                urls.Add("http://tracker.mightynova.com:4315/announce");
                urls.Add("http://tracker.bittorrent.am/announce");
                urls.Add("http://tracker.openbittorrent.com/announce");
                urls.Add("http://tracker.openbittorrent.com:80/announce");
                urls.Add("http://tracker.prq.to/announce");
                urls.Add("http://tracker.thepiratebay.org/announce");
                urls.Add("http://tracker.torrentalk.com:2710/announce");
                urls.Add("http://tracker.publicbt.com/announce");
                urls.Add("udp://tracker.openbittorrent.com:80/announce");
                urls.Add("udp://tracker.thepiratebay.org:80/announce");
                urls.Add("udp://tracker.publicbt.com/announce");
                
                urls.Sort();
                urls.Insert(0, "");
                Uri url;
                if (annlist > 0) bcode[annlist].grp = bcode.Length - 1;
                for (x = 1; x < urls.Count; x++ )
                {
                    if (urls[x] == urls[x - 1]) continue;
                    if (Uri.TryCreate(urls[x], UriKind.Absolute, out url))
                    {
                        if (ann > 0)
                        {
                            bcode[ann].grp_index = 1;
                            bcode[ann].grp = 0;
                            Array.Resize(ref bcode[ann].bytes, Encoding.ASCII.GetByteCount(url.AbsoluteUri));
                            bcode[ann].bytes = Encoding.ASCII.GetBytes(url.AbsoluteUri);
                            ann = -1;
                            x--;
                            continue;
                        }
                        else if (ann == 0)
                        {
                            Array.Resize(ref bcode, bcode.Length + 2);
                            bcode[bcode.Length - 2].grp_index = 1;
                            Array.Resize(ref bcode[bcode.Length - 2].bytes, Encoding.ASCII.GetByteCount("announce"));
                            bcode[bcode.Length - 2].bytes = Encoding.ASCII.GetBytes("announce");

                            ann = bcode.Length - 1;
                            bcode[ann].grp_index = 1;
                            bcode[ann].grp = 0;
                            Array.Resize(ref bcode[ann].bytes, Encoding.ASCII.GetByteCount(url.AbsoluteUri));
                            bcode[ann].bytes = Encoding.ASCII.GetBytes(url.AbsoluteUri);
                            ann = -1;
                            x--;
                            continue;
                        }

                        if (annlist == 0)
                        {
                            Array.Resize(ref bcode, bcode.Length + 2);
                            bcode[bcode.Length - 2].grp_index = 1;
                            Array.Resize(ref bcode[bcode.Length - 2].bytes, Encoding.ASCII.GetByteCount("announce-list"));
                            bcode[bcode.Length - 2].bytes = Encoding.ASCII.GetBytes("announce-list");

                            annlist = bcode.Length - 1;
                            bcode[annlist].is_list = true;
                            bcode[annlist].grp_index = 1;
                            bcode[annlist].grp = annlist;
                        }
                        if (annlist > 0)
                        {
                            Array.Resize(ref bcode, bcode.Length + 2);
                            bcode[bcode.Length - 2].is_list = true;
                            bcode[bcode.Length - 2].grp_index = bcode[annlist].grp;
                            bcode[bcode.Length - 2].grp = bcode.Length - 1;
                            bcode[bcode.Length - 1].grp_index = bcode.Length - 1;
                            Array.Resize(ref bcode[bcode.Length - 1].bytes, Encoding.ASCII.GetByteCount(url.AbsoluteUri));
                            bcode[bcode.Length - 1].bytes = Encoding.ASCII.GetBytes(url.AbsoluteUri);
                        }
                    }
                }

                int ext = torrent.LastIndexOf(".torrent");
                if (ext > 0)
                {
                    torrent = torrent.Insert(ext, "_" + DateTime.Now.Millisecond.ToString());
                }
                else
                {
                    torrent += ".torrent";
                }
                #if DEBUG
                    torrent = "test.torrent";
                #endif

                BinaryWriter binwr = new BinaryWriter(File.Create(torrent));

                this.Encode(ref binwr, bcode, 0);

                bin.Close();
                binwr.Close();

                #if !DEBUG
                    Process.Start(torrent);
                #endif
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private long Num(ref BinaryReader bin)//, ref Byte[] bytes, int index)
        {
            Char numb = bin.ReadChar();
            String res = "";
            while ((numb >= '0' && numb <= '9') || numb == '-')
            {
                res += numb.ToString();
                numb = bin.ReadChar();
            }
            if (numb != ':' && numb != 'e') return 0;
            return long.Parse(res);
        }

        private void AnnList(ref List<string> url, BenCode[] bcode, int index)
        {
            var ind = from i in bcode where i.grp_index == index select i;
            foreach (BenCode bc in ind)
            {
                if (bc.bytes != null && bc.bytes.Length > 0)
                {
                    String y = Encoding.ASCII.GetString(bc.bytes);
                    url.Add(Encoding.ASCII.GetString(bc.bytes));
                }

                if (bc.is_list || bc.is_dict)
                {
                    this.AnnList(ref url, bcode, bc.grp);
                }
            }
        }

        private bool Decode(ref BinaryReader bin, ref BenCode[] bcode, int index)
        {
            while (bin.BaseStream.Position < bin.BaseStream.Length)
            {
                switch (bin.ReadChar())
                {
                    case 'd': // Dictionary
                        {
                            Array.Resize(ref bcode, bcode.Length + 1);
                            bcode[bcode.Length - 1].is_dict = true;
                            bcode[bcode.Length - 1].grp_index = index;
                            bcode[bcode.Length - 1].grp = bcode.Length;
                            this.Decode(ref bin, ref bcode, bcode.Length);
                        }
                        break;
                    case 'i': // Number
                        {
                            Array.Resize(ref bcode, bcode.Length + 1);
                            bcode[bcode.Length - 1].is_num = true;
                            bcode[bcode.Length - 1].num = this.Num(ref bin);
                            bcode[bcode.Length - 1].grp_index = index;
                        }
                        break;
                    case 'l': // List
                        {
                            Array.Resize(ref bcode, bcode.Length + 1);
                            bcode[bcode.Length - 1].is_list = true;
                            bcode[bcode.Length - 1].grp_index = index;
                            bcode[bcode.Length - 1].grp = bcode.Length;
                            this.Decode(ref bin, ref bcode, bcode.Length);
                        }
                        break;
                    case 'e': // End
                        return true;
                    default:
                        {
                            bin.BaseStream.Position -= 1;
                            int count = (int)this.Num(ref bin);
                            if (count > 0)
                            {
                                Array.Resize(ref bcode, bcode.Length + 1);
                                Array.Resize(ref bcode[bcode.Length - 1].bytes, count);
                                bcode[bcode.Length - 1].grp_index = index;
                                bin.Read(bcode[bcode.Length - 1].bytes, 0, count);
                            }
                        }
                        break;
                }
            }
            return true;
        }

        private void Encode(ref BinaryWriter bin, BenCode[] bcode, int index)
        {
            var ind = from i in bcode where i.grp_index == index select i;
            foreach (BenCode bc in ind)
            {
                if (bc.bytes != null && bc.bytes.Length > 0)
                {
                    bin.Write(String.Format("{0}:", bc.bytes.Length).ToCharArray());
                    bin.Write(bc.bytes);
                }
                else if (bc.is_num)
                {
                    bin.Write(String.Format("i{0}e", bc.num).ToCharArray());
                }

                if (bc.is_dict)
                {
                    bin.Write('d');
                    this.Encode(ref bin, bcode, bc.grp);
                    bin.Write('e');
                }
                else if (bc.is_list)
                {
                    bin.Write('l');
                    this.Encode(ref bin, bcode, bc.grp);
                    bin.Write('e');
                }
            }
        }

        private static bool DelTracker(String s)
        {
// Сразу вырезает известные трекеры
            if (s.IndexOf("rutracker.") > 0) return true;
            if (s.IndexOf("free-torrents.") > 0) return true;
            return false;
        }
    }
}


Зачем вашему компу оперативная память, если вы сами не хотите, чтобы софт ее всю использовал?

Отсутствует

 

№703-06-2011 20:13:48

Sid
Участник
 
Группа: Extensions
Зарегистрирован: 10-05-2007
Сообщений: 5676
UA: Nightly 7.0

Re: BitTorrent или Как качать?

Keepun пишет

Делюсь кодом

Ой нет, это слишком сильное колдунство для меня. :(

Отсутствует

 

№803-06-2011 20:47:59

=Agasfer=
linux user #526929
 
Группа: Extensions
Откуда: /home
Зарегистрирован: 06-11-2008
Сообщений: 6578
UA: Nightly 7.0

Re: BitTorrent или Как качать?

Всё это весьма интересно, но как объяснить следущee:
Дано: Ubuntu 10.04.2 x86_64, Deluge 1.3.1
В один прекрасный момент, без каких либо действий с моей стороны, треккер (rutracker) перестал учитывать скачаное. При этом все раздачи учитываются.  Как и таймбонусы.
Я человек не жадный - раздаю по 15 и более Gb в день (канал безлимитный, 35+35 мбит/сек, полный дуплекс)., стараюсь всегда поддерживать 40-50  раздач, ограничения на скорость и время раздачи отключено.
Вот такие вот дела. :/


Arch Linux & xmonad

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]