我想从我的c#/ java程序获取域名的whois信息。有没有简单的方法来做到这一点?如何在我的程序中获取域名的whois信息?
回答
我认为,最简单的方法是在端口43上连接到whois服务器的套接字连接。发送域名后跟一个换行符并阅读响应。
这里的Java解决方案,这只是打开了一个外壳和运行whois
:如果你知道‘域名注册’服务器连接到
import java.io.*;
import java.util.*;
public class ExecTest2 {
public static void main(String[] args) throws IOException {
Process result = Runtime.getRuntime().exec("whois stackoverflow.com");
BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));
StringBuffer outputSB = new StringBuffer(40000);
String s = null;
while ((s = output.readLine()) != null) {
outputSB.append(s + "\n");
System.out.println(s);
}
String whoisStr = output.toString();
}
}
不要为了运行whois命令而掏腰包,这会造成层出不穷的安全和性能问题。使用您的编程语言中的库来执行whois查询,或者由于协议非常简单,只需打开一个TCP套接字到端口43并发送您的查询即可。详情请阅读RFC3912。 – 2018-01-08 17:22:28
托马斯的答案才有效。
有很多不同的方法可以找出这个问题,但没有一个(AFAIK)可以为每个域名注册管理机构统一使用。
一些域名支持SRV
记录在DNS中_nicname._tcp
服务,但也有问题,与因为没有公认的标准尚未就如何防止服务了SRV
记录的子域名,其覆盖这些正式登记(见http://tools.ietf.org/html/draft-sanz-whois-srv-00)。
对于很多TLD,您可以将您的查询发送至<tld>.whois-servers.net
。这实际上工作得很好,但要注意,它不适用于所有正式委派第二级域名的情况。
例如,在.uk
中有几个官方子域,但其中只有一些是由.uk
注册管理机构运行的,而其他的则有其自己的WHOIS服务,而这些不在whois-servers.net
数据库中。
令人困惑的是,还有“非官方”注册表,如.uk.com
,其中是whois-servers.net
数据库中的。
p.s.正如大多数IETF协议一样,WHOIS中的正式行尾分隔符是CRLF
,而不仅仅是LF
。
我发现了一些提供此信息的Web服务。这个是免费的,对我来说非常棒。 http://www.webservicex.net/whois.asmx?op=GetWhoIS
看起来很有希望,但我得到:System.Net.Sockets.SocketException:请求的名称是有效的,但没有找到请求类型的数据 在whois.whois.GetWhoIS(字符串主机名)(即使在输入IP地址字段本身) – Jimmy 2014-03-25 14:13:38
我找到了一个完美的C#示例here.
它的代码11行复制并直接粘贴到自己的应用程序。
/// <summary>
/// Gets the whois information.
/// </summary>
/// <param name="whoisServer">The whois server.</param>
/// <param name="url">The URL.</param>
/// <returns></returns>
private string GetWhoisInformation(string whoisServer, string url)
{
StringBuilder stringBuilderResult = new StringBuilder();
TcpClient tcpClinetWhois = new TcpClient(whoisServer, 43);
NetworkStream networkStreamWhois = tcpClinetWhois.GetStream();
BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois);
StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois);
streamWriter.WriteLine(url);
streamWriter.Flush();
StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois);
while (!streamReaderReceive.EndOfStream)
stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
return stringBuilderResult.ToString();
}
添加,我不得不添加`使用System.Net.Sockets;使用System.IO;`完成代码... – KingsInnerSoul 2016-07-07 02:43:04
我在这里找到了一个完美的C#示例。这是11行代码直接复制并粘贴到您自己的应用程序中。但首先,你应该添加一些using语句,以确保处置方法正确调用以防止内存泄漏:
StringBuilder stringBuilderResult = new StringBuilder();
using(TcpClient tcpClinetWhois = new TcpClient(whoIsServer, 43))
{
using(NetworkStream networkStreamWhois = tcpClinetWhois.GetStream())
{
using(BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois))
{
using(StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois))
{
streamWriter.WriteLine(url);
streamWriter.Flush();
using (StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois))
{
while (!streamReaderReceive.EndOfStream) stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
}
}
}
}
}
- 1. 域名Whois信息算法
- 2. 如何在我的应用程序中获取电池信息?
- 3. Django:如何获取信号处理程序中的域名
- 4. 通过Mozilla扩展获取whois信息
- 5. 如何获取不在我的名单中的用户信息?
- 6. 如何在我的网站中实施域名查询器和Whois域名
- 7. 如何使用命令行获取whois信息?
- 8. 获取域名的详细信息域名
- 9. 如何在应用程序中获取MMS/SMS消息信息?
- 10. 如何从我的应用程序获取系统信息?
- 11. 如何在我的android应用程序中获取google play store的信息?
- 12. 如何获取ios应用程序的签名应用程序证书信息
- 13. 如何在samba中获取用户的域信息
- 14. 我如何从维基百科获取信息到我的应用程序中
- 15. 在MySQL中存储whois信息
- 16. 如何获取iOS中前台应用程序的信息?
- 17. 如何在Selenium Web驱动程序中获取userAgent信息
- 18. 如何在注册域名时隐藏我的个人信息?
- 19. 如何获取域名的URL和应用程序名称?
- 20. 如何获取iPhone应用程序从Web上获取信息?
- 21. 如何获得签名的应用程序证书信息
- 22. 获取程序集的公司名称和版权信息
- 23. 如何在配置过程中获取Heroku应用程序的信息?
- 24. 如何在java中获取特定web应用程序的线程信息?
- 25. 如何在GDB中获取过程信号信息?
- 26. Whois节点批量域名
- 27. 域名检查器(Whois)?
- 28. 如何在我的GUI中获取此信息?
- 29. 如何获取.net中的cpu信息?
- 30. 如何从已签名的.Net程序集中读取数字签名信息?
您需要确定哪些* *域名服务器首先使用。这里有一个例子:这里有一个很好的例子:http://flipbit.co.uk/2009/06/querying-whois-server-data-with-c.html – 2014-06-17 13:05:27
'所有的请求都以ASCII码CR结束,然后ASCII LF。' https://tools.ietf.org/html/rfc3912 2.协议规范 – brewmanz 2017-04-11 03:31:54