генерация и использование всех IP-адресов с php - PullRequest
1 голос
/ 06 июня 2011

ничего не зная о Java (я думал, что тема на эту же тему для Java) и немного о PHP, мне было интересно, как я могу сгенерировать, с PHP , полный список всех возможныхIP-адреса (от 0.0.0.0 до 255.255.255.255), а затем как я могу использовать каждый из них в php-скрипте, который предназначен для тестирования инструмента проверки IP, который я пытаюсь настроить (возьмите каждый из них и используйте его).

Во второй части вопроса я думал об использовании оператора foreach или части «кода тестирования» внутри цикла, которая генерировала бы каждую комбинацию IP, чтобы она тестировалась как IP-адреса.

Затем для первой части я должен признать, что я застрял и что мои базовые знания не позволяют мне найти удовлетворительное решение. Пока я пришел с этим:

function gen() {
    $n1 = 0;
    $n2 = 0;
    $n3 = 0;
    $n4 = 0;

    while ($n4 <= 255 && $n3 <= 255) {
        echo $n1.'.'.$n2.'.'.$n3.'.'.$n4++.'<br>';
        echo $n1.'.'.$n2.'.'.$n3++.'.'.$n4.'<br>';
    }
}
gen();

, который лишь частично делает то, что я хочу.

Ответы [ 2 ]

3 голосов
/ 06 июня 2011

Вместо создания возможной базы данных / хранилища для ~ 4 миллиардов IP4-адресов (при условии, что вы смотрите только на IPv4, игнорируя все IPv6-адреса), было бы проще, и более практичным было бы просто генерировать случайные комбинации IP-адресов для тестирования, которые Вы можете легко проверить с RegEx?

Следующее регулярное выражение позволит вам проверить любой конкретный IPv4-адрес от 0.0.0.0 до 255.255.255.255

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

Однако следует помнить, что не все комбинации адресов классифицируются как «действительные», даже если синтаксис правильный.

Другая альтернатива (также упоминаемая @binaryLV) - это использование PHP filter_var ($ ip, FILTER_VALIDATE_IP); функция, которая хороша и чиста. Проверьте флажки, чтобы помочь фильтровать слишком в http://php.net/manual/en/function.filter-var.php

Обновление

Для услуг на основе определения местоположения по IP-адресу я бы рекомендовал использовать такой сервис, как IPInfoDB . Они предоставляют API (см. Здесь) для использования, что позволяет вам вызывать их службу, уменьшая необходимость хранить информацию в вашей базе данных. Иначе они предлагают базу данных IP-адресов (см. Здесь) с точностью от до xxx.xxx.xxx, которую также можно загрузить.

0 голосов
/ 06 июня 2011

Вам нужны вложенные циклы:

for($n1=0; $n1 < 256; $n1++) {
    for($n2=0; $n2 < 256; $n2++) {
        for($n3=0; $n3 < 256; $n3++) {
            for($n4=0; $n4 < 256; $n4++) {
                echo $n1 . "." . $n2 . "." . $n3 . "." . $n4 . "\n";
            }
        }       
    }
}   
...