我正在运行检测一些P2P活动的Snort,特别是BitTorrent公布请求。我看到HTTP GET /announce.php?info_hash=XXX ...请求,并且我试图将此XXX转换为适当的SHA1哈希以尝试了解正在下载的内容。如何将Bit Torrent info_hash(从Wireshark获取)转换为SHA1哈希
我读过各种说这是URL编码的东西,以及其他人说只是删除%字符 - 但我无法重现这一点。
任何人都可以建议如何做到这一点?
我正在运行检测一些P2P活动的Snort,特别是BitTorrent公布请求。我看到HTTP GET /announce.php?info_hash=XXX ...请求,并且我试图将此XXX转换为适当的SHA1哈希以尝试了解正在下载的内容。如何将Bit Torrent info_hash(从Wireshark获取)转换为SHA1哈希
我读过各种说这是URL编码的东西,以及其他人说只是删除%字符 - 但我无法重现这一点。
任何人都可以建议如何做到这一点?
info_hash
是 SHA1哈希值。这是一个二进制散列,通过URL进行编码以包含在URL中。
如果你想把它变成一个十六进制编码的散列,你需要从URL,URL解码和十六进制编码中提取它。例如在Python中:
>>> '%00%01%02%20%25ABC+XYZabc%7F%80%81%FE%FF'
'%00%01%02%20%25ABC+XYZabc%7F%80%81%FE%FF'
>>> urllib.unquote_plus(_)
'\x00\x01\x02 %ABC XYZabc\x7f\x80\x81\xfe\xff'
>>> _.encode('hex')
'00010220254142432058595a6162637f8081feff'
好吧,知道我知道。 info_hash
是SHA1哈希。它的一个例子是:%5d%97%dbA%d7a%2b%92%f5%c2%ef%dcv%bf%e7%e6%03%24%85%0a
。如果使用$_GET['info_hash']
,由于%
s,它将不起作用。 您需要使用$_SERVER['QUERY_STRING']
。 代码示例如何获得info_hash的SHA1哈希在PHP中:
$arye = $_SERVER['QUERY_STRING'];
$arye = explode('info_hash=', $arye)[1];
$arye = explode('&', $arye)[0];
$arye = explode('%', $arye);
$arp = '';
foreach($arye as $ara) {
if (strlen($ara) == 2) {
$arp .= $ara;
}else{
$e1 = substr($ara, 0, 2);
$e2 = substr($ara, 2, 1);
$e2 = unpack('H*', $e2)[1];
$arp .= $e1;
$arp .= $e2;
}
}
echo $arp; // This will be your SHA1 hash
哈希:%5D%97%分贝%D7A%2B%92%F5%C2%EF%DCV%BF%E7%E6%03 %24%85%0A - > 5d97db41d7612b92f5c2efdc76bfe7e60324850a
没有,你可以,
infohash == sha1(torrentfile["info"])
但是你可以使用info_hash作为关键字来搜索它DHT网络上
值得一提的是,虽然这是一个SHA1哈希,它可以用base32编码当在URL中时。 – 2015-02-22 15:49:36