我正在运行 Snort,它检测到一些 P2P 活动,特别是 BitTorrent 宣布请求。我看到 HTTP GET /announce.php?info_hash=XXX... 请求,我正在尝试将此 XXX 转换为适当的 SHA1 哈希,以尝试了解正在下载的内容。
我读过各种说这是 URL 编码的东西,还有一些说只是删除 % 字符 - 但是我无法重现这一点。
谁能建议如何做到这一点?
我正在运行 Snort,它检测到一些 P2P 活动,特别是 BitTorrent 宣布请求。我看到 HTTP GET /announce.php?info_hash=XXX... 请求,我正在尝试将此 XXX 转换为适当的 SHA1 哈希,以尝试了解正在下载的内容。
我读过各种说这是 URL 编码的东西,还有一些说只是删除 % 字符 - 但是我无法重现这一点。
谁能建议如何做到这一点?
info_hash
是一个 SHA1 哈希。它是一个二进制散列,经过 URL 编码以包含在 URL 中。
如果要将其转换为十六进制编码的哈希,则需要从 URL、URL-decode 和 hex-encode 中提取它。例如在 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']
. 如何在 PHP 中获取 info_hash 的 SHA1 哈希的代码示例:
$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%dbA%d7a%2b%92%f5%c2%ef%dcv%bf%e7%e6%03%24%85%0a -> 5d97db41d7612b92f5c2efdc76bfe7e60324850a
不,你可以,
infohash == sha1(torrentfile["info"])
但是你可以使用 info_hash 作为键在 DHT 网络上搜索它