Как создать запись SPF для многих IP-адресов (SPF длиной более 255 символов)

Например, у меня есть массив с этим ips и вы хотите создать с моим кодом длинную запись spf:

$array_ips = array(); $array_ips[] = "32.16.8.133"; $array_ips[] = "32.16.4.247"; $array_ips[] = "35.16.8.184"; $array_ips[] = "32.16.8.127"; $array_ips[] = "32.16.8.134"; $array_ips[] = "32.16.2.154"; $array_ips[] = "32.16.2.153"; $array_ips[] = "32.16.2.150"; $array_ips[] = "39.16.2.190"; $array_ips[] = "32.16.2.128"; $array_ips[] = "32.16.0.128"; $array_ips[] = "32.16.8.187"; $array_ips[] = "43.16.8.185"; $array_ips[] = "32.16.8.192"; $array_ips[] = "32.16.4.249"; $array_ips[] = "52.16.4.252"; $array_ips[] = "32.16.4.238"; $array_ips[] = "32.16.4.232"; $ips = implode(' ip4:', $array_ips); echo "v=spf1 +a +mx".$ips." -all"; 

Запись spf будет:

 v=spf1 +a +mx ip4:32.16.8.133 ip4:32.16.4.247 ip4:32.16.8.184 ip4:32.16.8.127 ip4:32.16.8.134 ip4:32.16.2.154 ip4:32.16.2.153 ip4:32.16.2.150 ip4:32.16.2.190 ip4:32.16.2.128 ip4:32.16.0.128 ip4:32.16.8.187 ip4:32.16.8.185 ip4:32.16.8.192 ip4:32.16.4.249 ip4:32.16.4.252 ip4:32.16.4.238 ip4:32.16.4.232 -all 

Персонажи: 307

Проблема в том, что SPF может быть максимальным. Длина 255 символов. Невозможно добавить такую ​​длинную строку в plesk или cpanel в записи txt dns. Я слышал, что если можно было бы сделать это так: "v=spf1 .... first" "spf second string..." .

Но действительно ли это работает? Как это сделать, создав его в моем примере выше?

    Вы можете сделать что-то вроде ниже, если вы счастливы разрешить подсеть / 24 для нескольких IP-адресов. Вы можете даже подсеть правильно, если хотите. Так или иначе, вы сокращаете свой список.

     <?php $array_ips = array(); $array_ips[] = "32.16.8.133"; $array_ips[] = "32.16.4.247"; $array_ips[] = "35.16.8.184"; $array_ips[] = "32.16.8.127"; $array_ips[] = "32.16.8.134"; $array_ips[] = "32.16.2.154"; $array_ips[] = "32.16.2.153"; $array_ips[] = "32.16.2.150"; $array_ips[] = "39.16.2.190"; $array_ips[] = "32.16.2.128"; $array_ips[] = "32.16.0.128"; $array_ips[] = "32.16.8.187"; $array_ips[] = "43.16.8.185"; $array_ips[] = "32.16.8.192"; $array_ips[] = "32.16.4.249"; $array_ips[] = "52.16.4.252"; $array_ips[] = "32.16.4.238"; $array_ips[] = "32.16.4.232"; $subnetArr = []; foreach ($array_ips as $k=>$v ) { $i = strrpos($v, '.'); $testSub = substr($v, 0, -(strlen($v) - $i)); if (in_array("ip4:" . $testSub . ".1/24", $subnetArr)) { //Do something here or change condition } else { array_push($subnetArr,"ip4:" . $testSub . ".1/24"); } } $ips = implode(' ', $subnetArr); echo "v=spf1 +a +mx ".$ips." -all"; 

    Вывод

     v=spf1 +a +mx ip4:32.16.8.1/24 ip4:32.16.4.1/24 ip4:35.16.8.1/24 ip4:32.16.2.1/24 ip4:39.16.2.1/24 ip4:32.16.0.1/24 ip4:43.16.8.1/24 ip4:52.16.4.1/24 -all 

    Редактировать:

    Просто изменилось, так что это действительно SPF!

    Вы можете разбить его на несколько включений.

     "v=spf1 mx a include:iprange1.example.com include:iprange2.example.com -all" 

    Затем под каждым из них будет DNS.

     iprange1.example.com = "v=spf1 ip4:32.16.8.133 ... -all" iprange2.example.com = "v=spf1 ip4:32.16.4.238 ... -all" 

    Это даст вам гораздо больше места, потому что вы сможете включить 8 включений вместе с вашими mx и

    Затем каждый из них может содержать 16 ip4-адресов, которые будут иметь около 128 IP-адресов, которые не могут быть CIDR.

    Изменить – iprange1 -> iprange2 в строке 2 второго фрагмента кода

    Вам нужно будет сделать по подсчетам. Используйте стандартную нотацию сети IP4:

    "v = spf1 ip4: 192.168.0.1/16 -all"

    Разрешить любой IP-адрес между 192.168.0.1 и 192.168.255.255.

    Я нашел решение:

      echo "v=spf1 +a +mx ( "'.implode('" "',$array_ips).' " ) -all"; 

    но на странице я нашел, что он не в энциклопедии. (пробелы требуются и () )

    http://www.nullpointer.at/keyword/spf/

    В переводе:

    Запись TXT слишком длинная. Здесь, в этом примере, запись TXT была разделена на несколько строк. Синтаксис для этого: скобка (тогда в кавычках «первая часть» следующая строка в кавычках «вторая часть» и т. Д. И, наконец, скобки). Важно: не забудьте пробелы в каждом разделе, заключенном в кавычки: «первая часть» «вторая часть» затем состоит из «первой части второй части».