From e0c742cca4b6451d4557b05a7c6adb0ffffffd1e Mon Sep 17 00:00:00 2001 From: Simone Basso Date: Wed, 29 Nov 2023 02:08:16 +0100 Subject: [PATCH] feat(minipipeline): introduce "classic" observations filtering (#1402) Classic filtering is an `WebObservationsContainer` filtering technique that takes in input a `WebObservationsContainer` and only keeps DNS lookups using `getaddrinfo` and endpoints whose IP address has been discovered using `getaddrinfo`. By applying this technique, we reduce the richer dataset produced by Web Connectivity LTE to a smaller dataset comparable to what Web Connectivity v0.4 would return. In turn, by focusing the analysis on the reduced dataset, we hope to emulate the results produced by v0.4 for backward compatible test keys. I named this feature "classic" because it's what we used to do and I don't want to call it legacy. Part of https://github.com/ooni/probe/issues/2634. --- internal/cmd/minipipeline/main.go | 14 +- internal/cmd/minipipeline/main_test.go | 14 + .../testdata/analysis_classic.json | 25 + .../testdata/observations_classic.json | 111 ++ internal/cmd/qatool/main.go | 13 +- internal/cmd/qatool/main_test.go | 26 +- internal/minipipeline/classic.go | 53 + internal/minipipeline/qa_test.go | 30 + .../analysis_classic.json | 18 + .../observations_classic.json | 81 ++ .../analysis_classic.json | 18 + .../observations_classic.json | 81 ++ .../analysis_classic.json | 22 + .../observations_classic.json | 86 ++ .../analysis_classic.json | 18 + .../observations_classic.json | 81 ++ .../analysis_classic.json | 20 + .../observations_classic.json | 86 ++ .../analysis_classic.json | 18 + .../observations_classic.json | 123 +++ .../analysis_classic.json | 20 + .../observations_classic.json | 43 + .../dnsBlockingBOGON/analysis_classic.json | 22 + .../observations_classic.json | 86 ++ .../dnsBlockingNXDOMAIN/analysis_classic.json | 20 + .../observations_classic.json | 43 + .../analysis_classic.json | 27 + .../observations_classic.json | 91 ++ .../analysis_classic.json | 24 + .../observations_classic.json | 132 +++ .../analysis_classic.json | 20 + .../observations_classic.json | 128 +++ .../analysis_classic.json | 24 + .../observations_classic.json | 128 +++ .../analysis_classic.json | 26 + .../observations_classic.json | 128 +++ .../analysis_classic.json | 21 + .../observations_classic.json | 211 ++++ .../analysis_classic.json | 20 + .../observations_classic.json | 169 +++ .../analysis_classic.json | 22 + .../observations_classic.json | 211 ++++ .../analysis_classic.json | 20 + .../observations_classic.json | 169 +++ .../analysis_classic.json | 22 + .../observations_classic.json | 211 ++++ .../analysis_classic.json | 20 + .../observations_classic.json | 169 +++ .../analysis_classic.json | 18 + .../observations_classic.json | 128 +++ .../analysis_classic.json | 22 + .../observations_classic.json | 211 ++++ .../analysis_classic.json | 20 + .../observations_classic.json | 169 +++ .../successWithHTTP/analysis_classic.json | 23 + .../successWithHTTP/observations_classic.json | 133 +++ .../successWithHTTPS/analysis_classic.json | 25 + .../observations_classic.json | 91 ++ .../analysis_classic.json | 20 + .../observations_classic.json | 86 ++ .../analysis_classic.json | 24 + .../observations_classic.json | 128 +++ .../analysis_classic.json | 20 + .../observations_classic.json | 86 ++ .../analysis_classic.json | 24 + .../observations_classic.json | 86 ++ .../websiteDownNXDOMAIN/analysis_classic.json | 20 + .../observations_classic.json | 43 + .../manual/dnsgoogle80/analysis_classic.json | 18 + .../dnsgoogle80/observations_classic.json | 451 ++++++++ .../manual/noipv6/analysis_classic.json | 29 + .../manual/noipv6/observations_classic.json | 978 +++++++++++++++++ .../manual/youtube/analysis_classic.json | 29 + .../manual/youtube/observations_classic.json | 988 ++++++++++++++++++ 74 files changed, 7023 insertions(+), 12 deletions(-) create mode 100644 internal/cmd/minipipeline/testdata/analysis_classic.json create mode 100644 internal/cmd/minipipeline/testdata/observations_classic.json create mode 100644 internal/minipipeline/classic.go create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/badSSLWithExpiredCertificate/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/badSSLWithExpiredCertificate/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithConsistentDNS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithConsistentDNS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithInconsistentDNS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithInconsistentDNS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/badSSLWithWrongServerName/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/badSSLWithWrongServerName/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPSWebsite/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPSWebsite/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPWebsite/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPWebsite/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingAndroidDNSCacheNoData/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingAndroidDNSCacheNoData/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingBOGON/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingBOGON/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingNXDOMAIN/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingNXDOMAIN/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPSURL/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPSURL/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPURL/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPURL/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/httpBlockingConnectionReset/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/httpBlockingConnectionReset/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithConsistentDNS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithConsistentDNS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithInconsistentDNS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithInconsistentDNS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTP/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTP/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTPS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTPS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTP/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTP/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTPS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTPS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTP/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTP/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTPS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTPS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenNXDOMAIN/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenNXDOMAIN/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTP/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTP/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTPS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTPS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/successWithHTTP/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/successWithHTTP/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/successWithHTTPS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/successWithHTTPS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectTimeout/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectTimeout/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectionRefusedWithInconsistentDNS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectionRefusedWithInconsistentDNS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithConsistentDNS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithConsistentDNS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithInconsistentDNS/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithInconsistentDNS/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/websiteDownNXDOMAIN/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/generated/websiteDownNXDOMAIN/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/manual/dnsgoogle80/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/manual/dnsgoogle80/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/manual/noipv6/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/manual/noipv6/observations_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/manual/youtube/analysis_classic.json create mode 100644 internal/minipipeline/testdata/webconnectivity/manual/youtube/observations_classic.json diff --git a/internal/cmd/minipipeline/main.go b/internal/cmd/minipipeline/main.go index feb4f82edd..c1578ffdc0 100644 --- a/internal/cmd/minipipeline/main.go +++ b/internal/cmd/minipipeline/main.go @@ -42,7 +42,9 @@ func main() { fmt.Fprintf(os.Stderr, "\n") fmt.Fprintf(os.Stderr, "Analyzes the provided using -measurement and writes the\n") fmt.Fprintf(os.Stderr, "observations.json and analysis.json files in the -destdir directory,\n") - fmt.Fprintf(os.Stderr, "which must already exist.\n") + fmt.Fprintf(os.Stderr, "which must already exist. Additionally, we also perform a \"classic\"\n") + fmt.Fprintf(os.Stderr, "analysis like the one in Web Connectivity v0.4 and generate accordingly the\n") + fmt.Fprintf(os.Stderr, "observations_classic.json and analysis_classic.json files.\n") fmt.Fprintf(os.Stderr, "\n") fmt.Fprintf(os.Stderr, "Use -prefix to add in front of the generated files names.\n") fmt.Fprintf(os.Stderr, "\n") @@ -58,8 +60,18 @@ func main() { container := runtimex.Try1(minipipeline.IngestWebMeasurement(&parsed)) mustWriteFileFn(observationsPath, must.MarshalAndIndentJSON(container, "", " "), 0600) + // generate and write classic observations + classicObservationsPath := filepath.Join(*destdirFlag, *prefixFlag+"observations_classic.json") + containerClassic := minipipeline.ClassicFilter(container) + mustWriteFileFn(classicObservationsPath, must.MarshalAndIndentJSON(containerClassic, "", " "), 0600) + // generate and write observations analysis analysisPath := filepath.Join(*destdirFlag, *prefixFlag+"analysis.json") analysis := minipipeline.AnalyzeWebObservations(container) mustWriteFileFn(analysisPath, must.MarshalAndIndentJSON(analysis, "", " "), 0600) + + // generate and write the classic analysis + classicAnalysisPath := filepath.Join(*destdirFlag, *prefixFlag+"analysis_classic.json") + analysisClassic := minipipeline.AnalyzeWebObservations(containerClassic) + mustWriteFileFn(classicAnalysisPath, must.MarshalAndIndentJSON(analysisClassic, "", " "), 0600) } diff --git a/internal/cmd/minipipeline/main_test.go b/internal/cmd/minipipeline/main_test.go index 0597cc6693..1ee6e8fbe0 100644 --- a/internal/cmd/minipipeline/main_test.go +++ b/internal/cmd/minipipeline/main_test.go @@ -45,12 +45,26 @@ func TestMainSuccess(t *testing.T) { t.Fatal(diff) } + // make sure the generated classic observations are good + expectedObservationsClassic := mustloadfile(filepath.Join("testdata", "observations_classic.json")) + gotObservationsClassic := mustloaddata(contentmap, filepath.Join("xo", "y-observations_classic.json")) + if diff := cmp.Diff(expectedObservationsClassic, gotObservationsClassic); diff != "" { + t.Fatal(diff) + } + // make sure the generated analysis is good expectedAnalysis := mustloadfile(filepath.Join("testdata", "analysis.json")) gotAnalysis := mustloaddata(contentmap, filepath.Join("xo", "y-analysis.json")) if diff := cmp.Diff(expectedAnalysis, gotAnalysis); diff != "" { t.Fatal(diff) } + + // make sure the generated classic analysis is good + expectedAnalysisClassic := mustloadfile(filepath.Join("testdata", "analysis_classic.json")) + gotAnalysisClassic := mustloaddata(contentmap, filepath.Join("xo", "y-analysis_classic.json")) + if diff := cmp.Diff(expectedAnalysisClassic, gotAnalysisClassic); diff != "" { + t.Fatal(diff) + } } func TestMainUsage(t *testing.T) { diff --git a/internal/cmd/minipipeline/testdata/analysis_classic.json b/internal/cmd/minipipeline/testdata/analysis_classic.json new file mode 100644 index 0000000000..09f3ad41b3 --- /dev/null +++ b/internal/cmd/minipipeline/testdata/analysis_classic.json @@ -0,0 +1,25 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 1, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": {}, + "HTTPDiffUncommonHeadersIntersection": { + "x-drupal-cache": true, + "x-generator": true + }, + "HTTPFinalResponsesWithControl": { + "4": true + }, + "HTTPFinalResponsesWithTLS": { + "4": true + }, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/cmd/minipipeline/testdata/observations_classic.json b/internal/cmd/minipipeline/testdata/observations_classic.json new file mode 100644 index 0000000000..324840813b --- /dev/null +++ b/internal/cmd/minipipeline/testdata/observations_classic.json @@ -0,0 +1,111 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "nexa.polito.it", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "130.192.16.171", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "4": { + "DNSTransactionID": 3, + "DNSDomain": "nexa.polito.it", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "130.192.16.171", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "130.192.16.171:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "nexa.polito.it", + "HTTPRequestURL": "https://nexa.polito.it/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 36564, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Cache-Control": true, + "Content-Language": true, + "Content-Type": true, + "Date": true, + "Etag": true, + "Expires": true, + "Last-Modified": true, + "Link": true, + "Server": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Drupal-Cache": true, + "X-Frame-Options": true, + "X-Generator": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Nexa Center for Internet \u0026 Society | Il centro Nexa è un centro di ricerca del Dipartimento di Automatica e Informatica del Politecnico di Torino", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 36564, + "ControlHTTPResponseHeadersKeys": { + "Cache-Control": true, + "Content-Language": true, + "Content-Type": true, + "Date": true, + "Etag": true, + "Expires": true, + "Last-Modified": true, + "Link": true, + "Server": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Drupal-Cache": true, + "X-Frame-Options": true, + "X-Generator": true + }, + "ControlHTTPResponseTitle": "Nexa Center for Internet \u0026 Society | Il centro Nexa è un centro di ricerca del Dipartimento di Automatica e Informatica del Politecnico di Torino" + } + } +} \ No newline at end of file diff --git a/internal/cmd/qatool/main.go b/internal/cmd/qatool/main.go index 0ea117168b..694ee8bb8b 100644 --- a/internal/cmd/qatool/main.go +++ b/internal/cmd/qatool/main.go @@ -79,14 +79,23 @@ func runWebConnectivityLTE(tc *webconnectivityqa.TestCase) { // serialize the observations mustSerializeMkdirAllAndWriteFile(actualDestdir, "observations.json", observationsContainer) + // convert to classic observations + observationsContainerClassic := minipipeline.ClassicFilter(observationsContainer) + + // serialize the classic observations + mustSerializeMkdirAllAndWriteFile(actualDestdir, "observations_classic.json", observationsContainerClassic) + // analyze the observations analysis := minipipeline.AnalyzeWebObservations(observationsContainer) // serialize the observations analysis mustSerializeMkdirAllAndWriteFile(actualDestdir, "analysis.json", analysis) - // print the analysis to stdout - fmt.Printf("%s\n", must.MarshalAndIndentJSON(analysis, "", " ")) + // perform the classic analysis + analysisClassic := minipipeline.AnalyzeWebObservations(observationsContainerClassic) + + // serialize the classic analysis results + mustSerializeMkdirAllAndWriteFile(actualDestdir, "analysis_classic.json", analysisClassic) } } diff --git a/internal/cmd/qatool/main_test.go b/internal/cmd/qatool/main_test.go index de2bfdfe70..a6aab11db9 100644 --- a/internal/cmd/qatool/main_test.go +++ b/internal/cmd/qatool/main_test.go @@ -65,15 +65,23 @@ func TestMainSuccess(t *testing.T) { // make sure we attempted to write the desired files expect := map[string]bool{ - "xo/dnsBlockingAndroidDNSCacheNoData/measurement.json": true, - "xo/dnsBlockingAndroidDNSCacheNoData/observations.json": true, - "xo/dnsBlockingAndroidDNSCacheNoData/analysis.json": true, - "xo/dnsBlockingBOGON/analysis.json": true, - "xo/dnsBlockingBOGON/measurement.json": true, - "xo/dnsBlockingBOGON/observations.json": true, - "xo/dnsBlockingNXDOMAIN/measurement.json": true, - "xo/dnsBlockingNXDOMAIN/observations.json": true, - "xo/dnsBlockingNXDOMAIN/analysis.json": true, + "xo/dnsBlockingAndroidDNSCacheNoData/measurement.json": true, + "xo/dnsBlockingAndroidDNSCacheNoData/observations.json": true, + "xo/dnsBlockingAndroidDNSCacheNoData/observations_classic.json": true, + "xo/dnsBlockingAndroidDNSCacheNoData/analysis.json": true, + "xo/dnsBlockingAndroidDNSCacheNoData/analysis_classic.json": true, + + "xo/dnsBlockingBOGON/analysis.json": true, + "xo/dnsBlockingBOGON/analysis_classic.json": true, + "xo/dnsBlockingBOGON/measurement.json": true, + "xo/dnsBlockingBOGON/observations.json": true, + "xo/dnsBlockingBOGON/observations_classic.json": true, + + "xo/dnsBlockingNXDOMAIN/measurement.json": true, + "xo/dnsBlockingNXDOMAIN/observations.json": true, + "xo/dnsBlockingNXDOMAIN/observations_classic.json": true, + "xo/dnsBlockingNXDOMAIN/analysis.json": true, + "xo/dnsBlockingNXDOMAIN/analysis_classic.json": true, } got := make(map[string]bool) for key := range contentmap { diff --git a/internal/minipipeline/classic.go b/internal/minipipeline/classic.go new file mode 100644 index 0000000000..58d8045149 --- /dev/null +++ b/internal/minipipeline/classic.go @@ -0,0 +1,53 @@ +package minipipeline + +// ClassicFilter takes in input a [*WebObservationsContainer] and returns in output +// another [*WebObservationsContainer] where we only keep: +// +// 1. DNS lookups using getaddrinfo; +// +// 2. IP addresses discovered using getaddrinfo; +// +// 3. endpoints using such IP addresses. +// +// We use this filter to produce a backward compatible Web Connectivity analysis +// when the input [*WebObservationsContainer] was built using LTE. +// +// The result should approximate what v0.4 would have measured. +func ClassicFilter(input *WebObservationsContainer) (output *WebObservationsContainer) { + output = &WebObservationsContainer{ + DNSLookupFailures: []*WebObservation{}, + DNSLookupSuccesses: []*WebObservation{}, + KnownTCPEndpoints: map[int64]*WebObservation{}, + knownIPAddresses: map[string]*WebObservation{}, + } + + // DNSLookupFailures + for _, entry := range input.DNSLookupFailures { + if !utilsEngineIsGetaddrinfo(entry.DNSEngine) { + continue + } + output.DNSLookupFailures = append(output.DNSLookupFailures, entry) + } + + // DNSLookupSuccesses & knownIPAddresses + for _, entry := range input.DNSLookupSuccesses { + if !utilsEngineIsGetaddrinfo(entry.DNSEngine) { + continue + } + ipAddr := entry.IPAddress.Unwrap() // it MUST be there + output.DNSLookupSuccesses = append(output.DNSLookupSuccesses, entry) + output.knownIPAddresses[ipAddr] = entry + } + + // KnownTCPEndpoints + for _, entry := range input.KnownTCPEndpoints { + ipAddr := entry.IPAddress.Unwrap() // it MUST be there + txid := entry.EndpointTransactionID.Unwrap() + if output.knownIPAddresses[ipAddr] == nil { + continue + } + output.KnownTCPEndpoints[txid] = entry + } + + return +} diff --git a/internal/minipipeline/qa_test.go b/internal/minipipeline/qa_test.go index b6fe02691b..72495dca3d 100644 --- a/internal/minipipeline/qa_test.go +++ b/internal/minipipeline/qa_test.go @@ -42,32 +42,62 @@ func testMustRunAllWebTestCases(t *testing.T, topdir string) { var expectedContainerData minipipeline.WebObservationsContainer must.UnmarshalJSON(expectedContainerRaw, &expectedContainerData) + // load the expected classic container from the test case + expectedClassicContainerFile := filepath.Join(fullpath, "observations_classic.json") + expectedClassicContainerRaw := must.ReadFile(expectedClassicContainerFile) + var expectedClassicContainerData minipipeline.WebObservationsContainer + must.UnmarshalJSON(expectedClassicContainerRaw, &expectedClassicContainerData) + // load the expected analysis from the test case expectedAnalysisFile := filepath.Join(fullpath, "analysis.json") expectedAnalysisRaw := must.ReadFile(expectedAnalysisFile) var expectedAnalysisData minipipeline.WebAnalysis must.UnmarshalJSON(expectedAnalysisRaw, &expectedAnalysisData) + // load the expected classic analysis from the test case + expectedClassicAnalysisFile := filepath.Join(fullpath, "analysis_classic.json") + expectedClassicAnalysisRaw := must.ReadFile(expectedClassicAnalysisFile) + var expectedClassicAnalysisData minipipeline.WebAnalysis + must.UnmarshalJSON(expectedClassicAnalysisRaw, &expectedClassicAnalysisData) + // load the measurement into the pipeline gotContainerData, err := minipipeline.IngestWebMeasurement(&measurementData) if err != nil { t.Fatal(err) } + // convert the container into a classic container + gotClassicContainerData := minipipeline.ClassicFilter(gotContainerData) + // analyze the measurement gotAnalysisData := minipipeline.AnalyzeWebObservations(gotContainerData) + // perform the classic web-connectivity-v0.4-like analysis + gotClassicAnalysisData := minipipeline.AnalyzeWebObservations(gotClassicContainerData) + t.Run("observations", func(t *testing.T) { if diff := testCmpDiffUsingGenericMaps(&expectedContainerData, gotContainerData); diff != "" { t.Fatal(diff) } }) + t.Run("observations_classic", func(t *testing.T) { + if diff := testCmpDiffUsingGenericMaps(&expectedClassicContainerData, gotClassicContainerData); diff != "" { + t.Fatal(diff) + } + }) + t.Run("analysis", func(t *testing.T) { if diff := testCmpDiffUsingGenericMaps(&expectedAnalysisData, gotAnalysisData); diff != "" { t.Fatal(diff) } }) + + t.Run("analysis_classic", func(t *testing.T) { + if diff := testCmpDiffUsingGenericMaps(&expectedClassicAnalysisData, gotClassicAnalysisData); diff != "" { + t.Fatal(diff) + } + }) }) } }) diff --git a/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithExpiredCertificate/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithExpiredCertificate/analysis_classic.json new file mode 100644 index 0000000000..665f445156 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithExpiredCertificate/analysis_classic.json @@ -0,0 +1,18 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithExpiredCertificate/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithExpiredCertificate/observations_classic.json new file mode 100644 index 0000000000..87275d087a --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithExpiredCertificate/observations_classic.json @@ -0,0 +1,81 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "expired.badssl.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "104.154.89.105", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "expired.badssl.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "104.154.89.105", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "104.154.89.105:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "ssl_invalid_certificate", + "TLSServerName": "expired.badssl.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "ssl_invalid_certificate", + "ControlHTTPFailure": "unknown_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithConsistentDNS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithConsistentDNS/analysis_classic.json new file mode 100644 index 0000000000..665f445156 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithConsistentDNS/analysis_classic.json @@ -0,0 +1,18 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithConsistentDNS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithConsistentDNS/observations_classic.json new file mode 100644 index 0000000000..d9d20ec64c --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithConsistentDNS/observations_classic.json @@ -0,0 +1,81 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "untrusted-root.badssl.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "104.154.89.105", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "4": { + "DNSTransactionID": 1, + "DNSDomain": "untrusted-root.badssl.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "104.154.89.105", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "104.154.89.105:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "ssl_unknown_authority", + "TLSServerName": "untrusted-root.badssl.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "ssl_unknown_authority", + "ControlHTTPFailure": "unknown_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithInconsistentDNS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithInconsistentDNS/analysis_classic.json new file mode 100644 index 0000000000..40c85462e4 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithInconsistentDNS/analysis_classic.json @@ -0,0 +1,22 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": { + "104.154.89.105": true + }, + "DNSPossiblyInvalidAddrsClassic": { + "104.154.89.105": true + }, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithInconsistentDNS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithInconsistentDNS/observations_classic.json new file mode 100644 index 0000000000..1cea166c1e --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithUnknownAuthorityWithInconsistentDNS/observations_classic.json @@ -0,0 +1,86 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "104.154.89.105", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "104.154.89.105", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "104.154.89.105:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "ssl_unknown_authority", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": "ssl_unknown_authority", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithWrongServerName/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithWrongServerName/analysis_classic.json new file mode 100644 index 0000000000..665f445156 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithWrongServerName/analysis_classic.json @@ -0,0 +1,18 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithWrongServerName/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithWrongServerName/observations_classic.json new file mode 100644 index 0000000000..0c469fe77d --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/badSSLWithWrongServerName/observations_classic.json @@ -0,0 +1,81 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "wrong.host.badssl.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "104.154.89.105", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "wrong.host.badssl.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "104.154.89.105", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "104.154.89.105:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "ssl_invalid_hostname", + "TLSServerName": "wrong.host.badssl.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "ssl_invalid_hostname", + "ControlHTTPFailure": "unknown_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPSWebsite/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPSWebsite/analysis_classic.json new file mode 100644 index 0000000000..0c5a281502 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPSWebsite/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": null, + "DNSPossiblyInvalidAddrsClassic": null, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": { + "3": true + }, + "TCPTransactionsWithUnexpectedTCPConnectFailures": null, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": null, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPSWebsite/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPSWebsite/observations_classic.json new file mode 100644 index 0000000000..84d44f4781 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPSWebsite/observations_classic.json @@ -0,0 +1,86 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "www.example.org", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.org", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.org", + "HTTPRequestURL": "https://www.example.org/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 1533, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Default Web Page", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPWebsite/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPWebsite/analysis_classic.json new file mode 100644 index 0000000000..8487f963a4 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPWebsite/analysis_classic.json @@ -0,0 +1,18 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": null, + "DNSPossiblyInvalidAddrsClassic": null, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": null, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": null, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPWebsite/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPWebsite/observations_classic.json new file mode 100644 index 0000000000..83bcacaeb7 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/controlFailureWithSuccessfulHTTPWebsite/observations_classic.json @@ -0,0 +1,123 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "www.example.org", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.org", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "93.184.216.34:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.org/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 1533, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Default Web Page", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + "4": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.org", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.org", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingAndroidDNSCacheNoData/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingAndroidDNSCacheNoData/analysis_classic.json new file mode 100644 index 0000000000..168a895cb3 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingAndroidDNSCacheNoData/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": "android_dns_cache_no_data", + "DNSTransactionsWithBogons": null, + "DNSTransactionsWithUnexpectedFailures": { + "2": true + }, + "DNSPossiblyInvalidAddrs": null, + "DNSPossiblyInvalidAddrsClassic": null, + "DNSPossiblyNonexistingDomains": {}, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": null, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": null, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingAndroidDNSCacheNoData/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingAndroidDNSCacheNoData/observations_classic.json new file mode 100644 index 0000000000..d4aa8f064b --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingAndroidDNSCacheNoData/observations_classic.json @@ -0,0 +1,43 @@ +{ + "DNSLookupFailures": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "android_dns_cache_no_data", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": null, + "IPAddressASN": null, + "IPAddressBogon": null, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": "www.example.com", + "ControlDNSLookupFailure": "", + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "DNSLookupSuccesses": [], + "KnownTCPEndpoints": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingBOGON/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingBOGON/analysis_classic.json new file mode 100644 index 0000000000..312e7ef2e2 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingBOGON/analysis_classic.json @@ -0,0 +1,22 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": { + "2": true + }, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": null, + "DNSPossiblyInvalidAddrsClassic": null, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": null, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": null, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "3": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingBOGON/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingBOGON/observations_classic.json new file mode 100644 index 0000000000..008a662087 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingBOGON/observations_classic.json @@ -0,0 +1,86 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "10.10.34.35", + "IPAddressASN": null, + "IPAddressBogon": true, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "10.10.34.35", + "IPAddressASN": null, + "IPAddressBogon": true, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "10.10.34.35:443", + "TCPConnectFailure": "generic_timeout_error", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingNXDOMAIN/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingNXDOMAIN/analysis_classic.json new file mode 100644 index 0000000000..c85bc4fd59 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingNXDOMAIN/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": "dns_nxdomain_error", + "DNSTransactionsWithBogons": null, + "DNSTransactionsWithUnexpectedFailures": { + "2": true + }, + "DNSPossiblyInvalidAddrs": null, + "DNSPossiblyInvalidAddrsClassic": null, + "DNSPossiblyNonexistingDomains": {}, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": null, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": null, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingNXDOMAIN/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingNXDOMAIN/observations_classic.json new file mode 100644 index 0000000000..ac821e8ad7 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsBlockingNXDOMAIN/observations_classic.json @@ -0,0 +1,43 @@ +{ + "DNSLookupFailures": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "dns_nxdomain_error", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": null, + "IPAddressASN": null, + "IPAddressBogon": null, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": "www.example.com", + "ControlDNSLookupFailure": "", + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "DNSLookupSuccesses": [], + "KnownTCPEndpoints": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPSURL/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPSURL/analysis_classic.json new file mode 100644 index 0000000000..fa2b98e8d5 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPSURL/analysis_classic.json @@ -0,0 +1,27 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": { + "130.192.182.17": true + }, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 1, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": {}, + "HTTPDiffUncommonHeadersIntersection": { + "alt-svc": true, + "content-length": true + }, + "HTTPFinalResponsesWithControl": { + "3": true + }, + "HTTPFinalResponsesWithTLS": { + "3": true + }, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPSURL/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPSURL/observations_classic.json new file mode 100644 index 0000000000..b8fdc9b5f6 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPSURL/observations_classic.json @@ -0,0 +1,91 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "130.192.182.17:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.com", + "HTTPRequestURL": "https://www.example.com/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 1533, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Default Web Page", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPURL/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPURL/analysis_classic.json new file mode 100644 index 0000000000..5beca27ae1 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPURL/analysis_classic.json @@ -0,0 +1,24 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": { + "130.192.182.17": true + }, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 1, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": {}, + "HTTPDiffUncommonHeadersIntersection": { + "content-length": true + }, + "HTTPFinalResponsesWithControl": { + "3": true + }, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPURL/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPURL/observations_classic.json new file mode 100644 index 0000000000..974ab9992d --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/dnsHijackingToProxyWithHTTPURL/observations_classic.json @@ -0,0 +1,132 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "130.192.182.17:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.com/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 1533, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Default Web Page", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "4": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "130.192.182.17:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/httpBlockingConnectionReset/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/httpBlockingConnectionReset/analysis_classic.json new file mode 100644 index 0000000000..9c30d0ab05 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/httpBlockingConnectionReset/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": { + "3": true + }, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/httpBlockingConnectionReset/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/httpBlockingConnectionReset/observations_classic.json new file mode 100644 index 0000000000..4adb2fadec --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/httpBlockingConnectionReset/observations_classic.json @@ -0,0 +1,128 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "93.184.216.34:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.com/", + "HTTPFailure": "connection_reset", + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "4": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithConsistentDNS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithConsistentDNS/analysis_classic.json new file mode 100644 index 0000000000..a5542a6434 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithConsistentDNS/analysis_classic.json @@ -0,0 +1,24 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 0.12263535551206783, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": { + "access": true, + "default": true, + "denied": true + }, + "HTTPDiffUncommonHeadersIntersection": {}, + "HTTPFinalResponsesWithControl": { + "3": true + }, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithConsistentDNS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithConsistentDNS/observations_classic.json new file mode 100644 index 0000000000..1a65ed2548 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithConsistentDNS/observations_classic.json @@ -0,0 +1,128 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "93.184.216.34:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.com/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 188, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": {}, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Access Denied", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "4": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithInconsistentDNS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithInconsistentDNS/analysis_classic.json new file mode 100644 index 0000000000..cf9867adea --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithInconsistentDNS/analysis_classic.json @@ -0,0 +1,26 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": { + "130.192.182.17": true + }, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 0.12263535551206783, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": { + "access": true, + "default": true, + "denied": true + }, + "HTTPDiffUncommonHeadersIntersection": {}, + "HTTPFinalResponsesWithControl": { + "3": true + }, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithInconsistentDNS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithInconsistentDNS/observations_classic.json new file mode 100644 index 0000000000..8c14d759ed --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/httpDiffWithInconsistentDNS/observations_classic.json @@ -0,0 +1,128 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "130.192.182.17:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.com/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 188, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": {}, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Access Denied", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "4": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "130.192.182.17:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTP/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTP/analysis_classic.json new file mode 100644 index 0000000000..c4eea5ab08 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTP/analysis_classic.json @@ -0,0 +1,21 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "6": true, + "7": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTP/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTP/observations_classic.json new file mode 100644 index 0000000000..880b34adb1 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTP/observations_classic.json @@ -0,0 +1,211 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/32447", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "http://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "6": { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "93.184.216.34:80", + "TCPConnectFailure": "connection_refused", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "7": { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 7, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "connection_refused", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTPS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTPS/analysis_classic.json new file mode 100644 index 0000000000..bf7695d42c --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTPS/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "6": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTPS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTPS/observations_classic.json new file mode 100644 index 0000000000..f0cd932a74 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionRefusedForHTTPS/observations_classic.json @@ -0,0 +1,169 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/21645", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "https://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "6": { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "connection_refused", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTP/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTP/analysis_classic.json new file mode 100644 index 0000000000..5c05bf74a9 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTP/analysis_classic.json @@ -0,0 +1,22 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": { + "6": true + }, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "7": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTP/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTP/observations_classic.json new file mode 100644 index 0000000000..c6d28ef09c --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTP/observations_classic.json @@ -0,0 +1,211 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/32447", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "http://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "6": { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "93.184.216.34:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.com/", + "HTTPFailure": "connection_reset", + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "7": { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 7, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "connection_reset", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTPS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTPS/analysis_classic.json new file mode 100644 index 0000000000..bf7695d42c --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTPS/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "6": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTPS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTPS/observations_classic.json new file mode 100644 index 0000000000..d2d31631b1 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenConnectionResetForHTTPS/observations_classic.json @@ -0,0 +1,169 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/21645", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "https://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "6": { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "connection_reset", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTP/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTP/analysis_classic.json new file mode 100644 index 0000000000..5c05bf74a9 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTP/analysis_classic.json @@ -0,0 +1,22 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": { + "6": true + }, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "7": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTP/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTP/observations_classic.json new file mode 100644 index 0000000000..10e1a2c7e5 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTP/observations_classic.json @@ -0,0 +1,211 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/32447", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "http://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "6": { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "93.184.216.34:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.com/", + "HTTPFailure": "eof_error", + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "7": { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 7, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "eof_error", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTPS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTPS/analysis_classic.json new file mode 100644 index 0000000000..bf7695d42c --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTPS/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "6": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTPS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTPS/observations_classic.json new file mode 100644 index 0000000000..17e0932715 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenEOFForHTTPS/observations_classic.json @@ -0,0 +1,169 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/21645", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "https://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "6": { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "eof_error", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenNXDOMAIN/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenNXDOMAIN/analysis_classic.json new file mode 100644 index 0000000000..8729351933 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenNXDOMAIN/analysis_classic.json @@ -0,0 +1,18 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenNXDOMAIN/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenNXDOMAIN/observations_classic.json new file mode 100644 index 0000000000..f932a6b953 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenNXDOMAIN/observations_classic.json @@ -0,0 +1,128 @@ +{ + "DNSLookupFailures": [ + { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "dns_nxdomain_error", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": null, + "IPAddressASN": null, + "IPAddressBogon": null, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/21645", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "https://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTP/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTP/analysis_classic.json new file mode 100644 index 0000000000..5c05bf74a9 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTP/analysis_classic.json @@ -0,0 +1,22 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": { + "6": true + }, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "7": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTP/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTP/observations_classic.json new file mode 100644 index 0000000000..20ee053ac2 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTP/observations_classic.json @@ -0,0 +1,211 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/32447", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "http://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "6": { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "93.184.216.34:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.com/", + "HTTPFailure": "generic_timeout_error", + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "7": { + "DNSTransactionID": 4, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 7, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "generic_timeout_error", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTPS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTPS/analysis_classic.json new file mode 100644 index 0000000000..bf7695d42c --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTPS/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": { + "6": true + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTPS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTPS/observations_classic.json new file mode 100644 index 0000000000..aba21f61f7 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/redirectWithConsistentDNSAndThenTimeoutForHTTPS/observations_classic.json @@ -0,0 +1,169 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "bit.ly", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "67.199.248.11", + "IPAddressASN": 396982, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "67.199.248.11:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "bit.ly", + "HTTPRequestURL": "https://bit.ly/21645", + "HTTPFailure": "", + "HTTPResponseStatusCode": 308, + "HTTPResponseBodyLength": 0, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Content-Length": true, + "Date": true, + "Location": true + }, + "HTTPResponseLocation": "https://www.example.com/", + "HTTPResponseTitle": "", + "HTTPResponseIsFinal": false, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "6": { + "DNSTransactionID": 5, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "generic_timeout_error", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTP/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTP/analysis_classic.json new file mode 100644 index 0000000000..07131312bf --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTP/analysis_classic.json @@ -0,0 +1,23 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 1, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": {}, + "HTTPDiffUncommonHeadersIntersection": { + "alt-svc": true, + "content-length": true + }, + "HTTPFinalResponsesWithControl": { + "4": true + }, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTP/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTP/observations_classic.json new file mode 100644 index 0000000000..fd7fa831ff --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTP/observations_classic.json @@ -0,0 +1,133 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 3, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "4": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "93.184.216.34:80", + "TCPConnectFailure": "", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": "http://www.example.com/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 1533, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Default Web Page", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "5": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 5, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTPS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTPS/analysis_classic.json new file mode 100644 index 0000000000..8be3464345 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTPS/analysis_classic.json @@ -0,0 +1,25 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 1, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": {}, + "HTTPDiffUncommonHeadersIntersection": { + "alt-svc": true, + "content-length": true + }, + "HTTPFinalResponsesWithControl": { + "3": true + }, + "HTTPFinalResponsesWithTLS": { + "3": true + }, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTPS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTPS/observations_classic.json new file mode 100644 index 0000000000..7ec93ceef9 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/successWithHTTPS/observations_classic.json @@ -0,0 +1,91 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.example.com", + "HTTPRequestURL": "https://www.example.com/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 1533, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "Default Web Page", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectTimeout/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectTimeout/analysis_classic.json new file mode 100644 index 0000000000..74934b2de4 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectTimeout/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": { + "3": true + }, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": null, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectTimeout/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectTimeout/observations_classic.json new file mode 100644 index 0000000000..b5d9906135 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectTimeout/observations_classic.json @@ -0,0 +1,86 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 2, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "generic_timeout_error", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectionRefusedWithInconsistentDNS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectionRefusedWithInconsistentDNS/analysis_classic.json new file mode 100644 index 0000000000..49660ca264 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectionRefusedWithInconsistentDNS/analysis_classic.json @@ -0,0 +1,24 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": { + "83.224.65.41": true + }, + "DNSPossiblyInvalidAddrsClassic": { + "83.224.65.41": true + }, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": { + "3": true + }, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": null, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectionRefusedWithInconsistentDNS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectionRefusedWithInconsistentDNS/observations_classic.json new file mode 100644 index 0000000000..0d808d59da --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/tcpBlockingConnectionRefusedWithInconsistentDNS/observations_classic.json @@ -0,0 +1,128 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.org", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "83.224.65.41", + "IPAddressASN": 30722, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.org", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "83.224.65.41", + "IPAddressASN": 30722, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "83.224.65.41:80", + "TCPConnectFailure": "connection_refused", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + }, + "4": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.org", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "83.224.65.41", + "IPAddressASN": 30722, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "83.224.65.41:443", + "TCPConnectFailure": "connection_refused", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "connection_refused_error", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithConsistentDNS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithConsistentDNS/analysis_classic.json new file mode 100644 index 0000000000..9e7e0e20d7 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithConsistentDNS/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": { + "3": true + }, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithConsistentDNS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithConsistentDNS/observations_classic.json new file mode 100644 index 0000000000..f30dfc9cb2 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithConsistentDNS/observations_classic.json @@ -0,0 +1,86 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "93.184.216.34", + "IPAddressASN": 15133, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "93.184.216.34:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "connection_reset", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithInconsistentDNS/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithInconsistentDNS/analysis_classic.json new file mode 100644 index 0000000000..20598b0b60 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithInconsistentDNS/analysis_classic.json @@ -0,0 +1,24 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": { + "130.192.182.17": true + }, + "DNSPossiblyInvalidAddrsClassic": { + "130.192.182.17": true + }, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": { + "3": true + }, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithInconsistentDNS/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithInconsistentDNS/observations_classic.json new file mode 100644 index 0000000000..bba581a237 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/tlsBlockingConnectionResetWithInconsistentDNS/observations_classic.json @@ -0,0 +1,86 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "3": { + "DNSTransactionID": 1, + "DNSDomain": "www.example.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "130.192.182.17", + "IPAddressASN": 137, + "IPAddressBogon": false, + "EndpointTransactionID": 3, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "130.192.182.17:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "connection_reset", + "TLSServerName": "www.example.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": false, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 1533, + "ControlHTTPResponseHeadersKeys": { + "Alt-Svc": true, + "Content-Length": true, + "Content-Type": true, + "Date": true + }, + "ControlHTTPResponseTitle": "Default Web Page" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/websiteDownNXDOMAIN/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/websiteDownNXDOMAIN/analysis_classic.json new file mode 100644 index 0000000000..7165bcf08c --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/websiteDownNXDOMAIN/analysis_classic.json @@ -0,0 +1,20 @@ +{ + "DNSExperimentFailure": "dns_nxdomain_error", + "DNSTransactionsWithBogons": null, + "DNSTransactionsWithUnexpectedFailures": {}, + "DNSPossiblyInvalidAddrs": null, + "DNSPossiblyInvalidAddrsClassic": null, + "DNSPossiblyNonexistingDomains": { + "www.example.xyz": true + }, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": null, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": null, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/generated/websiteDownNXDOMAIN/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/generated/websiteDownNXDOMAIN/observations_classic.json new file mode 100644 index 0000000000..fd2fbf95af --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/generated/websiteDownNXDOMAIN/observations_classic.json @@ -0,0 +1,43 @@ +{ + "DNSLookupFailures": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.example.xyz", + "DNSLookupFailure": "dns_nxdomain_error", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": null, + "IPAddressASN": null, + "IPAddressBogon": null, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": "www.example.xyz", + "ControlDNSLookupFailure": "dns_name_error", + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "DNSLookupSuccesses": [], + "KnownTCPEndpoints": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/manual/dnsgoogle80/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/manual/dnsgoogle80/analysis_classic.json new file mode 100644 index 0000000000..665f445156 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/manual/dnsgoogle80/analysis_classic.json @@ -0,0 +1,18 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": null, + "HTTPDiffStatusCodeMatch": null, + "HTTPDiffTitleDifferentLongWords": null, + "HTTPDiffUncommonHeadersIntersection": null, + "HTTPFinalResponsesWithControl": null, + "HTTPFinalResponsesWithTLS": null, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": null, + "TCPTransactionsWithUnexplainedUnexpectedFailures": null +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/manual/dnsgoogle80/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/manual/dnsgoogle80/observations_classic.json new file mode 100644 index 0000000000..9e08dd365b --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/manual/dnsgoogle80/observations_classic.json @@ -0,0 +1,451 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2001:4860:4860::8888", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2001:4860:4860::8844", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "8.8.8.8", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "8.8.4.4", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "10": { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "8.8.8.8", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 10, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "8.8.8.8:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "dns.google", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "generic_timeout_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + "11": { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "8.8.4.4", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 11, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "8.8.4.4:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "dns.google", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "generic_timeout_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + "4": { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2001:4860:4860::8888", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "[2001:4860:4860::8888]:80", + "TCPConnectFailure": "generic_timeout_error", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "generic_timeout_error", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "generic_timeout_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + "5": { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2001:4860:4860::8844", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 5, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "[2001:4860:4860::8844]:80", + "TCPConnectFailure": "generic_timeout_error", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "generic_timeout_error", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "generic_timeout_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + "6": { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "8.8.8.8", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "8.8.8.8:80", + "TCPConnectFailure": "timed_out", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "generic_timeout_error", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "generic_timeout_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + "7": { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "8.8.4.4", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 7, + "EndpointProto": "tcp", + "EndpointPort": "80", + "EndpointAddress": "8.8.4.4:80", + "TCPConnectFailure": "generic_timeout_error", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "generic_timeout_error", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "generic_timeout_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + "8": { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2001:4860:4860::8888", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 8, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2001:4860:4860::8888]:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "dns.google", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "generic_timeout_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + "9": { + "DNSTransactionID": 2, + "DNSDomain": "dns.google", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2001:4860:4860::8844", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 9, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2001:4860:4860::8844]:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "dns.google", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": true, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "generic_timeout_error", + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/manual/noipv6/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/manual/noipv6/analysis_classic.json new file mode 100644 index 0000000000..53bc507507 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/manual/noipv6/analysis_classic.json @@ -0,0 +1,29 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 0.6166324592304209, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": {}, + "HTTPDiffUncommonHeadersIntersection": { + "accept-ch": true, + "alt-svc": true, + "cross-origin-opener-policy": true, + "origin-trial": true, + "permissions-policy": true, + "report-to": true + }, + "HTTPFinalResponsesWithControl": { + "8": true + }, + "HTTPFinalResponsesWithTLS": { + "8": true + }, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/manual/noipv6/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/manual/noipv6/observations_classic.json new file mode 100644 index 0000000000..20e78abab0 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/manual/noipv6/observations_classic.json @@ -0,0 +1,978 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "216.58.205.46", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "142.251.209.14", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "142.251.209.46", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "142.250.180.174", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "142.250.180.142", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "216.58.204.142", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2a00:1450:4002:414::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2a00:1450:4002:411::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2a00:1450:4002:416::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2a00:1450:4002:402::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "10": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2a00:1450:4002:402::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 10, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2a00:1450:4002:402::200e]:443", + "TCPConnectFailure": "host_unreachable", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "12": { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2a00:1450:4002:411::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 12, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2a00:1450:4002:411::200e]:443", + "TCPConnectFailure": "host_unreachable", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "13": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "142.251.209.46", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 13, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "142.251.209.46:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "14": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "216.58.204.142", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 14, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "216.58.204.142:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "15": { + "DNSTransactionID": 2, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2a00:1450:4002:414::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 15, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2a00:1450:4002:414::200e]:443", + "TCPConnectFailure": "host_unreachable", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "16": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2a00:1450:4002:416::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 16, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2a00:1450:4002:416::200e]:443", + "TCPConnectFailure": "host_unreachable", + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "4": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "216.58.205.46", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "216.58.205.46:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "5": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "142.250.180.142", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 5, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "142.250.180.142:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "8": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "142.251.209.14", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 8, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "142.251.209.14:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": "https://www.youtube.com/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 524264, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "YouTube", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "9": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "142.250.180.174", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 9, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "142.250.180.174:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 850205, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + } + } +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/manual/youtube/analysis_classic.json b/internal/minipipeline/testdata/webconnectivity/manual/youtube/analysis_classic.json new file mode 100644 index 0000000000..76512b8c23 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/manual/youtube/analysis_classic.json @@ -0,0 +1,29 @@ +{ + "DNSExperimentFailure": null, + "DNSTransactionsWithBogons": {}, + "DNSTransactionsWithUnexpectedFailures": null, + "DNSPossiblyInvalidAddrs": {}, + "DNSPossiblyInvalidAddrsClassic": {}, + "DNSPossiblyNonexistingDomains": null, + "HTTPDiffBodyProportionFactor": 0.6327409384828159, + "HTTPDiffStatusCodeMatch": true, + "HTTPDiffTitleDifferentLongWords": {}, + "HTTPDiffUncommonHeadersIntersection": { + "accept-ch": true, + "alt-svc": true, + "cross-origin-opener-policy": true, + "origin-trial": true, + "permissions-policy": true, + "report-to": true + }, + "HTTPFinalResponsesWithControl": { + "8": true + }, + "HTTPFinalResponsesWithTLS": { + "8": true + }, + "TCPTransactionsWithUnexpectedTCPConnectFailures": {}, + "TCPTransactionsWithUnexpectedTLSHandshakeFailures": {}, + "TCPTransactionsWithUnexpectedHTTPFailures": {}, + "TCPTransactionsWithUnexplainedUnexpectedFailures": {} +} \ No newline at end of file diff --git a/internal/minipipeline/testdata/webconnectivity/manual/youtube/observations_classic.json b/internal/minipipeline/testdata/webconnectivity/manual/youtube/observations_classic.json new file mode 100644 index 0000000000..182e695f80 --- /dev/null +++ b/internal/minipipeline/testdata/webconnectivity/manual/youtube/observations_classic.json @@ -0,0 +1,988 @@ +{ + "DNSLookupFailures": [], + "DNSLookupSuccesses": [ + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2a00:1450:4002:402::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2a00:1450:4002:403::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2a00:1450:4002:414::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "2a00:1450:4002:416::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "142.250.180.142", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "216.58.204.142", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "142.250.180.174", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "142.251.209.14", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "142.251.209.46", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + }, + { + "DNSTransactionID": 3, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": "ANY", + "DNSEngine": "getaddrinfo", + "IPAddress": "216.58.205.46", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": null, + "EndpointProto": null, + "EndpointPort": null, + "EndpointAddress": null, + "TCPConnectFailure": null, + "TLSHandshakeFailure": null, + "TLSServerName": null, + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": null, + "MatchWithControlIPAddress": null, + "MatchWithControlIPAddressASN": null, + "ControlTLSHandshakeFailure": null, + "ControlHTTPFailure": null, + "ControlHTTPResponseStatusCode": null, + "ControlHTTPResponseBodyLength": null, + "ControlHTTPResponseHeadersKeys": null, + "ControlHTTPResponseTitle": null + } + ], + "KnownTCPEndpoints": { + "11": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2a00:1450:4002:402::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 11, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2a00:1450:4002:402::200e]:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "12": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2a00:1450:4002:403::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 12, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2a00:1450:4002:403::200e]:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "13": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2a00:1450:4002:416::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 13, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2a00:1450:4002:416::200e]:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "14": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "142.251.209.46", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 14, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "142.251.209.46:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "15": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "216.58.205.46", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 15, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "216.58.205.46:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "4": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "2a00:1450:4002:414::200e", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 4, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "[2a00:1450:4002:414::200e]:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "5": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "142.250.180.142", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 5, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "142.250.180.142:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "6": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "216.58.204.142", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 6, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "216.58.204.142:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "7": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "142.250.180.174", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 7, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "142.250.180.174:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": null, + "HTTPFailure": null, + "HTTPResponseStatusCode": null, + "HTTPResponseBodyLength": null, + "HTTPResponseBodyIsTruncated": null, + "HTTPResponseHeadersKeys": null, + "HTTPResponseLocation": null, + "HTTPResponseTitle": null, + "HTTPResponseIsFinal": null, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + }, + "8": { + "DNSTransactionID": 1, + "DNSDomain": "www.youtube.com", + "DNSLookupFailure": "", + "DNSQueryType": null, + "DNSEngine": null, + "IPAddress": "142.251.209.14", + "IPAddressASN": 15169, + "IPAddressBogon": false, + "EndpointTransactionID": 8, + "EndpointProto": "tcp", + "EndpointPort": "443", + "EndpointAddress": "142.251.209.14:443", + "TCPConnectFailure": "", + "TLSHandshakeFailure": "", + "TLSServerName": "www.youtube.com", + "HTTPRequestURL": "https://www.youtube.com/", + "HTTPFailure": "", + "HTTPResponseStatusCode": 200, + "HTTPResponseBodyLength": 524298, + "HTTPResponseBodyIsTruncated": false, + "HTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "HTTPResponseLocation": null, + "HTTPResponseTitle": "YouTube", + "HTTPResponseIsFinal": true, + "ControlDNSDomain": null, + "ControlDNSLookupFailure": null, + "ControlTCPConnectFailure": "", + "MatchWithControlIPAddress": false, + "MatchWithControlIPAddressASN": true, + "ControlTLSHandshakeFailure": "", + "ControlHTTPFailure": "", + "ControlHTTPResponseStatusCode": 200, + "ControlHTTPResponseBodyLength": 828614, + "ControlHTTPResponseHeadersKeys": { + "Accept-Ch": true, + "Accept-Ranges": true, + "Alt-Svc": true, + "Cache-Control": true, + "Content-Security-Policy-Report-Only": true, + "Content-Type": true, + "Cross-Origin-Opener-Policy": true, + "Date": true, + "Expires": true, + "Origin-Trial": true, + "P3p": true, + "Permissions-Policy": true, + "Pragma": true, + "Report-To": true, + "Server": true, + "Set-Cookie": true, + "Strict-Transport-Security": true, + "Vary": true, + "X-Content-Type-Options": true, + "X-Frame-Options": true, + "X-Xss-Protection": true + }, + "ControlHTTPResponseTitle": "YouTube" + } + } +} \ No newline at end of file