2016-12-07 39 views
1

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

$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"; 

Записи СПФА будет быть:

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...".

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

+0

вы можете просто добавить несколько записей –

+0

@Dagon Как вы имеете в виду это? – Mann87

+0

@ Dagon Несколько записей ??? – Kitson88

ответ

0

Вам необходимо сделать по подсчетам. Используйте стандартный IP4 подсеть обозначения:

"v = spf1 ip4: 192.168.0.1/16 -все"

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

+0

Но у нас нет всех ips. Мы получаем их случайным образом. Таким образом, добавление всех вариантов не является оптимальным решением или? – Mann87

+0

Да - я не был уверен в вашем примере, КАК случайные IP-адреса, но у вас нет другого решения, кроме как разрешить некоторые IP-адреса, которые вы не контролируете. В примере в вашем вопросе вы можете сделать '32.16.0.1/16' и покрыть все их, или вы можете добавить' 32.16.2.1/24 32.16.4.1/24 32.16.8.1/24', чтобы сузить его. Но вам понадобится какой-то алгоритм, который охватывает все, что вам нужно. – Robbie

+0

В противном случае вы можете добавить несколько записей A для домена? Я предполагаю, что нет, но подумал, что я упомянул бы, поскольку у вас есть +, что означает, что это проверит их. – Robbie

-2

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

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

но страница я нашел его не в Enlish. (Пространства requierd и ())

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

Перевод:

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

+0

@ Mann87 сделал здесь обновление – JOUM

+0

ваше решение не будет работать echo будет выводить v = spf1 + a + mx ("32.16.8.133" "32.16.4.247" "32.16.8.184" "32.16.8.127" "32.16.8.134" " 32.16.2.154 "" 32.16.2.153 "" 32.16.2.150 "" 32.16.2.190 "" 32.16.2.128 "" 32.16.0.128 "" 32.16.8.187 "" 32.16.8.185 "" 32.16.8.192 "" 32.16.4.249 "" 32.16.4.252 "" 32.16.4.238 "" 32.16.4.232 ") -all – Mann87

+0

У вас есть пробелы после ip не' "32.16.8.133« вместо этого »32.16.8.133« '<- отметить пробел – JOUM

1

Вы можете сделать что-то вроде нижеследующего, если вы счастливы разрешить подсеть/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 

Edit:

Просто изменилось, так что на самом деле Эхо SPF!

+0

Спасибо, что это решение работает. Если это лучшее решение, я не знаю. Потому что есть возможность использовать кого-то из IP-адресов для использования моего домена для отправки. – Mann87

1

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

"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 включает в себя наряду с тм и

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

Edit - iprange1 -> iprange2 по строке 2 второго фрагмента кода

+1

Но что, если 1 IP = 1 домен? Чем ваше решение не будет работать. – Mann87

+0

Я не понимаю, о чем вы просите, просьба привести пример. – Henry

 Смежные вопросы

  • Нет связанных вопросов^_^