最近做一个小项目,把服务器放朋友公司了,朋友公司网络是ADSL的,服务器是linux的,首先在路由器那做了DMZ主机,将内外网ip设置到那台服务器上,通过外网ip可以直接访问。
然后写了一个小程序,判断如果本地ip和dnspod中设置的不同的话,就修改dnspod的记录。写的很烂。大家随便看看。
本来dnspod返回的数据可以是xml或者json的,懒的用xml解析器了,json挺好,写的时候忘记怎么返回成一个数组了,就直接用了match..
<?php
//利用http://www.dnspod.com/API/做动态域名解析
function postData($url, $data) {
$data = http_build_query($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_HEADER, 1);
// curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
$data = array(‘login_email’ => ‘user@gmail.com’,
‘login_password’ => ‘password’,
‘format’ => ‘xml’,
‘domain_id’ => ‘ zzzzzz’); //(首先先用domian.list方法获得domian id 吧,因为没有做通用的版本,所以这里就直接写死了。 zzzzzz为一组数字
$return_info = postData("http://www.dnspod.com/API/Record.List", $data);
preg_match("/value>(.*)<\/v/i",$return_info, $matches);
$ip_remote = $matches[1]; //获得dnspod中当前ip
$s = `curl http://www.showmyip.com/xml/`;
preg_match("/ip>(.*)<\/ip/i",$s, $matches2);
$ip_local = $matches2[1]; //获得本机当前ip
if($ip_remote != $ip_local) //如果两个ip不同,就修改记录
{
$new_$data = array(‘login_email’ => ‘user@gmail.com’,
‘login_password’ => ‘password’,‘format’ => ‘xml’,
‘domain_id’ => ‘zzzzzz’,
‘record_id’ => ‘xxxxxxx’,
‘sub_domain’ => ‘www’,
‘record_type’ => ’1′,
‘record_line’ => ’1′,
‘value’ => $ip_local,
‘mx’ => ’10′,
‘ttl’ => ’3600′);
$return_info = postData("http://www.dnspod.com/API/Record.Modify", $new_data);
file_put_contents(‘dnspod.log’,$return_info);
}
?>

