2016-12-07 3 views
1

Zum Beispiel erstellen habe ich ein Array mit diesem IPs und möchte mit meinem Code, um eine lange spf Datensatz erstellen:Wie SPF-Eintrag für viele IPs (SPF länger als 255 Zeichen)

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

Die SPFaufzeichnung würde sein:

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 

Zeichen: 307

Das Problem ist, dass ein SPF nur max sein kann. 255 Zeichen lang. Keine Möglichkeit, eine so lange Zeichenfolge in Plesk oder Cpanel in Txt DNS-Datensatz hinzuzufügen. Ich habe gehört, dass, wenn es möglich sein könnte, es so zu tun "v=spf1 .... first" "spf second string...".

Aber funktioniert es wirklich? Wie mache ich das, indem ich es in meinem obigen Beispiel erzeuge?

+0

Sie –

+0

mehrere Datensätze nur hinzufügen können @Dagon Wie Sie das bedeuten? – Mann87

+0

@Dagon Mehrere Datensätze ??? – Kitson88

Antwort

0

Sie müssen per Subnetz tun. Verwenden Sie die Standard-IP4 Teilnetz Notation:

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

erlauben eine beliebige IP-Adresse zwischen 192.168.0.1 und 192.168.255.255.

+0

Aber wir haben nicht alle IPs. Wir bekommen sie zufällig. Also addiere alle Variationen nicht zu einer optimalen Lösung oder? – Mann87

+0

Ja - ich war nicht sicher von Ihrem Beispiel, wie zufällig die IPs sind, aber Sie haben keine andere Lösung, aber einige IPs zu erlauben, die Sie nicht kontrollieren. Das Beispiel in deiner Frage könntest du "32.16.0.1/16" machen und sie alle abdecken, oder du könntest "32.16.2.1/24 32.16.4.1/24 32.16.8.1/24" hinzufügen, um es einzugrenzen. Aber Sie brauchen einen Algorithmus, der alle Ihre Bedürfnisse abdeckt. – Robbie

+0

Andernfalls können Sie mehrere A-Datensätze für die Domäne hinzufügen? Ich nehme an, nicht, aber dachte, ich würde erwähnen, wie Sie + a haben, was bedeutet, dass es diejenigen überprüfen wird. – Robbie

-2

Ich habe die Lösung gefunden:

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

aber die Seite, fand ich es nicht in enlish. (Räume sind requierd und ())

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

übersetzt:

Der TXT-Datensatz zu lang ist. In diesem Beispiel wurde der TXT-Datensatz in mehrere Zeilen aufgeteilt. Die Syntax hierfür lautet: Klammer an (dann in Anführungszeichen "erster Teil" nächste Zeile in Anführungszeichen "zweiter Teil" usw. und schließlich Klammer). Wichtig: Vergessen Sie nicht die Leerzeichen in jedem Abschnitt in Anführungszeichen: "erster Teil" "zweiter Teil" wird dann zu "erster Teil zweiter Teil" zusammengesetzt.

+0

@ Mann87 hat hier ein Update – JOUM

+0

Ihre Lösung wird nicht funktionieren Echo wird ausgeben 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

Sie müssen Leerzeichen nach einer IP-Adresse nicht" "32.16.8.133" "statt dies tun" "32.16.8.133" '<- beachten Sie die Leerzeichen – JOUM

1

Sie könnten etwas wie die unten tun, wenn Sie gerne ein/24-Subnetz für ein paar IPs zulassen. Sie könnten es sogar richtig abtrennen, wenn Sie es wollten. Es ist sowieso drastisch reduziert Ihre Liste.

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

Ausgabe

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:

geändert Genau so ist es SPF tatsächlich Echo!

+0

Danke, dass diese Lösung funktioniert. Wenn es die beste Lösung ist, weiß ich nicht. Weil es auch die Möglichkeit gibt, jemanden zu verwenden, der eine IP aus Reichweite hat, um meine Domäne zum Senden zu verwenden. – Mann87

1

Sie können es in mehrere Includes aufteilen.

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

unter jedem Dann DNS gehören Sie

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

Dies wird Ihnen mehr Raum viel gab, weil Sie in der Lage sein zu zählen 8 mit Ihrem mx entlang umfasst und ein

Dann kann jedes Include 16 IP4-Adressen halten, die Ihre ungefähr 128 IP-Adressen erhalten, die Sie nicht CIDR können.

Bearbeiten - iprange1 -> iprange2 on line 2 von 2. Code-Schnipsel

+1

Aber was ist, wenn 1 IP = 1 Domain? Dann wird deine Lösung nicht funktionieren. – Mann87

+0

Ich verstehe nicht, was Sie fragen, bitte geben Sie ein Beispiel an. – Henry

Verwandte Themen