Re: VorteX vFOSe.ru IPUpdater (win32|linux)
Добавлено: 24 фев 2009, 14:59
Написал простенький скрипт для обновления ИП vfose.ru и dyndns.org на пыхпыхе
Отличительная особенность - не долбится обновлять ип, если он не изменился (это условие dyndns)
Отличительная особенность - не долбится обновлять ип, если он не изменился (это условие dyndns)
- Код: Выделить всё • Развернуть
#!/usr/bin/php
<?php
$data_dir = "/etc/update_domains/";
$curl = "/usr/bin/curl";
$domains = array(
'vfose' => array(
array(
'login' => 'miranda-im',
'pass' => ''),
array(
'login' => 'vortex',
'pass' => '')
),
'dyndns' => array(
array(
'login' => '',
'pass' => '',
'domain' => 'miranda-im.dyndns.org')
)
);
if($data = file_get_contents('http://speed.san.ru/getip.shtml'))
{
$start = strpos($data, 'Address:') + 9;
$end = strpos($data, '</body');
$fos_ip = substr($data, $start, $end - $start);
foreach($domains['vfose'] as $domain)
{
$last_ip = @file_get_contents($data_dir . 'vfose.' . $domain['login']);
if($fos_ip != $last_ip)
{
if(update_vfose($domain['login'], $domain['pass']))
file_put_contents($data_dir . 'vfose.' . $domain['login'], $fos_ip);
}
}
foreach($domains['dyndns'] as $domain)
{
$last_ip = @file_get_contents($data_dir . 'dyndns.' . $domain['domain']);
if($fos_ip != $last_ip)
{
if(update_dyndns($domain['login'], $domain['pass'], $domain['domain'], $fos_ip))
file_put_contents($data_dir . 'dyndns.' . $domain['domain'], $fos_ip);
}
}
}
function update_vfose($login, $pass)
{
global $curl;
$out = explode("\n", shell_exec("$curl --silent -F action=update -F name=$login -F pass=" . md5($pass) . " \"http://vfose.ru/updater.php\""));
if(is_array($out) && count($out) > 2)
{
$out[0] = trim($out[0]);
if($out[0] == 'UPDATE OK' || $out[0] == 'ERROR SAME IP')
{
return true;
}
}
return false;
}
function update_dyndns($login, $pass, $domain, $ip = null)
{
global $curl;
$out = shell_exec("$curl --insecure \"https://$login:$pass@members.dyndns.org/nic/update?hostname=$domain" . ($ip ? "&myip=$ip" : "" ) . "\"");
if(strpos($out, 'good') !== false || strpos($out, 'nochg') !== false)
{
return true;
}
return false;
}
?>