2012-01-31 13 views
5

Estoy escribiendo un escáner de puerto para detectar los servicios web que se ejecutan en la red local. Algunos de estos servicios web requieren autenticación básica. No conozco el nombre de usuario/contraseña para estos servicios, solo quiero enumerarlos, por lo que no puedo proporcionar las credenciales en esta etapa. Estoy usando el código:¿Cómo obtengo los encabezados de un error de servidor 401?

    var request = (HttpWebRequest)WebRequest.Create("http://" + req); 
        request.Referer = ""; 
        request.Timeout = 3000; 
        request.UserAgent = "Mozilla/5.0"; 
        request.AllowAutoRedirect = false; 
        request.Method = WebRequestMethods.Http.Head; 

        HttpWebResponse response = null; 

        try 
        { 
         response = (HttpWebResponse) request.GetResponse(); 
         // I want to parse the headers here for the server name but as the exception is thrown the response object is null. 

        } 
        catch (Exception ex) 
        { 
         //401 error is caught here - response is null 
        } 

entonces estoy analizar el nombre del servidor de los encabezados que se devuelven - Sé que están siendo devueltos porque puedo verlos con el violinista pero el objeto se establece en HttpWebResponse nulo ya que el método GetResponse() arroja una excepción. Básicamente, ¿cómo hago para que no se arroje y se produzca una excepción sino que devuelva los encabezados junto con un código de estado de 401.

+0

¿Tiene control sobre los servicios web? Más específicamente, ¿tienes control sobre su código? Además, el "escáner de puertos" no tiene nada que ver con HTTP, quizás intente utilizar la clase TCPClient. –

+0

no, no tengo control sobre los servicios web, estoy buscando cámaras IP, así que estoy buscando específicamente servidores web. Gracias por la sugerencia, sin embargo. – Sean

Respuesta

11

Si tiene un WebException tendrá acceso a ex.Response y podrá recuperar sus encabezados desde allí.

+0

NOTA: Este es un comportamiento indefinido en el que nunca debe confiar. –

+5

¿Qué fuentes te dicen que esto no está definido? Está completamente documentado. Puede esperar una respuesta en todo excepto por un tiempo de espera de HTTP o un error de conexión ... http://msdn.microsoft.com/en-us/library/system.net.webexception.response.aspx – lukiffer

+0

Impresionante, gracias lukiffer – Sean

Cuestiones relacionadas