Bất cứ ai biết về một phương pháp hiệu quả và an toàn để xem nếu đầu vào này:Một phương pháp tối ưu để so sánh địa chỉ IP với các ký tự đại diện trong PHP?
$_SERVER['REMOTE_ADDR']
trận đấu chống lại một cái gì đó tương tự như mảng này của bộ lọc không phù hợp (lưu ý rằng 200,100 * * có thể được diễn tả như chỉ 200,100 *...) với các kí hiệu chỉ định bởi * 's:
array(
'192.168.1.*',
'192.168.2.1*',
'10.0.0.*',
'200.100.*.*',
'300.200.*',
)
cập nhật
Suy nghĩ?
foreach($instanceSettings['accessControl']['allowedIpV4Addresses'] as $ipV4Address) {
echo 'Now checking against '.$ipV4Address.'.';
// Compare each octet
$ipV4AddressOctets = String::explode('.', $ipV4Address);
$remoteIpV4AddressOctets = String::explode('.', $_SERVER['REMOTE_ADDR']);
$remoteIpV4AddressIsAllowed = true;
for($i = 0; $i < Arr::size($ipV4AddressOctets); $i++) {
echo 'Comparing '.$ipV4AddressOctets[$i].' against '.$remoteIpV4AddressOctets[$i].'.';
if($ipV4AddressOctets[$i] != $remoteIpV4AddressOctets[$i] && $ipV4AddressOctets[$i] != '*') {
echo 'No match.';
$remoteIpV4AddressIsAllowed = false;
break;
}
}
// Get out of the foreach if we've found a match
if($remoteIpV4AddressIsAllowed) {
break;
}
}
bạn cũng có thể chỉ định mặt nạ mạng của từng địa chỉ IP không? tức là: '192.168.100.251/26'' hoặc '' 192.168.100.251 '=>' 26'' (mặt nạ 26 bit đó có thể không hợp lệ đối với địa chỉ IP đã cho, nó chỉ vì mục đích của ví dụ) Nếu bạn có thể chỉ định mặt nạ mạng, thì việc tính hiệu lực địa chỉ IP cũng dễ dàng như 'if ($ first_addr_of_mask> $ ip && $ last_addr_of_mask <$ ip) ' – Oerd
Tôi sẽ không làm điều này trong PHP mà là trên tường lửa máy chủ. – hornetbzz