2012-01-31 8 views
5

Sto scrivendo un port scanner per rilevare i servizi Web in esecuzione sulla rete locale. Alcuni di questi servizi Web richiedono l'autenticazione di base - non conosco il nome utente/password per questi servizi, voglio solo elencarli, quindi non posso fornire le credenziali in questa fase. Sto utilizzando il codice:Come ottengo le intestazioni da un errore del server 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 
        } 

sto allora l'analisi fuori il nome del server dalle intestazioni che vengono restituiti - So che vengono restituiti perché posso vedere con i violinista ma l'oggetto HttpWebResponse è impostato su null poiché il metodo GetResponse() genera un'eccezione. Fondamentalmente, come faccio a non generare ed eccezione ma restituire le intestazioni con un codice di stato di 401.

+0

Hai il controllo dei servizi web? Più specificamente, hai il controllo sul loro codice? Inoltre, 'port scanner' non ha nulla a che fare con HTTP, forse prova ad usare la classe TCPClient. –

+0

no non ho il controllo sui servizi web - sto cercando telecamere IP, quindi sto cercando specificamente per i server web. Grazie per il suggerimento però. – Sean

risposta

11

Se si cattura un WebException si avrà accesso a ex.Response e si può recuperare le intestazioni da lì.

+0

NOTA: si tratta di un comportamento indefinito su cui non si dovrebbe mai fare affidamento. –

+5

Quali fonti ti stanno dicendo che questo non è definito? È completamente documentato. Puoi aspettarti una risposta su tutto tranne che per un timeout HTTP o un errore di connessione ... http://msdn.microsoft.com/en-us/library/system.net.webexception.response.aspx – lukiffer

+0

Impressionante, grazie lukiffer – Sean

Problemi correlati