博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过PowerShell获取域名whois信息
阅读量:6154 次
发布时间:2019-06-21

本文共 5325 字,大约阅读时间需要 17 分钟。

Whois 简单来说,就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商、域名注册日期和过期日期等)。通过域名Whois服务器查询,可以查询域名归属者联系方式,以及注册和到期时间。通常情况下,whois信息均为真实信息,通过whois信息可以找到域名注册人的很多真实信息,像电话,邮箱,NS记录,是对网站进行社工非常好的信息来源,对于安全从业人员来说,快速获取whois信息,能够帮助自己掌握目标网站的很多有用信息。

而whois信息通常是保存在各级域名注册机构中,平常我们要查询whois信息都是通过godaddy、name.com、万网、新网等域名注册商网站通过查询页面提交域名进行查询,既慢又不能批量查询,太费劲了,这里我就把我珍藏很久的一个PS function贡献给大家,这个脚本支持140多种后缀的域名进行查询,尤其是一些生僻的域,找一个能支持这个域注册的注册商就不容易了,现在你不需要再为这个事情发愁了。

老规矩,先上代码,然后对关键操作进行解释:

=====文件名:Get-whois.ps1=====  Get-WhoIs {     [CmdletBinding()]    (        [Parameter(Position=0, ValueFromRemainingArguments=$true)]        []$query,        []$server,        []$NoForward    )     {        $TLDs = DATA {          @{            =  ,            =  ,            =  ,            =  ,            =              =              =              =              =              =  ,            =              =              =              =              =              =              =  ,            =              =  ,,            =                =              =  ,            =  ,            =  ,                =                =              =  ,            =  ,            =              =              =  ,            =            =              =  ,            =                =              =              =  ,,            =  ,            =  ,            =              =  ,            =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =            =            =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =              =            }        }        $EAP, $ErrorActionPreference = $ErrorActionPreference,         $query = $query.Trim()        ($query  ) {                         ($query  ) {                $query =             }            (!$server) { $server =  }        } (!$server) {            $server = $TLDs.GetEnumerator() |                 { $query   (+$_.name) } |                 -Expand Value | Get-Random        }        (!$server) { $server =  }        $maxRequery = 3          {                         $client =  System.Net.Sockets.TcpClient $server, 43             {                $stream = $client.GetStream()                                 $data = [System.Text.Encoding]::Ascii.GetBytes( $query +  )                $stream.($data, 0, $data.Length)                                 $reader =  System.IO.StreamReader $stream, [System.Text.Encoding]::ASCII                $result = $reader.ReadToEnd()                ($result  ) {                                         (!$NoForward) {                                                 (!$cachedResult) {                            $cachedResult = $result                            $cachedServer = $server                        }                        $server = $matches[1]                        $query = ($query -split )[-1]                        $maxRequery--                    }  { $maxRequery = 0 }                }  { $maxRequery = 0 }            }  {                ($stream) {                    $stream.Close()                    $stream.Dispose()                }            }        }  ($maxRequery  0)        $result        ($cachedResult  ($result -split ).count  5) {                         $cachedResult        }        $ErrorActionPreference = $EAP    } }

函数里定义了三个参数,两个[string]类型,一个[switch]类型,分别用于接收要进行whois查询的域名,指定whois域名服务器,以及是否允许将查询请求转发到其他域名解析服务器。随后创建了一个枚举值的哈希表,目的是用于存储不同域名后缀和whois服务器的对应关系,因为不同的域名后缀对应的域名信息是存储在不同的服务器上的。需要强调的是像.com、.net、.org、.info这几个注册量特别大的域名后缀指定了多个whois服务器,避免查询量过大无法有效返回结果的问题。

接下来通过New-Object创建一个System.Net.Sockets.TcpClient的TCP对象,连接上面指定的whois服务器的43端口用于查询whois信息,在通过一个System.IO.StreamReader对象接收whois信息返回的数据,并对数据进行解析。除此之外再加上try{}cache{}finally{}进行容错处理,在数据解析是也用到了正则表达式用于匹配目标字符串。

程序的运行方法有如下四种:

get-whois dnspod.com

先看看dnspod在被腾讯收购后有没有更改whois信息,貌似鹅厂没有改过

image

get-whois jd.com –NoForward

image

get-whois n 128.11.5.98 -server whois.arin.net

 image

 

作者: 付海军

出处:
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站:

转载于:https://www.cnblogs.com/fuhj02/p/4010349.html

你可能感兴趣的文章
由一个异常开始思考springmvc参数解析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>
SQL Server编程系列(1):SMO介绍
查看>>
在VMware网络测试“专用VLAN”功能
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
也问腾讯:你把用户放在什么位置?
查看>>
CSS Sprites 样式生成工具(bg2css)
查看>>
[转]如何重构代码--重构计划
查看>>
类中如何对list泛型做访问器??
查看>>
C++解析XML--使用CMarkup类解析XML
查看>>
P2P应用层组播
查看>>
Sharepoint学习笔记—修改SharePoint的Timeouts (Execution Timeout)
查看>>
CSS引入的方式有哪些? link和@import的区别?
查看>>
Redis 介绍2——常见基本类型
查看>>
asp.net开发mysql注意事项
查看>>
(转)Cortex-M3 (NXP LPC1788)之EEPROM存储器
查看>>
ubuntu set defult jdk
查看>>
[译]ECMAScript.next:TC39 2012年9月会议总结
查看>>
【Xcode】编辑与调试
查看>>