public static void ScanResource(object line) { var request = ConfigureRequest(_baseUrl.TrimEnd(), ( string )line); var details = new ScanDetails { Url = request.RequestUri }; try { using (var response = ( HttpWebResponse )request.GetResponse()) { WriteResponseInfo(response, details); } } catch (WebException ex) { WriteResponseInfo(( HttpWebResponse )ex.Response, details); } catch (ThreadInterruptedException) { /* Clean up. */ ScanDetails = null; } }
private static void SearchErrorContent(ScanDetails details) { if (!String.IsNullOrEmpty(_errorPageTitle) || !String.IsNullOrEmpty(_errorPageBodyText)) { var doc = new HtmlDocument(); doc.LoadHtml(details.PageTitle); var title = doc.DocumentNode.SelectNodes("//title"); var body = doc.DocumentNode.SelectNodes("//body"); if (title != null) { foreach (var item in title) { details.ErrorPageTitle = item.InnerText.Contains(_errorPageTitle) ? "exists!" : "not found"; break; } } if (body != null) { foreach (var item in body) { details.ErrorPageTitle = item.InnerText.Contains(_errorPageBodyText) ? "exists!" : "not found"; break; } } } }
private static void WriteResponseInfo(HttpWebResponse response, ScanDetails details) { if (response != null) { try { if (ScannerSetting.GetStatusCodesList(_scannerSetting.ResponseTypes).Contains( Convert.ToString(response.StatusCode))) { details.Response = String.Format("{0}{1}{2}", Convert.ToString(( int )response.StatusCode), ' ', response.StatusDescription); details.Size = response.ContentLength == -1 ? 0 : response.ContentLength; using (var stream = response.GetResponseStream()) { if (stream != null) { using (var reader = new StreamReader(stream, Encoding.Default)) { if (!response.ContentType.Equals("application/octet_stream")) { details.PageTitle = reader.ReadToEnd(); details.PageBody = details.PageTitle; } } } } //Critical section //_mutex.WaitOne(); if (response.ContentType.Contains("text/html")) { SearchErrorContent(details); details.PageTitle = SearchSpecificContent(details.PageTitle); } else { details.PageTitle = String.Empty; } if (!String.IsNullOrEmpty(details.PageBody)) { details.PageBody = details.PageBody.Substring(0, 150); } if (ScanDetails != null) { ScanDetails.Add(details); } //_mutex.ReleaseMutex(); } } catch (ArgumentException) { } } }
private static void WriteResponseInfo( HttpWebResponse response, ScanDetails details ) { if( response != null ) { try { if( ScannerSetting.GetStatusCodesList( _scannerSetting.ResponseTypes ).Contains( Convert.ToString( response.StatusCode ) ) ) { details.Response = String.Format( "{0}{1}{2}", Convert.ToString( ( int )response.StatusCode ), ' ', response.StatusDescription ); details.Size = response.ContentLength == -1 ? 0 : response.ContentLength; using( var stream = response.GetResponseStream() ) { if( stream != null ) { using( var reader = new StreamReader( stream, Encoding.Default ) ) { if( !response.ContentType.Equals( "application/octet_stream" ) ) { details.PageTitle = reader.ReadToEnd(); details.PageBody = details.PageTitle; } } } } //Critical section //_mutex.WaitOne(); if( response.ContentType.Contains( "text/html" ) ) { SearchErrorContent( details ); details.PageTitle = SearchSpecificContent( details.PageTitle ); } else { details.PageTitle = String.Empty; } if( !String.IsNullOrEmpty( details.PageBody ) ) { details.PageBody = details.PageBody.Substring( 0, 150 ); } if (ScanDetails != null) ScanDetails.Add( details ); //_mutex.ReleaseMutex(); } } catch( ArgumentException ) { } } }
public static void ScanResource( object line ) { var request = ConfigureRequest( _baseUrl.TrimEnd(), ( string )line ); var details = new ScanDetails { Url = request.RequestUri }; try { using( var response = ( HttpWebResponse )request.GetResponse() ) { WriteResponseInfo( response, details ); } } catch( WebException ex ) { WriteResponseInfo( ( HttpWebResponse )ex.Response, details ); } catch( ThreadInterruptedException ) { /* Clean up. */ ScanDetails = null; } }
private static void SearchErrorContent( ScanDetails details ) { if( !String.IsNullOrEmpty( _errorPageTitle ) || !String.IsNullOrEmpty( _errorPageBodyText ) ) { var doc = new HtmlDocument(); doc.LoadHtml( details.PageTitle ); var title = doc.DocumentNode.SelectNodes( "//title" ); var body = doc.DocumentNode.SelectNodes( "//body" ); if( title != null ) { foreach( var item in title ) { details.ErrorPageTitle = item.InnerText.Contains( _errorPageTitle ) ? "exists!" : "not found"; break; } } if( body != null ) { foreach( var item in body ) { details.ErrorPageTitle = item.InnerText.Contains( _errorPageBodyText ) ? "exists!" : "not found"; break; } } } }