2012-01-31 16 views
5

Piszę skaner portów, aby wykryć usługi internetowe działające w sieci lokalnej. Niektóre z tych usług internetowych wymagają podstawowego uwierzytelnienia - nie znam nazwy użytkownika/hasła do tych usług, chcę je tylko wymienić, więc nie mogę podać danych uwierzytelniających na tym etapie. Używam kod:Jak uzyskać nagłówki z błędu serwera 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 
        } 

ja wtedy parsowania się nazwę serwera z nagłówków, które są zwracane - znam są zwracane, ponieważ widzę ich Skrzypek ale obiekt HttpWebResponse jest ustawiony na null, ponieważ metoda GetResponse() rzuca wyjątek. Zasadniczo - jak sprawić, by nie rzucał i nie powodował wyjątków, ale zwrócił nagłówki wraz z kodem statusu 401.

+0

Czy masz kontrolę nad usługami sieciowymi? A konkretnie czy masz kontrolę nad swoim kodem? Co więcej, "skaner portów" nie ma nic wspólnego z HTTP, może spróbuj użyć klasy TCPClient. –

+0

Nie, nie mam kontroli nad usługami sieciowymi - szukam kamer IP, więc szukam specjalnie dla serwerów internetowych. Dzięki za sugestię. – Sean

Odpowiedz

11

Jeśli złapiesz numer WebException, uzyskasz dostęp do ex.Response, a stamtąd możesz pobrać swoje nagłówki.

+0

UWAGA: Jest to niezdefiniowane zachowanie, na które nigdy nie należy polegać. –

+5

Jakie źródła informują, że jest to niezdefiniowane? Jest w pełni udokumentowany. Możesz oczekiwać odpowiedzi na wszystko oprócz limitu czasu HTTP lub błędu połączenia ... http://msdn.microsoft.com/en-us/library/system.net.webexception.response.aspx – lukiffer

+0

Awesome, thanks lukiffer – Sean

Powiązane problemy