Php phát hiện ipv4 hoặc ipv6

Nếu bạn cần phát hiện xem một địa chỉ IP (giả sử 192. 168. 0. 2) nằm trong một dải IP/mạng con nhất định (giả sử 192. 168. 0. 0/24), bạn có thể sử dụng đoạn mã sau trong PHP

/**
 * Check IPv4 address is within a range
 *
 * @param string $ip A valid IPv4 address (xxx.xxx.xxx.xxx)
 * @param string $subnet A valid IPv4 subnet (xxx.xxx.xxx.xxx)
 * @param string $mask A valid IPv4 subnet mask (a number from 0-32)
 * @return boolean True if the address is within the range, false if it isn't
 */
function ip4_in_network($ip, $subnet, $mask)
{
    if ($mask <= 0) {
        return false;
    }
    $ip_bin_string = sprintf("%032b", ip2long($ip));
    $net_bin_string = sprintf("%032b", ip2long($subnet));
    return (substr_compare($ip_bin_string, $net_bin_string, 0, $mask) === 0);
}


Đối với IPv6, mã phức tạp hơn một chút

/**
 * Check IPv6 address is within a range
 *
 * @param string $ip A valid IPv6 address
 * @param string $subnet A valid IPv6 subnet
 * @param string $mask A valid IPv6 subnet mask (a number from 0-128)
 * @return boolean True if the address is within the range, false if it isn't
 */
function ip6_in_network($ip, $subnet, $mask)
{
    $subnet = inet_pton($subnet);
    $ip = inet_pton($ip);

    // thanks to MW on http://stackoverflow.com/questions/7951061/matching-ipv6-address-to-a-cidr-subnet
    $binMask = str_repeat("f", $mask / 4);
    switch ($mask % 4) {
        case 0:
            break;
        case 1:
            $binMask .= "8";
            break;
        case 2:
            $binMask .= "c";
            break;
        case 3:
            $binMask .= "e";
            break;
    }
    $binMask = str_pad($binMask, 32, '0');
    $binMask = pack("H*", $binMask);

    return ($ip & $binMask) == $subnet;
}

Php phát hiện ipv4 hoặc ipv6

000

Thành viên nổi tiếng

3 tháng 6 năm 2008 533 29 78

29 tháng 10 năm 2020

  • #1

Xin chào,

tôi đọc. Người dùng có IP IPV6 không thể tải trang web


sau đó. .

sử dụng PHP, làm cách nào chúng tôi có thể phát hiện xem khách truy cập có đang sử dụng IPv6 không?

Mã số

REGEX như thế nào?

 

Php phát hiện ipv4 hoặc ipv6

cPanelChris

người điều hành

Thành viên đội ngũ nhân viên

Ngày 16 tháng 2 năm 2020 38 6 8 Houston,

30 Tháng 10, 2020

  • #2

Xin chào @000 ,

Một cái gì đó như sau sẽ hoạt động để kiểm tra giao thức IP là gì

PHP

 

Mở rộng chữ ký

Tài liệu. https. // tài liệu. cpanel. net/
Gửi một vé. Cách mở một yêu cầu hỗ trợ kỹ thuật - Cơ sở kiến ​​thức cPanel - Tài liệu cPanel
Yêu cầu một tính năng. https. //đi. cpanel. yêu cầu mạng/tính năng

Php phát hiện ipv4 hoặc ipv6

000

Thành viên nổi tiếng

3 tháng 6 năm 2008 533 29 78

30 Tháng 10, 2020

  • #3

Cám ơn Chris rất nhiều

Php phát hiện ipv4 hoặc ipv6

cPanelChris

người điều hành

Thành viên đội ngũ nhân viên

Ngày 16 tháng 2 năm 2020 38 6 8 Houston,

31 tháng 10 năm 2020

  • #4

Xin chào @000 ,

Địa chỉ IP IPv6 có thể chứa tối đa 39 ký tự bao gồm cả dấu chấm phẩy. Như vậy, một varchar có độ dài 15 sẽ không được đảm bảo để có thể giữ IP. Nếu IP vượt quá 15 ký tự, chỉ 15 ký tự đầu tiên sẽ được lưu trữ. Điều này được ghi lại tại liên kết dưới đây

mysql. mysql 5. 7 Hướng dẫn tham khảo. 11. 3. 2 Các loại CHAR và VARCHAR

nhà phát triển. mysql. com

 

Mở rộng chữ ký

Tài liệu. https. // tài liệu. cpanel. net/
Gửi một vé. Cách mở một yêu cầu hỗ trợ kỹ thuật - Cơ sở kiến ​​thức cPanel - Tài liệu cPanel
Yêu cầu một tính năng. https. //đi. cpanel. yêu cầu mạng/tính năng

Php phát hiện ipv4 hoặc ipv6

000

Thành viên nổi tiếng

3 tháng 6 năm 2008 533 29 78

31 tháng 10 năm 2020

  • #5

cPanelChris nói

Địa chỉ IP IPv6 có thể chứa tối đa 39 ký tự

Bấm để mở rộng

Ồ,
cảm ơn một lần nữa. Sau đó, nhiều mã trên Internet bị hỏng.

Ôi Chúa ơi

 

Làm cách nào để kiểm tra xem IP là IPv4 hay IPv6 trong PHP?

Bộ lọc FILTER_VALIDATE_IP xác thực địa chỉ IP. cờ có thể. FILTER_FLAG_IPV4 - Giá trị phải là địa chỉ IPv4 hợp lệ. FILTER_FLAG_IPV6 - Giá trị phải là địa chỉ IPv6 hợp lệ.

Làm cách nào để lấy địa chỉ IPv6 trong PHP?

$ curl --help all .. --dns-interface Interface to use for DNS requests --dns-ipv4-addr
IPv4 address to use for DNS requests --dns-ipv6-addr
IPv6 address to use for DNS requests --dns-servers DNS server addrs to use .. --interface Use network INTERFACE (or address) -4 ...

Làm thế nào bạn có thể biết sự khác biệt giữa IPv4 và IPv6?

Địa chỉ IPv4 thường được biểu thị bằng ký hiệu dấu thập phân, bao gồm bốn số thập phân, mỗi số nằm trong khoảng từ 0 đến 255, được phân tách bằng dấu chấm. Một địa chỉ IPv6 được biểu diễn dưới dạng tám nhóm gồm bốn chữ số thập lục phân, mỗi nhóm biểu thị 16 bit. Việc phân mảnh chỉ được thực hiện bởi người gửi trong IPv6

Làm cách nào để chỉ nhận địa chỉ IPv4 trong PHP?

Sử dụng hàm getenv(). Để lấy Địa chỉ IP, chúng ta sử dụng lệnh getenv(“REMOTE_ADDR”) . Hàm getenv() trong PHP được sử dụng để truy xuất các giá trị của biến môi trường trong PHP.