【问题标题】:Get Hostname from IP从 IP 获取主机名
【发布时间】:2017-05-11 10:39:51
【问题描述】:

我需要从我的 ip 地址中提取主机名。我试过这个:

echo shell_exec('nslookup ' . $iper->Get_Ip())["Server"];

基本上它会导出我需要的所有内容,但我无法访问主机 IP。 它看起来像这样:

Server:     xxxxx
Address:    xxxxx

Non-authoritative answer:
xxxxxxxa    name = xxxxxx

Authoritative answers can be found from:
xx.in-addr.arpa nameserver = sec3.apnic.net.
xx.in-addr.arpa nameserver = ns3.lacnic.net.
xx.in-addr.arpa nameserver = tinnie.arin.net.
xx.in-addr.arpa nameserver = sns-pb.isc.org.
xx.in-addr.arpa nameserver = ns3.afrinic.net.
xx.in-addr.arpa nameserver = pri.authdns.ripe.net.
pri.authdns.ripe.net    internet address = xxxx
sec3.apnic.net  internet address = xxxxxxxx
sns-pb.isc.org  internet address = xxxxxx
tinnie.arin.net internet address = xxxx
pri.authdns.ripe.net    has AAAA address xxxx
sec3.apnic.net  has AAAA address xxxx
sns-pb.isc.org  has AAAA address xxxx
tinnie.arin.net has AAAA address xxxx

有没有更好的方法来获取主机,或者我不得不用这种方式来解决问题,并尝试以某种方式提取主机 ip.... 谢谢

【问题讨论】:

    标签: php


    【解决方案1】:

    这是答案,我能找到从 ip 获取主机的唯一方法是:

    $data = (shell_exec('nslookup ' . $ip_adress));
    

    下面是返回主机 ip 的工作代码:

    $iper = new IpEr();
    $ip_adress = $iper->Get_Ip();
    
        $data = (shell_exec('nslookup ' . $ip_adress));
        $data = (explode("\n",$data));
        $data = explode(":",$data[0]);
        echo trim($data[1]);
    

    如果有人需要,这里是 iper 类:

    <?php
    
    class IpEr{
      public function Get_Ip(){
        if(!empty($_SERVER['HTTP_CLIENT_IP'])){
          $ip=$_SERVER['HTTP_CLIENT_IP'];
        }
        elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
          $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        else{
          $ip=$_SERVER['REMOTE_ADDR'];
        }
        return  $ip;
      }
    }
    
    ?>
    

    【讨论】:

      【解决方案2】:

      PHP 有一个内置函数,gethostbyaddr()

      <?php
      
      class IpEr{
        public function Get_Ip(){
          if(!empty($_SERVER['HTTP_CLIENT_IP'])){
            $ip=$_SERVER['HTTP_CLIENT_IP'];
          }
          elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
            $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
          }
          else{
            $ip=$_SERVER['REMOTE_ADDR'];
          }
          return  $ip;
        }
      }
      
      $iper = new IpEr();
      $ip_adress = $iper->Get_Ip();
      
      echo gethostbyaddr($ip_adress);
      
      ?>
      

      此外,作为一般规则,使用shell_execexec 不是一个好主意,因为它会引入潜在的安全漏洞

      【讨论】:

      • 您能详细解释一下,哪些安全漏洞?它以不同的方式返回主机地址,但我仍然得到相同的结果。我想知道漏洞?
      • @Arslan.H 我已经用完整的代码更新了我的答案。您提供的链接提供了一个基本概念,说明为什么使用 exec 通常不是一个好主意,它为攻击者提供了进入您系统的潜在途径,它并不总是不安全,但应尽可能避免。
      • 你还是没有解释那些潜在的安全漏洞
      • 如果你读到某个地方有一些漏洞,你必须把它留在后面,而不仅仅是写它......
      猜你喜欢
      • 2015-07-08
      • 2012-05-31
      • 2012-12-25
      • 2018-08-26
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      相关资源
      最近更新 更多