!!!!!!!PHP函数checkdnsrr用法详解(可用于验证域名邮箱真伪) !!!!!!!

语法: int checkdnsrr(string host, string [type]);

返回值: 整数

函数种类: 网络系统

PHP下的checkdnsrr函数 -- 可以根据所给定的host name(域名)或者IP地址检查它是否有DNS各项记录(包括A记录、MX记录、NS记录、CNAME、PTR记录、AAAA记录、SRV记录、TXT记录、SOA记录等等),本函数用来检查 DNS 的字段纪录。指定的参数 host 可以是网络位址 (IP Address),也可以用机器名称 (Domain Name)。参数 type 可以省略,内定值为 MX。而参数 type 的值可为以下的其中之一:A、MX、NS、SOA、PTR、CNAME 或 ANY。若找到了指定网址的 DNS 字段,返回 true;若未找到指定的 DNS 字段或是有错误均会返回 false。这里不是返回实际的DNS记录值而是返回一个是否存在的状态。如果需要返回实际值需要用到dns_get_record()

主要可以用来检测一个输入的域名的真实性,以及用于网站验证用户输入的邮箱是否真实存在(有没有MX记录),当然也可以开发成查询平台,供用户查询各个域名的各项DNS记录情况;

用法:
    checkdnsrr ( string $host [, string $type = "MX" ] )
    第一个参数是域名或者ip
    第二个参数是解析类型,分别有:
    A (Address) 记录     指定主机名(或域名)对应的IP地址记录。
    MX 记录              指定邮件交换记录(默认)
    NS 记录              指定域名服务器的记录,指定该域名由哪个DNS来进行解析。
    SOA记录              一般在辅助的dns服务器里才用到,用来指定谁是主服务器。
    PTR记录              从ip指向域名的反向解析记录
    CNAME记录            别名记录
    AAAA记录             是一个指向IPv6的记录
    A6记录               同上
    SRV记录              它是DNS服务器的数据库中支持的一种资源记录的类型,一般是为Microsoft的活动目录设置时的应用。
    TXT记录              文本信息
    ANY记录              任何记录,所有数据类型


应用案例一、php验证用户输入的邮箱有效性和正确性,用checkdnsrr验证email的域名部分的有效性(Linux下可用):

function validate_email($email){
  $exp="^[a-z'0-9]+([._-][a-z'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
  if(eregi($exp,$email)){ //先用正则表达式验证email格式的有效性
  if(checkdnsrr(array_pop(explode("@",$email)),"MX")){//再用checkdnsrr验证email的域名部分的有效性
    return true;
  }else{
    return false;
  }
  }else{
    return false;
  }
}

目前PHP5.3版之前的自带checkdnsrr函数只在linux平台有效。window平台下不能使用,幸好有人研究了以下方法可以使用。

另外写了个函数代替checkdnsrr函数在window平台环境使用,用if判断,如果存在checkdnsrr函数就使用,如果不存在就使用nslookup。

if (!function_exists('checkdnsrr ')) {
  function checkdnsrr($host, $type) {
    if(!empty($host) && !empty($type)) {
      @exec('nslookup -type=' . escapeshellarg($type) . ' ' . escapeshellarg($host), $output);
      foreach ($output as $k => $line) {
        if(eregi('^' . $host, $line)) {
          return true;
        }
      }
    }
    return false;
  }
}

应用上面的方法,写了一个案例
案例二
if(!function_exists('checkdnsrr')){
function checkdnsrr($host, $type=''){
  if(!empty($host)){
   $type = (empty($type)) ? 'MX' :  $type;
   exec('nslookup -type='.$type.' '.escapeshellcmd($host), $result);
   $it = new ArrayIterator($result);
   foreach(new RegexIterator($it, '~^'.$host.'~', RegexIterator::GET_MATCH) as $result){
    if($result){
     return true;
    }    
   }
  }
  return false;
}
}




案例三:这是一个可以实际应用的案例,放到PHP文件中执行就能出结果


以下给出一个查询的实例:

<?php

    // A IPV4地址记录。负责进行主机名-IPv4地址转换

    // AAAA IPV6地址记录

    //A6 用于表示IPV6地址的记录类型

    //ANY 查找任意类型的记录

    //CNAME 规范名记录。将别名映射到真正的域名

    //MX 邮件交换记录。为主机确定邮件服务器的名和相关首选项。这是默认设置

    //NAPTR 命名授权指针。由于支持与DNS不兼容的名,使用正则表达式重写规则将其解析为新的域

    //NS 命名服务器记录。确定主机的命名服务器

    //PTR 指针服务器 用于将IP地址映射到主机

    //SOA 授权启动记录,为主机设置全局参数

    // SRV 服务记录,用于为给定域指示各种服务的位置。



    $record = checkdnsrr("www.bnxb.com","ANY");

    if($record)

        echo "the domain name has been reserved. SOrry";

    else

        echo "the domain name is available";

    echo "

";



    //使用这个函数验证给定邮件地址的域是否存在

    $email = "web@bnxb.com";

    $domain = explode("@",$email);

   

    $valid = checkdnsrr($domain[1],"ANY"); // ANY 查找任意类型的记录

    if($valid)

        echo "the domain existts";

    else

        echo "cannot locate MX record for $domain[1]";

    echo "

";



    //dns_get_record() 包含与hostname指定域有关的各种DNS资源记录

    //了解example.com域的更多信息

    $result = dns_get_record("bnxb.com");

    print_r($result);

   

    // 获取MX 记录 getmxrr()函数获取hostname所制定主机的MX记录

    echo "

";

    getmxrr("bnxb.com",$mxhosts);

    print_r($mxhosts);

?>

https://www.bnxb.com/php/26923.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,您的问题是关于邮箱批量验证系统PHP的。为了开发一个邮箱批量验证系统,您需要了解以下几个步骤: 1. 从一个文本文件中读取所有需要验证邮箱地址。 2. 使用PHP的SMTP库来连接到每个邮箱服务器,以验证邮箱地址的有效性。 3. 在验证过程中,需要检查MX记录以确保邮件服务器存在,以及检查SMTP服务器以确保邮箱地址是可用的。 4. 将验证结果保存到一个新的文件中,以备将来使用。 下面是一个简单的PHP代码示例,用于验证单个邮箱地址的有效性: ``` function verifyEmail($email) { $isValid = true; // Validate email address syntax if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $isValid = false; } // Get domain name from email address $domain = substr(strrchr($email, "@"), 1); // Verify MX record exists if ($isValid && !checkdnsrr($domain, "MX")) { $isValid = false; } // Verify SMTP server can accept mail if ($isValid) { $mxhosts = array(); getmxrr($domain, $mxhosts); foreach ($mxhosts as $mx) { $socket = fsockopen($mx, 25, $errno, $errstr, 10); if ($socket) { stream_set_timeout($socket, 10); $reply = fgets($socket, 4096); fclose($socket); if (preg_match("/^220/", $reply)) { break; } } } if (!$socket) { $isValid = false; } } return $isValid; } ``` 您可以使用此函数验证单个邮箱地址的有效性。要批量验证多个邮箱地址,您可以编写一个循环来遍历输入文件中的所有邮箱地址,并为每个地址调用此函数。然后将验证结果保存到输出文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值