2

I'm developing a small domain checker and I can't get .SE to work:

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();
}

I've tried whois servers whois.nic-se.se and whois.iis.se put I keep getting:

# 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.

Edit:

I've tried changing to UTF8 with no other result.

When I try using whois from sysinternals I get the correct result, but not with my code, not even using SE.whois-servers.net.

/Niels

Sergey Kalinichenko
  • 714,442
  • 84
  • 1,110
  • 1,523
Niels Bosma
  • 11,758
  • 29
  • 89
  • 148

3 Answers3

1

Hmmm, when doing a whois google.se on my Mac I get the following:

# 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

So it's probably just your code. Maybe you have to do the request in a non-ASCII encoding, such as UTF8?

Klaus Byskov Pedersen
  • 117,245
  • 29
  • 183
  • 222
  • Hmmm... will try to use an other encoding... But is it possible to se what whois server you use on the mac? Note that I've got it working for .com domains with whois server whois.internic.net. – Niels Bosma Dec 14 '10 at 18:35
1

I finally solved it.

Using wireshark, I saw that the whois from sysinternals doesn't add the "DOMAIN" part:

string strDomain = recordType.ToString() + " " + domain + "\r\n";

(recordType.ToString == "DOMAIN").

So when I removed that, it worked!

Niels Bosma
  • 11,758
  • 29
  • 89
  • 148
1

without looking to your code why not:

example @ http://balexandre.com/verifyDomain.aspx

this will give you, for par.se

IP Found:
- 193.13.249.142

Host name: 
- parweb1.par.se
Aliases: 
none
IP address list: 
- 193.13.249.142

If you just want the RIPE information of an IP, you can also use my page for test

http://balexandre.com/iplookup.aspx?ip={ip to test}


Button event

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 code:

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;
    }
}
balexandre
  • 73,608
  • 45
  • 233
  • 342