From ea352a640a97b61b0749b6251a21def06fbc7e0b Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Wed, 16 Mar 2022 16:32:15 +0200 Subject: [PATCH] Add loopback <-> external IP translation --- announce.php | 10 +++++++++- network.php | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 network.php diff --git a/announce.php b/announce.php index 4ef9586..bb55ea3 100644 --- a/announce.php +++ b/announce.php @@ -1,5 +1,6 @@ format('Y-m-d H:i:s'); @@ -114,7 +117,7 @@ $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("REPLACE INTO `tracker` (info_hash, ip, port, update_time) VALUES (:info_hash, :ip, :port, :update_time)"); $stmt->bindValue(":info_hash", $hash, PDO::PARAM_STR); -$stmt->bindValue(":ip", $ip, PDO::PARAM_STR); +$stmt->bindValue(":ip", is_loopback($ip) ? $externalIp : $ip, PDO::PARAM_STR); $stmt->bindValue(":port", $port, PDO::PARAM_INT); $stmt->bindValue(":update_time", $now, PDO::PARAM_STR); $stmt->execute(); @@ -127,6 +130,11 @@ $stmt->execute(); $stmt->bindColumn(1, $peerIp); $stmt->bindColumn(2, $peerPort); while ($stmt->fetch(PDO::FETCH_BOUND)) { + if (is_loopback($peerIp) && !is_loopback($ip)) { + $peerIp = $externalIp; + } else if ($peerIp == $externalIp && is_loopback($ip)) { + $peerIp = ip4_loopback(); + } $peers .= pack("Nn", inet_pton($peerIp), $peerPort); } diff --git a/network.php b/network.php new file mode 100644 index 0000000..91e2f57 --- /dev/null +++ b/network.php @@ -0,0 +1,47 @@ + \ No newline at end of file