From 93e761de8a60eb31bfd9fb038c772d021263aaac Mon Sep 17 00:00:00 2001 From: SASANO Takayoshi Date: Fri, 5 Mar 2021 05:27:16 +0900 Subject: [PATCH] (dashboard2) add IPv6 support --- dashboard2/pgs/peers.php | 43 ++++++++++++++++++++++++++++++------ dashboard2/pgs/repeaters.php | 37 ++++++++++++++++++++++++------- 2 files changed, 65 insertions(+), 15 deletions(-) diff --git a/dashboard2/pgs/peers.php b/dashboard2/pgs/peers.php index 1f45c13..efebafa 100644 --- a/dashboard2/pgs/peers.php +++ b/dashboard2/pgs/peers.php @@ -64,13 +64,42 @@ for ($i=0;$i<$Reflector->PeerCount();$i++) { '.$Reflector->Peers[$i]->GetLinkedModule().''; if ($PageOptions['PeerPage']['IPModus'] != 'HideIP') { echo ''; - $Bytes = explode(".", $Reflector->Peers[$i]->GetIP()); - if ($Bytes !== false && count($Bytes) == 4) { - switch ($PageOptions['PeerPage']['IPModus']) { - case 'ShowLast1ByteOfIP' : echo $PageOptions['PeerPage']['MasqueradeCharacter'].'.'.$PageOptions['PeerPage']['MasqueradeCharacter'].'.'.$PageOptions['PeerPage']['MasqueradeCharacter'].'.'.$Bytes[3]; break; - case 'ShowLast2ByteOfIP' : echo $PageOptions['PeerPage']['MasqueradeCharacter'].'.'.$PageOptions['PeerPage']['MasqueradeCharacter'].'.'.$Bytes[2].'.'.$Bytes[3]; break; - case 'ShowLast3ByteOfIP' : echo $PageOptions['PeerPage']['MasqueradeCharacter'].'.'.$Bytes[1].'.'.$Bytes[2].'.'.$Bytes[3]; break; - default : echo ''.$Reflector->Peers[$i]->GetIP().''; + $IPBinary = inet_pton($Reflector->Peers[$i]->GetIP()); + $IPLength = strlen($IPBinary); + $Bytes = str_split($IPBinary, 1); + switch ($PageOptions['PeerPage']['IPModus']) { + case 'ShowLast1ByteOfIP' : $MasqByte = 3; break; + case 'ShowLast2ByteOfIP' : $MasqByte = 2; break; + case 'ShowLast3ByteOfIP' : $MasqByte = 1; break; + default : $MasqByte = 0; break; + } + if ($MasqByte == 0) { + switch ($IPLength) { + case 16: $IPAddrBracketL = '['; $IPAddrBracketR = ']'; break; + default: $IPAddrBracketL = ''; $IPAddrBracketR = ''; break; + } + echo ''.$Reflector->Peers[$i]->GetIP().''; + } else { + switch ($IPLength) { + case 4: + for ($pos = 0; $pos < $IPLength; $pos++) { + if ($pos) echo '.'; + if ($pos < $MasqByte) echo $PageOptions['PeerPage']['MasqueradeCharacter']; + else echo ord($Bytes[$pos]); + } + break; + case 16: + for ($pos = 0; $pos < $IPLength; $pos += 2) { + if ($pos) echo ':'; + if ($pos < ($MasqByte * 4)) echo $PageOptions['PeerPage']['MasqueradeCharacter']; + else { + echo bin2hex($Bytes[$pos]); + echo bin2hex($Bytes[$pos + 1]); + } + } + break; + default: + break; } } echo ''; diff --git a/dashboard2/pgs/repeaters.php b/dashboard2/pgs/repeaters.php index a7562b9..ef0a31a 100644 --- a/dashboard2/pgs/repeaters.php +++ b/dashboard2/pgs/repeaters.php @@ -60,14 +60,35 @@ for ($i=0;$i<$Reflector->NodeCount();$i++) { if ($PageOptions['RepeatersPage']['IPModus'] != 'HideIP') { echo ' '; - $Bytes = explode(".", $Reflector->Nodes[$i]->GetIP()); - if ($Bytes !== false && count($Bytes) == 4) { - switch ($PageOptions['RepeatersPage']['IPModus']) { - case 'ShowLast1ByteOfIP' : echo $PageOptions['RepeatersPage']['MasqueradeCharacter'].'.'.$PageOptions['RepeatersPage']['MasqueradeCharacter'].'.'.$PageOptions['RepeatersPage']['MasqueradeCharacter'].'.'.$Bytes[3]; break; - case 'ShowLast2ByteOfIP' : echo $PageOptions['RepeatersPage']['MasqueradeCharacter'].'.'.$PageOptions['RepeatersPage']['MasqueradeCharacter'].'.'.$Bytes[2].'.'.$Bytes[3]; break; - case 'ShowLast3ByteOfIP' : echo $PageOptions['RepeatersPage']['MasqueradeCharacter'].'.'.$Bytes[1].'.'.$Bytes[2].'.'.$Bytes[3]; break; - default : echo $Reflector->Nodes[$i]->GetIP(); - } + $IPBinary = inet_pton($Reflector->Nodes[$i]->GetIP()); + $IPLength = strlen($IPBinary); + $Bytes = str_split($IPBinary, 1); + switch ($PageOptions['RepeatersPage']['IPModus']) { + case 'ShowLast1ByteOfIP' : $MasqByte = 3; break; + case 'ShowLast2ByteOfIP' : $MasqByte = 2; break; + case 'ShowLast3ByteOfIP' : $MasqByte = 1; break; + default : $MasqByte = 0; break; + } + switch ($IPLength) { + case 4: + for ($pos = 0; $pos < $IPLength; $pos++) { + if ($pos) echo '.'; + if ($pos < $MasqByte) echo $PageOptions['RepeatersPage']['MasqueradeCharacter']; + else echo ord($Bytes[$pos]); + } + break; + case 16: + for ($pos = 0; $pos < $IPLength; $pos += 2) { + if ($pos) echo ':'; + if ($pos < ($MasqByte * 4)) echo $PageOptions['RepeatersPage']['MasqueradeCharacter']; + else { + echo bin2hex($Bytes[$pos]); + echo bin2hex($Bytes[$pos + 1]); + } + } + break; + default: + break; } echo ''; }