PHP – Fortigate v4.3.11 Türkçe Adreslerin Otomatik Değişimi

Fortigate güvenlik cihazlarında v4.3.11 den önceki sürümlerde açılan türkçe isimli objeler, firmware versiyonu yükseltildiğinde sıkıntı olmakta. Cihaz belli bir firmware versiyonundan sonra UTF-8 desteğine geçtiğinden, eskiden açılan türkçe karakterleri bir şekilde değiştirmek gerek.

3-5 adet obje olduğunda manuel değişim yapılabilir ama obje sayısı fazla olan cihazlarda bunu elle yapmak hem zaman alıyor hem de can sıkıcı.

Bende oturup bunu PHP ile nasıl otomatik yapabilirim diye düşünürken bu kodlar hayat buldu.

Cihazdan export ettiğimiz config dosyası içerisinden adres bölümünü ayrı bir dosyaya aldım.

Dosyadaki adres “name” alanını alarak düzeltme yapan fonksiyona gönderip, bir liste oluşmasını sağladım.

Son olarak eski ve yeni isimleri değiştireceğim rename komutu ile cihaza yükleyeceğimiz import dosyasını oluşturdum.

<?php

set_time_limit(0); // uzun dosyalarda zaman aşımını engellemiş olduk.

function duzelts($tr1) {
$turkce=array("ş","Ş","ü","Ü","ö","Ö","ç","Ç","ı","I",'İ','ğ','Ğ');
$duzgun=array("s","s","u","u","o","o","c","c","i","i",'i','g','g');
$tr1=str_replace($turkce,$duzgun,$tr1);
$tr1=strtolower($tr1);
$tr1 = preg_replace("@[^a-z0-9\-__1üç0^ÜÇ]+@i","_",$tr1);
return $tr1;
} // düzeltme işlemini yapan fonksiyonumuz

function dosya_al($dosya) {
if($temp_dosya=fopen("$dosya","r")) {
$icerik=fread($temp_dosya,filesize($dosya));
fclose($temp_dosya);
}
return $icerik;
} // dosya içeriğini okuyup bize gönderen fonksiyonumuz.

// İşlem kodları

$d=dosya_al("fortinet_adres.txt"); //dosyayı oku

// dosya içerisindeki adresleri parse ediyoruz.

preg_match_all("#config firewall address(.*)end#ismU", $d, $objects);

$agrup=$objects[1][0];

// aldığımız her satırdaki edit ile başlayan bölümden adres name kısmını çekiyoruz.

preg_match_all("/edit \"(.*)\"/ismU", $agrup, $adresgrups);

$sonuc=$adresgrups[1];

$cikti="config firewall address\n";
for ($i=0;$i<sizeof($sonuc);$i++){
$s=duzelts($sonuc[$i]);
$cikti.="rename \"$sonuc[$i]\" to \"$s\"\n";
}

$cikti.="end";
echo($cikti); // ekrana yazdırıyoruz.

?>

fortinet_adres.txt dosyamızın içeriği

config firewall address
edit "all"
next
edit "tuncay baş"
set subnet 192.168.1.39 255.255.255.255
next
edit "fırat cümbüş"
set subnet 192.168.1.27 255.255.255.255
next
end

Programdan sonraki çıktımız:

config firewall address
rename "all" to "all"
rename "tuncay baş" to "tuncay_bas"
rename "fırat cümbüş" to "firat_cumbus"
end

 

2,963 total views, 1 views today