我正在开发一个小域检查器,我无法让.SE工作:
public string Lookup(string domain, RecordType recordType, SeoToolsSettings.Tld tld)
{
TcpClient tcp = new TcpClient();
tcp.Connect(tld.WhoIsServer, 43);
string strDomain = recordType.ToString() + " " + domain + "\r\n";
byte[] bytDomain = Encoding.ASCII.GetBytes(strDomain.ToCharArray());
Stream s = tcp.GetStream();
s.Write(bytDomain, 0, strDomain.Length);
StreamReader sr = new StreamReader(tcp.GetStream(), Encoding.ASCII);
string strLine = "";
StringBuilder builder = new StringBuilder();
while (null != (strLine = sr.ReadLine()))
{
builder.AppendLine(strLine);
}
tcp.Close();
if (tld.WhoIsDelayMs > 0) System.Threading.Thread.Sleep(tld.WhoIsDelayMs);
return builder.ToString();
}
我已经尝试过Whois服务器whois.nic-se.se和whois.iis.se让我不断得到:
# Copyright (c) 1997- .SE (The Internet Infrastructure Foundation).
# All rights reserved.
# The information obtained through searches, or otherwise, is protected
# by the Swedish Copyright Act (1960:729) and international conventions.
# It is also subject to database protection according to the Swedish
# Copyright Act.
# Any use of this material to target advertising or
# similar activities is forbidden and will be prosecuted.
# If any of the information below is transferred to a third
# party, it must be done in its entirety. This server must
# not be used as a backend for a search engine.
# Result of search for registered domain names under
# the .SE top level domain.
# The data is in the UTF-8 character set and the result is
# printed with eight bits.
"domain google.se" not found.
编辑:
我尝试过更改为UTF8而没有其他结果。
当我尝试使用sysinternals中的whois时,我得到了正确的结果,但没有使用我的代码,甚至没有使用SE.whois-servers.net。
/尼尔斯
答案 0 :(得分:1)
嗯,在我的Mac上执行whois google.se
时,我得到以下内容:
# Copyright (c) 1997- .SE (The Internet Infrastructure Foundation).
# All rights reserved.
# The information obtained through searches, or otherwise, is protected
# by the Swedish Copyright Act (1960:729) and international conventions.
# It is also subject to database protection according to the Swedish
# Copyright Act.
# Any use of this material to target advertising or
# similar activities is forbidden and will be prosecuted.
# If any of the information below is transferred to a third
# party, it must be done in its entirety. This server must
# not be used as a backend for a search engine.
# Result of search for registered domain names under
# the .SE top level domain.
# The data is in the UTF-8 character set and the result is
# printed with eight bits.
state: active
domain: google.se
holder: googoo5855-00001
admin-c: -
tech-c: -
billing-c: -
created: 2008-10-20
modified: 2010-09-18
expires: 2011-10-20
transferred: 2009-03-06
nserver: ns1.google.com
nserver: ns2.google.com
nserver: ns3.google.com
nserver: ns4.google.com
dnssec: unsigned delegation
status: ok
registrar: MarkMonitor Inc
所以它可能只是你的代码。也许您必须以非ASCII编码方式执行请求,例如UTF8?
答案 1 :(得分:1)
我终于解决了它。
使用wireshark,我看到来自sysinternals的whois没有添加“DOMAIN”部分:
string strDomain = recordType.ToString()+“”+ domain +“\ r \ n”;
(recordType.ToString ==“DOMAIN”)。
所以当我删除它时,它有效!
答案 2 :(得分:1)
没有查看您的代码,为什么不:
这将为您提供par.se
IP Found:
- 193.13.249.142
Host name:
- parweb1.par.se
Aliases:
none
IP address list:
- 193.13.249.142
如果您只想要IP的 RIPE信息,您也可以使用我的页面进行测试
http://balexandre.com/iplookup.aspx?ip= {ip to test}
按钮事件
protected void btnCheck_Click(object sender, EventArgs e)
{
DomainCheck domain = new DomainCheck();
string ip = domain.GetIPFromDomain(txtDomain.Text.Trim());
litResponse.Text = String.Format(
"IP{0} Found:<br/> - <strong>{1}</strong><br/>{2}",
ip.Contains(",") ? "'s" : "",
ip.Replace(",", "<br/> - "), domain.VerifyIP(ip));
}
DomainCheck代码:
public class DomainCheck
{
public DomainCheck() { }
public string VerifyIP(string ipAddress)
{
if (String.IsNullOrEmpty(ipAddress))
return "IP Address is invalid!";
string r = "";
if (ipAddress.Contains(","))
{
foreach (string ip in ipAddress.Split(','))
r += String.Format("<br/><br/>#### <em>Checking {0}</em>{1}", ip, CheckIPAddress(ip));
}
else
r += CheckIPAddress(ipAddress);
return r;
}
public string GetIPFromDomain(string hostname)
{
string r = "";
IPAddress[] addresslist = Dns.GetHostAddresses(hostname);
foreach (IPAddress theaddress in addresslist)
{
r += String.Format("{0},", theaddress.ToString());
}
return String.IsNullOrEmpty(r) ? null : r.TrimEnd(',');
}
private string CheckIPAddress(string ipAddress)
{
string r = "";
try
{
IPAddress hostIPAddress = IPAddress.Parse(ipAddress);
IPHostEntry hostInfo = Dns.GetHostByAddress(hostIPAddress);
// Get the IP address list that resolves to the host names contained in
// the Alias property.
IPAddress[] address = hostInfo.AddressList;
// Get the alias names of the addresses in the IP address list.
String[] alias = hostInfo.Aliases;
r += String.Format(
"<br/>Host name: <br/>- <strong>{0}</strong><br/>Aliases: ",
hostInfo.HostName);
if (alias.Length == 0)
r += "<br/><em>none</em>";
else
for (int index = 0; index < alias.Length; index++)
r += String.Format("<br/>- <strong>{0}</strong>", alias[index]);
r += "<br/>IP address list: ";
if (address.Length == 0)
r += "<br/><em>none</em>";
else
for (int index = 0; index < address.Length; index++)
r += String.Format("<br/>- <strong>{0}</strong>", address[index]);
}
catch (SocketException e)
{
r = String.Format(
"SocketException caught!!!<br/>Source : {0}<br/>Message : {1}",
e.Source, e.Message);
}
catch (FormatException e)
{
r = String.Format(
"FormatException caught!!!<br/>Source : {0}<br/>Message : {1}",
e.Source, e.Message);
}
catch (ArgumentNullException e)
{
r = String.Format(
"ArgumentNullException caught!!!<br/>Source : {0}<br/>Message : {1}",
e.Source, e.Message);
}
catch (Exception e)
{
r = String.Format(
"Exception caught!!!<br/>Source : {0}<br/>Message : {1}",
e.Source, e.Message);
}
return r;
}
}