Показать сообщение отдельно

  #6  
Старый 08.02.2017, 22:40
mazahist
Guest
Сообщений: n/a
Провел на форуме:
1002

Репутация: 0
По умолчанию

Не пойму, почему для любой magnet ссылки количество пиров = 30 (180/6)???

Цитата:
Сообщение от UnknownSource  
UnknownSource said:

после "peers180:" просто идет дофига байт. Это пары состоящие из ip-адреса + порта.
ip(4 байта)+порт(2 байта) = 6 байт - занимает каждая пара. а число после peers - это количество последующих байт с этими парами. например, в твоем случае 180=6*30, значит дальше 30 пар
Код HTML:
HTML:
var strBuff = [], length = 0;
//добавляем в массив пришедшие данные+ увеличиваем общую длину пришедших данных
response.on('data', function (chunk) { strBuff.push(chunk); length += chunk.length; });
response.on('end', function () {//когда пересылка закончена
    var body = Buffer.concat(strBuff, length); //создаем буфер 16-ти ричных значений из массива пришедших данных
    var str = body.toString("ascii");//переводим буфер в ascii
    var numPeers = str.slice(str.search("peers") + 5).slice(0, str.search(":") + 1); //страшный парсинг числа пиров ( =180)
    var peerCount = numPeers / 6; // 180/6 = 30
    var bPeers = bencode.decode(str).peers;//получам список пиров( от библиотеки bencode( не работает с utf8 :(  ))
    var peers = group(body.slice(body.length - numPeers), 6).map(function (address) {//групируем байты в буфере по 6 и для каждой группы вызываем функцию( ниже)
        return {//возвращаем
            address: address,//сам буффер
            ip: address.slice(0, 4).join('.'),//переводим каждый байт в 10-ную систему+соединяем в строку с разделителм '.': байты с [0,1,2,3] - это ip
            port: address.readUInt16BE(4)//получаем беззнаковое целое 2-х байтовое число - это порт
        }
    });
    console.log(peers);    //вывод в консоль
});
Вот код, который выводит:

Код:
Code:
[
{ address: ,
    ip: '108.169.22.64',
    port: 45317 },
  { address: ,
    ip: '144.110.162.178',
    port: 19122 },
  { address: ,
    ip: '155.5.193.216',
    port: 1794 },
  { address: ,
    ip: '93.143.227.53',
    port: 42162 },
  { address: ,
    ip: '168.129.139.191',
    port: 52050 },
  { address: ,
    ip: '198.175.77.243',
    port: 39245 },
  { address: ,
    ip: '222.118.156.195',
    port: 28462 },
  { address: ,
    ip: '147.14.55.139',
    port: 14524 },
  { address: ,
    ip: '243.139.32.65',
    port: 61791 },
  { address: ,
    ip: '79.185.73.89',
    port: 19789 },
  { address: ,
    ip: '222.113.33.137',
    port: 6578 },
  { address: ,
    ip: '140.37.131.34',
    port: 24671 },
  { address: ,
    ip: '153.132.149.194',
    port: 26463 },
  { address: ,
    ip: '55.180.217.200',
    port: 61785 },
  { address: ,
    ip: '23.191.110.48',
    port: 28594 },
  { address: ,
    ip: '16.148.1.214',
    port: 42580 },
  { address: ,
    ip: '23.59.125.209',
    port: 15455 },
  { address: ,
    ip: '183.116.25.216',
    port: 33364 },
  { address: ,
    ip: '52.43.36.227',
    port: 24157 },
  { address: ,
    ip: '73.96.253.67',
    port: 5215 },
  { address: ,
    ip: '66.218.96.213',
    port: 62099 },
  { address: ,
    ip: '30.74.59.62',
    port: 20047 },
  { address: ,
    ip: '165.123.28.56',
    port: 25951 },
  { address: ,
    ip: '84.183.248.95',
    port: 58885 },
  { address: ,
    ip: '18.235.180.178',
    port: 18975 },
  { address: ,
    ip: '185.4.145.155',
    port: 24671 },
  { address: ,
    ip: '29.96.176.54',
    port: 50523 },
  { address: ,
    ip: '219.101.72.235',
    port: 16421 },
  { address: ,
    ip: '203.10.124.210',
    port: 28709 },
  { address: ,
    ip: '212.255.11.95',
    port: 18789 }
]
Если смотреть в uTorrent, на вкладке "пиры"- этих адресов там нет; DHT специально отключил.
 
Ответить с цитированием