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); + } }