<?php
/*
 * D-Link 动态域名客户端.主域名www.dlinkddns.com 和 www.dlinkddns.com.cn
 * 首先获取外网IP,若IP没有变化,则结束运行;否则更行域名的IP,若执行错误,则发送EMAIL.
 * 用到了 CURL 扩展
 * 2013.5.28
*/
// 获取外网 IP
$ipurl        = 'http://iframe.ip138.com/ic.asp';
$ip           = get_onlineip($ipurl);
//$ip = '14.134.204.99';
$iplog        = dirname(__FILE__) . '\ip.txt';
// 域名账号设定
$domain       = 'dlinkddns.com.cn';
$host         = 'lpszy';
$user         = 'tom112';
$pw           = 'PASSWORD';
// 邮件账号设定
$smtp = array(
    'url'      => 'smtp.sina.com',           //发件箱服务器
    'port'     => '25',
    'username' => 'safeboat@sina.com',       //发件箱账号
    'password' => 'PASSWORD',                 //发件箱密码
    'from'     => 'safeboat@sina.com',
    'to'       => '395636344@qq.com',        //接收信箱
    'subject'  => '请更新 '.$host.'.'.$domain.' 的IP',
    'body'     => $ip,
    );  

if(file_exists($iplog) == false) file_put_contents($iplog, '');
$oldip = file_get_contents($iplog);
if($oldip == $ip){
    echo "IP 没有变化";
    exit();
    }  

file_put_contents($iplog, $ip);
$cookie_file = dirname(__FILE__) . "/cookie_" . md5(basename(__FILE__)) . ".txt";
vlogin('http://www.'.$domain.'/login', 'username=' . $user . '&pw=' . $pw);
$response_body = vlogin('http://www.'.$domain.'/host/'.$host.'.'.$domain, 'modify='.$host.'&host='.$host.'&domain='.$domain.'&ip='.$ip.'&commit=%E4%BF%9D+++%E5%AD%98');
header("Content-type: text/html; charset=gb2312");
if(stristr($response_body, 'updated')){
    @unlink($cookie_file);
    echo "域名IP已更新.";
    exit();
    }  

@unlink($cookie_file);
echo "提交的账号、域名或IP错误,或者是服务器更新了参数等原因。\r\n";
echo '<br>稍后将发送IP到你的邮箱,请手动更新<br><br> ';
echo '一下是发邮件过程:<br>';
echo '<pre>' . smtp($smtp) . '</pre>';  

//下面为函数部分  

function get_onlineip($ipurl){
     $ch = curl_init($ipurl);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $a = curl_exec($ch);
     preg_match('/\[(.*)\]/', $a, $ip);
     return @$ip[1];
     }
function vlogin($url, $data){
     $curl = curl_init();
     curl_setopt($curl, CURLOPT_URL, $url);
     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
     curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
     curl_setopt($curl, CURLOPT_POST, 1);
     curl_setopt($curl, CURLOPT_POSTFIELDS, @$data);
     curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']);
     curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']);
     curl_setopt($curl, CURLOPT_TIMEOUT, 30);
     curl_setopt($curl, CURLOPT_HEADER, 0);
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
     $tmpInfo = curl_exec($curl);
     if (curl_errno($curl)){
         echo 'Errno' . curl_error($curl);
         }
     curl_close($curl);
     return $tmpInfo;
    }
function smtp($smtp){
    $CRLF = "\r\n";
    $header = array(
        'Return-path' => '<' . $smtp['from'] . '>',
        'Date' => date('r'),
        'From' => '<' . $smtp['from'] . '>',
        'MIME-Version' => '1.0',
        'Subject' => trim($smtp['subject']),
        'To' => $smtp['to'],
        'Content-Type' => 'text/plain; charset=gb2312',
        'Content-Transfer-Encoding' => 'base64'
        );
    $ret = '';
    foreach($header as $k => $v){
        $ret .= $k . ': ' . $v . "\n";
        }
    $data = $ret . $CRLF . chunk_split(base64_encode($smtp['body']));
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $smtp['url']);
    curl_setopt($curl, CURLOPT_PORT, $smtp['port']);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    $content = "EHLO " . $smtp["url"] . $CRLF;
    $content .= "AUTH LOGIN" . $CRLF . base64_encode($smtp["username"]) . $CRLF . base64_encode($smtp["password"]) . $CRLF;
    $content .= "MAIL FROM:" . $smtp["from"] . $CRLF;
    $content .= "RCPT TO:" . $smtp["to"] . $CRLF;
    $content .= "DATA" . $CRLF . $data . $CRLF . "." . $CRLF;
    $content .= "QUIT" . $CRLF;
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $content);
    curl_exec($curl);
    curl_close($curl);
    return $content;
    }  

?>

PHP版本 D-Link 动态域名客户端的更多相关文章

  1. Linux纯Shell实现DNSPod动态域名

    http://www.anrip.com/post/872 开发背景: 公司有台嵌入式拨号上网设备,内置busybox和完整wget命令(支持https协议),但没有curl.python.ruby. ...

  2. 基于etcd插件的CoreDNS动态域名添加

    前提条件:已经有一个可用的etcd环境. 一.CoreDNS简介 CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件.CoreDNS是云本土计算基金会启动阶段项目. ...

  3. CXF 动态创建客户端调用稳定版本号为2.7.18

    今天用动态创建客户端的方式调用webservice,报了这样一个错: 2017-01-05 20:51:46,029 DEBUG main org.apache.cxf.common.logging. ...

  4. dnspod 动态域名的使用。openwrt使用dnspod动态域名解析。

    这里主要说的是linux shell下的使用. 先看接口说明: 接口地址: https://dnsapi.cn/Record.Ddns HTTP请求方式: POST 请求参数: 公共参数 domain ...

  5. CXF 调用方式——动态创建客户端(调用稳定版本号为2.7.18)

    今天用动态创建客户端的方式调用webservice,报了这样一个错: 2017-01-05 20:51:46,029 DEBUG main org.apache.cxf.common.logging. ...

  6. rhel7+apache+c cgi+动态域名实现web访问

    1. 申请动态域名/安装no-ip客户端 https://blog.csdn.net/lee244868149/article/details/44095835 2. yum安装httpd 两种方法安 ...

  7. 教程:动手用自己电脑搭建一个网站 (nat123 花生壳 动态域名 个人电脑做服务器)

    先ps一下..今晚试了N种方法,终于找到一个靠谱 免费 好用的方法,来改装自己电脑成为服务器,在外网也能通过域名访问了!!! 需要准备的东西: Tomcat:这个是web容器,其实有了这个就已经让电脑 ...

  8. RPi 2B DDNS 动态域名

    /**************************************************************************** * RPi 2B DDNS 动态域名 * 说 ...

  9. dnspod动态域名使用感受

    继花生壳不能用之后,3322也开始不太好用了,首先就是360把所有3322的域名全部判定为危险域名,甚至拦截程序对于3322url的api请求. 所以想把3322换成我们自己的独立域名,但是3322他 ...

随机推荐

  1. 内连接INNER JOIN(三十四)

    内连接INNER JOIN 一.连接 MySQL的SELECT语句.多表更新.多表删除语句中支持JOIN操作. 语法结构 二.数据表参照 table_reference tbl_name [[AS] ...

  2. 记录一下sql两个表关联的查询使用方法

    SELECT * FROM t_yymp_user_info where user_id = (select b.user_id from t_yymp_auth_role as a,t_yymp_a ...

  3. XT800 在域环境在运行设置

    测试时先将防火墙关了,不然无法远程,找个问题后再打开防火墙 0. 防火墙中建立规则,允许XT800通过. 1.在客户端当前用户下运行XT800安装程序 2.输入管理员账号及密码 3.安装时选择D或E盘 ...

  4. 计算机科学书籍推荐和CSS、js书籍推荐

    计算机科学:<深入理解计算机系统>,这是基础知识 JavaScript:JavaScript高级程序设计:大名鼎鼎的红宝书 <精通CSS:高级Web标准解决方案>:因为我觉CS ...

  5. 51nod 矩阵取数问题

    一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值. f[i][j] = max(f[i-1][j], f[i][j-1]) + ...

  6. Android.mk脚本推断文件是否存在

    Android.mk 推断文件是否存在,若存在则复制该文件到某个文件夹 $(shell test -f [文件] && echo yes)的值假设是yes, 则文件存在,然后进行she ...

  7. thinkphp5多文件上传如何实现

    thinkphp5多文件上传如何实现 一.总结 一句话总结:官方文档,测试一下,一定要测试,打印中间变量,就知道每句话是什么意思,一定要测试一下.又简单有快. 测试一下,你就能确定中间变量和你的是不是 ...

  8. 错误日志写入到本地磁盘(lock 队列)

    今天照常在b站上看看编程:看到有讲错误日志处理的,自己没写过日志,就看看了看: 主要是在讲的时候牵扯到了队列和lock的知识点:这方面知识自己了解的更少,那就记录一下.

  9. date---显示或设置系统时间与日期

    date命令可以用来显示或设定系统的日期与时间,格式设定为一个加号后接数个标记,其中可用的标记列表如下: 时间方面: %H : 小时(00..23) %M : 分钟(00..59) %p : 显示本地 ...

  10. 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody

    简介 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请 ...