Проверка заголовка C # всегда 403? - PullRequest
1 голос
/ 16 января 2012

я пытаюсь пропинговать список доменов, чтобы получить начальные указания, если они существуют - если их нет, я не получаю пинг обратно - что выдает и исключение. не проблема, за исключением того, что переадресация по какой-то причине также не дает ответа.

поэтому я пытаюсь получить ответ заголовка http URL-адреса исключения. но независимо от того, что я получаю ответ 403. есть идеи?

private void hunt_Click(object sender, EventArgs e)
    {
        listBox1.Items.Clear();
        string hostAddress = txtKeyword.Text;
        string combined;

        string[] strArray = new string[] { ".com", ".net", ".org", ".ca", ".gov" };

        foreach (string str in strArray)
        {

            combined = hostAddress + str;


            string result = string.Empty;
            try
            {
                Ping ping = new Ping();
                int timeout = 1500;
                PingReply pingreply = ping.Send(combined, timeout);


                if (pingreply != null && pingreply.Status.ToString() != "TimedOut")
                {
                    result = "Address: " + pingreply.Address + "\r"
                         + "Roundtrip Time: " + pingreply.RoundtripTime + "\r"
                         + "TTL (Time To Live): " + pingreply.Options.Ttl + "\r"
                         + "Buffer Size: " + pingreply.Buffer.Length + "\r";

                    listBox1.Items.Add(combined + " " + result);
                }
                else
                {

                    listBox1.Items.Add(combined + " not found");
                }

            }


            catch (Exception pingError)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www."+combined);
                request.Method = "HEAD";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                HttpStatusCode status = response.StatusCode;
                listBox1.Items.Add(status);
            }

        }
    }

спасибо заранее

РЕДАКТИРОВАТЬ ошибку Ping следующим образом:

System.Net.NetworkInformation.PingException: An exception occurred during a Ping     request. ---> System.Net.Sockets.SocketException: No such host is known
   at System.Net.Dns.GetAddrInfo(String name)
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
   at System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout,     Byte[] buffer, PingOptions options)
   --- End of inner exception stack trace ---
   at System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout,     Byte[] buffer, PingOptions options)
   at System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout)
   at DomainHunter.Form1.hunt_Click(Object sender, EventArgs e) in 

1 Ответ

1 голос
/ 16 января 2012

Ваша логика, кажется, задом наперед (как я читаю это в любом случае).Если пинг выдает исключение, если он не не получает ответ, то отправка запроса HEAD на сервер обычно безнадежна, поскольку сервер, вероятно, не существует.

Помимо этого пинг не очень хороший вариант для того, что вы пытаетесь достичь.Вы можете сделать комбинацию между Dns.GetHostAddresses (как было предложено в комментариях) и просто попытаться открыть TCP-соединение с портом 80 и / или 443 (что всегда подходит для сайтов, которые вы пытаетесь проверить) с помощьюTCPClient класс, чтобы определить, действительно ли сервер прослушивает обнаруженный IP-адрес.Есть еще немного, что на самом деле будет проверять, что на самом деле сервер прослушивает IP-адрес, который вы пытаетесь проверить.Он не проверяет, действителен ли URL-адрес, хотя, возможно, HEAD после подтверждения сервера будет хорошим дополнением.

...