diff --git a/admin/admin_log.php b/admin/admin_log.php
index b99070354..eaed856ed 100644
--- a/admin/admin_log.php
+++ b/admin/admin_log.php
@@ -264,7 +264,7 @@ if ($log_rowset) {
'USER_ID' => $row['log_user_id'],
'USERNAME' => profile_url($row),
'USER_HREF_S' => url_arg($url, $user_key, $row['log_user_id']),
- 'USER_IP' => \TorrentPier\Helpers\IPHelper::isValid($row['log_user_ip']) ? \TorrentPier\Helpers\IPHelper::long2ip($row['log_user_ip']) : '127.0.0.1',
+ 'USER_IP' => \TorrentPier\Helpers\IPHelper::isValid($row['log_user_ip']) ? \TorrentPier\Helpers\IPHelper::long2ip_extended($row['log_user_ip']) : '127.0.0.1',
'FORUM_ID' => $row['log_forum_id'],
'FORUM_HREF' => BB_ROOT . FORUM_URL . $row['log_forum_id'],
diff --git a/admin/admin_user_ban.php b/admin/admin_user_ban.php
index 8723e1758..cd1c4863e 100644
--- a/admin/admin_user_ban.php
+++ b/admin/admin_user_ban.php
@@ -213,7 +213,7 @@ if (isset($_POST['submit'])) {
$ban_id = $banlist[$i]['ban_id'];
if (!empty($banlist[$i]['ban_ip'])) {
- $ban_ip = str_replace('255', '*', \TorrentPier\Helpers\IPHelper::long2ip($banlist[$i]['ban_ip']));
+ $ban_ip = str_replace('255', '*', \TorrentPier\Helpers\IPHelper::long2ip_extended($banlist[$i]['ban_ip']));
$select_iplist .= '';
$ipban_count++;
} elseif (!empty($banlist[$i]['ban_email'])) {
diff --git a/admin/index.php b/admin/index.php
index 8bd9c2963..c6d57ea42 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -155,7 +155,7 @@ if (isset($_GET['pane']) && $_GET['pane'] == 'left') {
for ($i = 0, $iMax = count($onlinerow_reg); $i < $iMax; $i++) {
$users_count++;
$row_class = 'row1';
- $reg_ip = \TorrentPier\Helpers\IPHelper::long2ip($onlinerow_reg[$i]['session_ip']);
+ $reg_ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($onlinerow_reg[$i]['session_ip']);
$template->assign_block_vars('reg_user_row', array(
'ROW_CLASS' => $row_class,
diff --git a/bt/announce.php b/bt/announce.php
index 99b6af644..fb5a28518 100644
--- a/bt/announce.php
+++ b/bt/announce.php
@@ -118,7 +118,7 @@ if (!\TorrentPier\Helpers\IPHelper::isValid($ip)) {
msg_die("Invalid IP: $ip");
}
-// Convert IP to HEX format
+// Convert IP to long format
$ip_sql = \TorrentPier\Helpers\IPHelper::ip2long($ip);
// Peer unique id
@@ -374,16 +374,26 @@ if (!$output) {
}
if ($compact_mode) {
- $peers = '';
+
+ $peers = '';
+ $peers6 = '';
foreach ($rowset as $peer) {
- $peers .= pack('Nn', \TorrentPier\Helpers\IPHelper::ip2long(\TorrentPier\Helpers\IPHelper::long2ip($peer['ip'])), $peer['port']);
+ $ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($peer['ip']);
+ $ip_endian = inet_pton($ip) . pack('n', $peer['port']);
+
+ if (\TorrentPier\Helpers\IPHelper::isValidv6($ip)) {
+ $peers6 .= $ip_endian;
+ }
+ else{
+ $peers .= $ip_endian;
+ }
}
} else {
$peers = [];
foreach ($rowset as $peer) {
- $peers[] = ['ip' => \TorrentPier\Helpers\IPHelper::long2ip($peer['ip']), 'port' => (int)$peer['port']];
+ $peers[] = ['ip' => \TorrentPier\Helpers\IPHelper::long2ip_extended($peer['ip']), 'port' => (int)$peer['port']];
}
}
@@ -411,7 +421,12 @@ if (!$output) {
'peers' => $peers,
];
+ if (!empty($peers6)) {
+ $output['peers6'] = $peers6;
+ }
+
$peers_list_cached = CACHE('tr_cache')->set(PEERS_LIST_PREFIX . $topic_id, $output, PEERS_LIST_EXPIRE);
+ $output['external ip'] = inet_pton($ip);
$output['warning message'] = 'Statistics were updated';
}
diff --git a/library/ajax/mod_action.php b/library/ajax/mod_action.php
index 5a2568117..ff29caeff 100644
--- a/library/ajax/mod_action.php
+++ b/library/ajax/mod_action.php
@@ -122,8 +122,8 @@ switch ($mode) {
} elseif ($profiledata['user_level'] == MOD && IS_MOD) {
$reg_ip = $last_ip = $lang['HIDDEN'];
} else {
- $user_reg_ip = \TorrentPier\Helpers\IPHelper::long2ip($profiledata['user_reg_ip']);
- $user_last_ip = \TorrentPier\Helpers\IPHelper::long2ip($profiledata['user_last_ip']);
+ $user_reg_ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($profiledata['user_reg_ip']);
+ $user_last_ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($profiledata['user_last_ip']);
$reg_ip = '' . $user_reg_ip . '';
$last_ip = '' . $user_last_ip . '';
}
diff --git a/library/includes/functions.php b/library/includes/functions.php
index a7b62d521..00bc4e62c 100644
--- a/library/includes/functions.php
+++ b/library/includes/functions.php
@@ -594,7 +594,7 @@ function bt_show_ip($ip, $port = '')
global $bb_cfg;
if (IS_AM) {
- $ip = \TorrentPier\Helpers\IPHelper::long2ip($ip);
+ $ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($ip);
$ip .= ($port) ? ":$port" : '';
return $ip;
}
diff --git a/modcp.php b/modcp.php
index 727a23851..f86188d39 100644
--- a/modcp.php
+++ b/modcp.php
@@ -598,7 +598,7 @@ switch ($mode) {
bb_die($lang['NO_SUCH_POST']);
}
- if (!$ip_this_post = \TorrentPier\Helpers\IPHelper::long2ip($post_row['poster_ip'])) {
+ if (!$ip_this_post = \TorrentPier\Helpers\IPHelper::long2ip_extended($post_row['poster_ip'])) {
$ip_this_post = $lang['NOT_AVAILABLE'];
}
@@ -630,7 +630,7 @@ switch ($mode) {
continue;
}
- if (!$ip = \TorrentPier\Helpers\IPHelper::long2ip($row['poster_ip'])) {
+ if (!$ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($row['poster_ip'])) {
$ip = $lang['NOT_AVAILABLE'];
}
$ip = ($rdns_ip_num == $ip || $rdns_ip_num == 'all') ? gethostbyaddr($ip) : $ip;
diff --git a/src/Helpers/IPHelper.php b/src/Helpers/IPHelper.php
index fb0793ac0..437598dc4 100644
--- a/src/Helpers/IPHelper.php
+++ b/src/Helpers/IPHelper.php
@@ -52,4 +52,16 @@ class IPHelper extends Ip
return $ip;
}
+
+ /**
+ * Long to IP
+ * Decodes long form from both IPv4 & IPv6.
+ *
+ * @param string $ip
+ * @return string
+ */
+
+ public static function long2ip_extended($ip) {
+ return self::long2ip($ip, $ip > 4294967295);
+ }
}