diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml
index 0fdb8c379..8c4b5bcbe 100644
--- a/.github/workflows/package.yml
+++ b/.github/workflows/package.yml
@@ -7,9 +7,13 @@ on:
push:
branches:
- 'dev'
+ - 'release/*'
+
+permissions:
+ contents: read
jobs:
- testrun_package:
+ create_package:
permissions: {}
name: Package
runs-on: ubuntu-22.04
@@ -24,4 +28,64 @@ jobs:
uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0
with:
name: testrun_package
- path: testrun*.deb
\ No newline at end of file
+ path: testrun*.deb
+
+ install_package_20:
+ permissions: {}
+ needs: create_package
+ name: Install on Ubuntu 20.04
+ runs-on: ubuntu-20.04
+ timeout-minutes: 15
+ steps:
+ - name: Checkout source
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: Download package
+ uses: actions/download-artifact@v4
+ with:
+ name: testrun_package
+ - name: Install dependencies
+ shell: bash {0}
+ run: sudo cmd/prepare
+ - name: Install package
+ shell: bash {0}
+ run: sudo apt install ./testrun*.deb
+
+ install_package_22:
+ permissions: {}
+ needs: create_package
+ name: Install on Ubuntu 22.04
+ runs-on: ubuntu-22.04
+ timeout-minutes: 15
+ steps:
+ - name: Checkout source
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: Download package
+ uses: actions/download-artifact@v4
+ with:
+ name: testrun_package
+ - name: Install dependencies
+ shell: bash {0}
+ run: sudo cmd/prepare
+ - name: Install package
+ shell: bash {0}
+ run: sudo apt install ./testrun*.deb
+
+ install_package_24:
+ permissions: {}
+ needs: create_package
+ name: Install on Ubuntu 24.04
+ runs-on: ubuntu-24.04
+ timeout-minutes: 15
+ steps:
+ - name: Checkout source
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: Download package
+ uses: actions/download-artifact@v4
+ with:
+ name: testrun_package
+ - name: Install dependencies
+ shell: bash {0}
+ run: sudo cmd/prepare
+ - name: Install package
+ shell: bash {0}
+ run: sudo apt install ./testrun*.deb
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index 12884c718..f0f89a631 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -7,10 +7,6 @@ on:
# For Branch-Protection check. Only the default branch is supported. See
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
branch_protection_rule:
- # To guarantee Maintained check is occasionally updated. See
- # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
- schedule:
- - cron: '20 6 * * 4'
push:
branches: [ "main" ]
@@ -70,4 +66,4 @@ jobs:
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@1b1aada464948af03b950897e5eb522f92603cc2 # v3.24.9
with:
- sarif_file: results.sarif
+ sarif_file: results.sarif
\ No newline at end of file
diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml
index 0556a2189..d6deb1ab0 100644
--- a/.github/workflows/testing.yml
+++ b/.github/workflows/testing.yml
@@ -39,7 +39,7 @@ jobs:
run: cmd/prepare
- name: Install Testrun
shell: bash {0}
- run: TESTRUN_DIR=. cmd/install
+ run: cmd/install -l
timeout-minutes: 30
- name: Run tests
shell: bash {0}
@@ -55,6 +55,28 @@ jobs:
name: runtime_api_${{ github.run_id }}
path: runtime.tgz
+ testrun_unit:
+ permissions: {}
+ name: Unit
+ runs-on: ubuntu-20.04
+ timeout-minutes: 15
+ steps:
+ - name: Checkout source
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: Install dependencies
+ shell: bash {0}
+ run: cmd/prepare
+ - name: Install Testrun
+ shell: bash {0}
+ run: cmd/install -l
+ - name: Build Testrun
+ shell: bash {0}
+ run: cmd/build
+ timeout-minutes: 10
+ - name: Run tests
+ shell: bash {0}
+ run: bash testing/unit/run.sh
+
pylint:
permissions: {}
name: Pylint
diff --git a/.gitignore b/.gitignore
index 82b6bbf64..92779dc04 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ build/
# Ignore generated files from unit tests
testing/unit_test/temp/
+testing/unit/conn/output/
testing/unit/dns/output/
testing/unit/nmap/output/
testing/unit/ntp/output/
@@ -15,6 +16,7 @@ testing/unit/tls/output/
testing/unit/tls/tmp/
testing/unit/report/output/
testing/unit/risk_profile/output/
+testing/unit/services/output/
*.deb
make/DEBIAN/postinst
diff --git a/README.md b/README.md
index 4a04e8885..23fd843ca 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@ When manual testing or configuration changes are required, Testrun will provide
- DHCP client - The device must be able to obtain an IP address via DHCP
## Get started ▶️
-Once you have met the hardware and software requirements, you can get started with Testrun by following the [Get started guide](docs/get_started.md).
+Once you have met the hardware and software requirements, you can get started with Testrun by following the [Get started guide](docs/get_started.md). Further docs are available in the [docs directory](docs)
## Roadmap :chart_with_upwards_trend:
Testrun will constantly evolve to further support end-users by automating device network behaviour against industry standards. For further information on upcoming features, check out the [Roadmap](docs/roadmap.pdf).
@@ -59,7 +59,7 @@ We are proud of our tool and strive to provide an enjoyable experience for all o
If the application has come across a problem at any point during setup or use, please raise an issue under the [issues tab](https://github.com/google/testrun/issues). Issue templates exist for both bug reports and feature requests. If neither of these are appropriate for your issue, raise a blank issue instead.
## Contributing :keyboard:
-The contributing requirements can be found in [CONTRIBUTING.md](CONTRIBUTING.md). In short, checkout the [Google CLA](https://cla.developers.google.com/) site to get started.
+The contributing requirements can be found in [CONTRIBUTING.md](CONTRIBUTING.md). In short, checkout the [Google CLA](https://cla.developers.google.com/) site to get started. After that, check out our [developer documentation](docs/dev/README.md).
## FAQ :raising_hand:
1) I have an issue whilst installing/upgrading Testrun, what do I do?
diff --git a/cmd/build b/cmd/build
index d15171f31..d3294a681 100755
--- a/cmd/build
+++ b/cmd/build
@@ -36,15 +36,28 @@ fi
# Builds all docker images
echo Building docker images
-# Build user interface
-echo Building user interface
-if docker build -t test-run/ui -f modules/ui/ui.Dockerfile . ; then
+# Check if UI has already been built (if -l was used during install)
+if [ ! -d "modules/ui/dist" ]; then
+ cmd/build_ui
+fi
+
+# Build UI image
+if docker build -t testrun/ui -f modules/ui/ui.Dockerfile . ; then
echo Successully built the user interface
else
echo An error occured whilst building the user interface
exit 1
fi
+# Build websockets server
+echo Building websockets server
+if docker build -t testrun/ws -f modules/ws/ws.Dockerfile . ; then
+ echo Successully built the web sockets server
+else
+ echo An error occured whilst building the websockets server
+ exit 1
+fi
+
# Build network modules
echo Building network modules
mkdir -p build/network
diff --git a/cmd/build_ui b/cmd/build_ui
new file mode 100755
index 000000000..afb0d8827
--- /dev/null
+++ b/cmd/build_ui
@@ -0,0 +1,37 @@
+#!/bin/bash -e
+
+# Copyright 2023 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Build the UI
+echo Building the ui builder
+
+# Build UI builder image
+if docker build -t testrun/build-ui -f modules/ui/build.Dockerfile . ; then
+ echo Successully built the ui builder
+else
+ echo An error occured whilst building the ui builder
+ exit 1
+fi
+
+# Check that the container is not already running
+docker kill tr-ui-build 2> /dev/null || true
+
+echo "Building the user interface"
+
+# Start build container and build the ui dist
+docker run --rm -v $PWD/modules/ui:/modules/ui testrun/build-ui /bin/sh -c "npm install && npm run build"
+
+# Kill the container (Should not be running anymore)
+docker kill tr-ui-build 2> /dev/null || true
diff --git a/cmd/install b/cmd/install
index 53d12b324..c350a969f 100755
--- a/cmd/install
+++ b/cmd/install
@@ -20,15 +20,29 @@ echo Installing application dependencies
while getopts ":l" option; do
case $option in
l) # Install Testrun in local directory
- TESTRUN_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")"/.. && pwd)
+ TESTRUN_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")"/.. && pwd)
esac
done
# Check if TESTRUN_DIR has been set, otherwise install in /usr/local/testrun
if [[ -z "${TESTRUN_DIR}" ]]; then
TESTRUN_DIR=/usr/local/testrun
+
+ # Check that user is sudo
+ if [[ "$EUID" -ne 0 ]]; then
+ echo "Installing Testrun in the default location requires sudo. Run using sudo cmd/install"
+ exit 1
+ fi
+
else
TESTRUN_DIR="${TESTRUN_DIR}"
+
+ # Check that user is in docker group
+ if ! (id -nGz "$USER" | grep -qzxF "docker"); then
+ echo User is not in docker group. Follow https://docs.docker.com/engine/install/linux-postinstall/ to finish setting up docker.
+ exit 1
+ fi
+
fi
echo Installing Testrun at $TESTRUN_DIR
@@ -51,7 +65,7 @@ cp -n local/system.json.example local/system.json
deactivate
# Build docker images
-sudo cmd/build
+cmd/build
# Create local folders
mkdir -p local/devices
diff --git a/cmd/package b/cmd/package
index fc418ab05..719258a83 100755
--- a/cmd/package
+++ b/cmd/package
@@ -16,6 +16,12 @@
# Creates a package for Testrun
+# Check that user is not root
+if [[ "$EUID" == 0 ]]; then
+ echo "Must not run as root. Use cmd/package as regular user"
+ exit 1
+fi
+
MAKE_SRC_DIR=make
MAKE_CONTROL_DIR=make/DEBIAN/control
@@ -25,10 +31,10 @@ version=$(grep -R "Version: " $MAKE_CONTROL_DIR | awk '{print $2}')
# Replace invalid characters
version="${version//./_}"
-# Delete existing make files
-rm -rf $MAKE_SRC_DIR/usr
+echo Building package for testrun v${version}
# Delete existing make files
+echo Cleaning up previous build files
rm -rf $MAKE_SRC_DIR/usr
# Copy testrun script to /bin
@@ -60,6 +66,9 @@ mkdir -p $MAKE_SRC_DIR/usr/local/testrun/local/risk_profiles
mkdir -p local/root_certs
cp -r local/root_certs $MAKE_SRC_DIR/usr/local/testrun/local/
+# Build the UI
+cmd/build_ui
+
# Copy framework and modules into testrun folder
cp -r {framework,modules} $MAKE_SRC_DIR/usr/local/testrun
diff --git a/docs/README.md b/docs/README.md
index 96eb32223..5f055dbb9 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -16,3 +16,6 @@
- [Running on a virtual machine](virtual_machine.md)
- [Accessibility](ui/accessibility.mp4)
- [Roadmap](roadmap.pdf)
+
+## Something missing?
+If you feel there is some documentation that you would find useful, or have found an issue with existing documentation, please raise an issue on GitHub by navigating [here](https://github.com/google/testrun/issues/new/choose)
\ No newline at end of file
diff --git a/docs/dev/README.md b/docs/dev/README.md
new file mode 100644
index 000000000..f11b1b092
--- /dev/null
+++ b/docs/dev/README.md
@@ -0,0 +1,25 @@
+
+
+## Developer docs
+
+## Table of Contents
+1) General guidelines (this page)
+2) [Code quality](code_quality.md)
+
+## General guidelines
+As an open source project, we absolutely encourage contributions from the community to help Testrun remain an expanding but stable product. However, before contributing there are a number of things to take into consideration.
+
+1) [Sign the Google CLA](https://cla.developers.google.com/): Whether you are an individual or contributing on behalf of your organisation, you must be covered by a Google CLA.
+
+2) Determine the scope of your contribution
+
+ - Your contribution is more likely to be accepted if fewer files are changed (keep it simple)
+ - Are you going to be fixing a bug, dependency issue or a new framework capability? Whatever it is, ensure your pull request fixes or changes just one thing.
+
+3) Get in touch to discuss whether your proposed changes are likely to be accepted
+
+ - It is best to get the opinion from the core maintainers whether your proposed changes meet our objectives and align with Testrun principles.
+
+4) Fork Testrun and get developing
+
+ - We aim to provide thorough and easy to ready developer documentation to help you contribute successfully.
\ No newline at end of file
diff --git a/docs/dev/code_quality.md b/docs/dev/code_quality.md
new file mode 100644
index 000000000..47eabcf95
--- /dev/null
+++ b/docs/dev/code_quality.md
@@ -0,0 +1,16 @@
+
+
+## Code quality
+
+Whilst developing code for Testrun, there are some style guides that you should follow.
+
+ - Python: https://google.github.io/styleguide/pyguide.html
+ - Angular: https://google.github.io/styleguide/angularjs-google-style.html
+ - Shell: https://google.github.io/styleguide/shellguide.html
+ - HTML/CSS: https://google.github.io/styleguide/htmlcssguide.html
+ - JSON: https://google.github.io/styleguide/jsoncstyleguide.xml
+ - Markdown: https://google.github.io/styleguide/docguide/style.html
+
+### Automated actions
+
+The current code base has been able to achieve 0 code lint issues. To maintain this, all lint checks are enforced on pull requests to dev and main. Please ensure that these lint checks are passing before marking your pull requests as 'Ready for review'.
\ No newline at end of file
diff --git a/docs/network/README.md b/docs/network/README.md
index b5536c30c..0f97ecd7b 100644
--- a/docs/network/README.md
+++ b/docs/network/README.md
@@ -1,10 +1,9 @@
-
## Network Overview
## Table of Contents
-1) Network Overview (this page)
+1) Network overview (this page)
2) [How to identify network interfaces](identify_interfaces.md)
3) [Addresses](addresses.md)
4) [Add a new network service](add_new_service.md)
diff --git a/docs/network/add_new_service.md b/docs/network/add_new_service.md
index 7a07e43be..b3fa22514 100644
--- a/docs/network/add_new_service.md
+++ b/docs/network/add_new_service.md
@@ -65,7 +65,7 @@ COPY $MODULE_DIR/bin /testrun/bin
# Copy over all python files
COPY $MODULE_DIR/python /testrun/python
-# Do not specify a CMD or Entrypoint as Test Run will automatically start your service as required
+# Do not specify a CMD or Entrypoint as Testrun will automatically start your service as required
```
### Example of start_network_service script
diff --git a/docs/test/README.md b/docs/test/README.md
index 19aa691d8..3163b4c84 100644
--- a/docs/test/README.md
+++ b/docs/test/README.md
@@ -2,7 +2,6 @@
## Testing
-
The test requirements that are investigated by Testrun can be found in the [test modules documentation](/docs/test/modules.md).
To understand the testing results, various definitions of test results and requirements are specified in the [statuses documentation](/docs/test/statuses.md).
\ No newline at end of file
diff --git a/docs/test/modules.md b/docs/test/modules.md
index 7c5851ba4..2fe5983b1 100644
--- a/docs/test/modules.md
+++ b/docs/test/modules.md
@@ -10,7 +10,7 @@ Testrun provides some pre-built test modules for you to use when testing your ow
| Baseline | A sample test module | [Baseline module](/modules/test/baseline/README.md) |
| Connection | Verify IP and DHCP based behavior | [Connection module](/modules/test/conn/README.md) |
| DNS | Verify DNS functionality | [DNS module](/modules/test/dns/README.md) |
-| NMAP | Ensure unsecure services are disabled | [NMAP module](/modules/test/nmap/README.md) |
+| Services | Ensure unsecure services are disabled | [Services module](/modules/test/services/README.md) |
| NTP | Verify NTP functionality | [NTP module](/modules/test/ntp/README.md) |
| Protocol | Inspect BMS protocol implementation | [Protocol Module](/modules/test/protocol/README.md) |
| TLS | Determine TLS client and server behavior | [TLS module](/modules/test/tls/README.md) |
diff --git a/framework/python/src/api/api.py b/framework/python/src/api/api.py
index aed663ab8..e8e87465d 100644
--- a/framework/python/src/api/api.py
+++ b/framework/python/src/api/api.py
@@ -26,7 +26,7 @@
import uvicorn
from urllib.parse import urlparse
-from common import logger
+from common import logger, tasks
from common.device import Device
LOGGER = logger.get_logger("api")
@@ -114,7 +114,10 @@ def __init__(self, test_run):
# Allow all origins to access the API
origins = ["*"]
- self._app = FastAPI()
+ # Scheduler for background periodic tasks
+ self._scheduler = tasks.PeriodicTasks(self._test_run)
+
+ self._app = FastAPI(lifespan=self._scheduler.start)
self._app.include_router(self._router)
self._app.add_middleware(
CORSMiddleware,
@@ -165,7 +168,19 @@ async def post_sys_config(self, request: Request, response: Response):
try:
config = (await request.body()).decode("UTF-8")
config_json = json.loads(config)
+
+ # Validate req fields
+ if ("network" not in config_json or
+ "device_intf" not in config_json.get("network") or
+ "internet_intf" not in config_json.get("network") or
+ "log_level" not in config_json):
+ response.status_code = status.HTTP_400_BAD_REQUEST
+ return self._generate_msg(
+ False,
+ "Configuration is missing required fields")
+
self._session.set_config(config_json)
+
# Catch JSON Decode error etc
except JSONDecodeError:
response.status_code = status.HTTP_400_BAD_REQUEST
@@ -231,7 +246,15 @@ async def start_test_run(self, request: Request, response: Response):
False, "Configured interfaces are not " +
"ready for use. Ensure required interfaces " + "are connected.")
- device.test_modules = body_json["device"]["test_modules"]
+ # UI doesn't send individual test configs so we need to
+ # merge these manually until the UI is updated to handle
+ # the full config file
+ for module_name, module_config in device.test_modules.items():
+ # Check if the module exists in UI test modules
+ if module_name in body_json["device"]["test_modules"]:
+ # Merge the enabled state
+ module_config["enabled"] = body_json[
+ "device"]["test_modules"][module_name]["enabled"]
LOGGER.info("Starting Testrun with device target " +
f"{device.manufacturer} {device.model} with " +
@@ -464,6 +487,19 @@ async def save_device(self, request: Request, response: Response):
device_json.get(DEVICE_MODEL_KEY)
)
+ # Check if device folder exists
+ device_folder = os.path.join(self._test_run.get_root_dir(),
+ DEVICES_PATH,
+ device_json.get(DEVICE_MANUFACTURER_KEY) +
+ " " +
+ device_json.get(DEVICE_MODEL_KEY))
+
+ if os.path.exists(device_folder):
+ response.status_code = status.HTTP_409_CONFLICT
+ return self._generate_msg(
+ False, "A folder with that name already exists, " \
+ "please rename the device or folder")
+
if device is None:
# Create new device
@@ -679,6 +715,11 @@ async def update_profile(self, request: Request, response: Response):
response.status_code = status.HTTP_400_BAD_REQUEST
return self._generate_msg(False, "Invalid request received")
+ # Validate json profile
+ if not self.get_session().validate_profile_json(req_json):
+ response.status_code = status.HTTP_400_BAD_REQUEST
+ return self._generate_msg(False, "Invalid request received")
+
profile_name = req_json.get("name")
# Check if profile exists
diff --git a/framework/python/src/common/mqtt.py b/framework/python/src/common/mqtt.py
new file mode 100644
index 000000000..c58d24d3f
--- /dev/null
+++ b/framework/python/src/common/mqtt.py
@@ -0,0 +1,62 @@
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""MQTT client"""
+import json
+import typing as t
+import paho.mqtt.client as mqtt_client
+from common import logger
+
+LOGGER = logger.get_logger("mqtt")
+WEBSOCKETS_HOST = "localhost"
+WEBSOCKETS_PORT = 1883
+
+class MQTTException(Exception):
+ def __init__(self, message: str) -> None:
+ super().__init__(message)
+
+
+class MQTT:
+ """ MQTT client class
+ """
+ def __init__(self) -> None:
+ self._host = WEBSOCKETS_HOST
+ self._client = mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION2)
+ LOGGER.setLevel(logger.logging.INFO)
+ self._client.enable_logger(LOGGER)
+
+ def _connect(self):
+ """Establish connection to Mosquitto server
+
+ Raises:
+ MQTTException: Raises exception on connection error
+ """
+ if not self._client.is_connected():
+ try:
+ self._client.connect(self._host, WEBSOCKETS_PORT, 60)
+ except (ValueError, ConnectionRefusedError) as e:
+ LOGGER.error("Can't connect to host")
+ raise MQTTException("Connection to the Mosquitto server failed") from e
+
+ def send_message(self, topic: str, message: t.Union[str, dict]) -> None:
+ """Send message to specific topic
+
+ Args:
+ topic (str): mqtt topic
+ message (t.Union[str, dict]): message
+ """
+ self._connect()
+ if isinstance(message, dict):
+ message = json.dumps(message)
+ self._client.publish(topic, str(message))
diff --git a/framework/python/src/common/risk_profile.py b/framework/python/src/common/risk_profile.py
index 6afb229ac..f50dffdde 100644
--- a/framework/python/src/common/risk_profile.py
+++ b/framework/python/src/common/risk_profile.py
@@ -96,11 +96,11 @@ def get_file_path(self):
self.name + '.json')
def _validate(self, profile_json, profile_format):
- if self._valid(profile_json, profile_format):
- if self._expired():
- self.status = 'Expired'
+ if self._expired():
+ self.status = 'Expired'
+ elif self._valid(profile_json, profile_format):
# User only wants to save a draft
- elif 'status' in profile_json and profile_json['status'] == 'Draft':
+ if 'status' in profile_json and profile_json['status'] == 'Draft':
self.status = 'Draft'
else:
self.status = 'Valid'
@@ -409,6 +409,14 @@ def _generate_risk_questions(self):
content += ''
+ # Question risk label
+ if 'risk' in question:
+ if question['risk'] == 'High':
+ content += '
| Destination | Type | Version | -Timestamp | +Count | +Sync Request Average | ''' - for row in ntp_table_data: - - # Timestamp of the NTP packet - dt_object = datetime.utcfromtimestamp(row['Timestamp']) - - # Extract milliseconds from the fractional part of the timestamp - milliseconds = int((row['Timestamp'] % 1) * 1000) + # Generate the HTML table with the count column + for (src, dst, typ, + version), avg_diff in average_time_between_requests.items(): + cnt = len(timestamps[(src, dst, typ, version)]) - # Format the datetime object with milliseconds - formatted_time = dt_object.strftime( - '%b %d, %Y %H:%M:%S.') + f'{milliseconds:03d}' + # Sync Average only applies to client requests + if 'Client' in typ: + # Convert avg_diff to seconds and format it + avg_diff_seconds = avg_diff + avg_formatted_time = f'{avg_diff_seconds:.3f} seconds' + else: + avg_formatted_time = 'N/A' - table_content += (f''' + table_content += f'''
|---|---|---|---|---|
| {row['Source']} | -{row['Destination']} | -{row['Type']} | -{row['Version']} | -{formatted_time} | -{src} | +{dst} | +{typ} | +{version} | +{cnt} | +{avg_formatted_time} | + ''' table_content += '''
- Risk profile is required for device verification. Please, consider creating a - Risk assessment profile for your ZIP report. +
+ Risk Profile is required for device verification. Please consider going to + Risk Assessment + and creating a profile to attach to your report.
-1"> + Risk Profile is required for device verification. Please select a profile from + the list, or go to + Risk Assessment + and create a new one to attach to your report. +
+ +| Requests to local DNS server | Requests to external DNS servers | Total DNS requests | Total DNS responses |
|---|---|---|---|
| 71 | 6 | 77 | 91 |
| Source | Destination | Type | URL |
|---|---|---|---|
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 8.8.8.8 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 8.8.8.8 | Query | mqtt.googleapis.com |
| 8.8.8.8 | 10.10.10.4 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 8.8.8.8 | 10.10.10.4 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | pool.ntp.org |
| 10.10.10.14 | 10.10.10.4 | Query | pool.ntp.org |
| 10.10.10.4 | 8.8.8.8 | Query | pool.ntp.org |
| 10.10.10.4 | 8.8.8.8 | Query | pool.ntp.org |
| 8.8.8.8 | 10.10.10.4 | Response | pool.ntp.org |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org |
| 8.8.8.8 | 10.10.10.4 | Response | pool.ntp.org |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | pool.ntp.org |
| 10.10.10.14 | 10.10.10.4 | Query | pool.ntp.org |
| 10.10.10.4 | 8.8.8.8 | Query | pool.ntp.org |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org |
| 8.8.8.8 | 10.10.10.4 | Response | pool.ntp.org |
| 10.10.10.4 | 8.8.8.8 | Response | pool.ntp.org |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 8.8.8.8 | Query | mqtt.googleapis.com |
| 8.8.8.8 | 10.10.10.4 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | pool.ntp.org |
| 10.10.10.14 | 10.10.10.4 | Query | pool.ntp.org |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | pool.ntp.org |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com |
| Requests to local DNS server | Requests to external DNS servers | Total DNS requests | Total DNS responses |
|---|---|---|---|
| 71 | 0 | 71 | 84 |
| Source | Destination | Type | URL | Count |
|---|---|---|---|---|
| 10.10.10.14 | 10.10.10.4 | Query | mqtt.googleapis.com | 64 |
| 10.10.10.4 | 10.10.10.14 | Response | mqtt.googleapis.com | 76 |
| 10.10.10.14 | 10.10.10.4 | Query | pool.ntp.org | 7 |
| 10.10.10.4 | 10.10.10.14 | Response | pool.ntp.org | 8 |
| Destination | Type | Version | -Timestamp | +Count | +Sync Request Average | -|
|---|---|---|---|---|---|---|
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:29.447 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:29.448 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:31.577 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:31.577 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:33.694 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:33.694 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:35.785 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:35.786 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:37.806 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:37.806 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:39.856 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:39.856 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:41.931 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:41.932 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:43.954 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:43.956 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:13:06.439 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:06.439 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:13:08.492 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:08.494 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:13:40.536 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:40.541 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:13:48.274 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:48.277 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:14:12.619 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:12.624 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:14:44.702 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:44.703 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:14:53.026 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:53.029 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:15:16.786 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:16.791 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:15:48.884 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:48.887 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:15:57.829 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:57.829 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:16:20.970 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:16:20.970 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:16:54.054 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:16:54.054 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:17:02.738 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:17:02.740 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:17:26.136 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:17:26.139 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:17:59.293 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:17:59.293 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:18:07.242 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:18:07.242 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:18:32.379 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:18:32.379 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:20:06.908 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:20:06.908 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:20:08.936 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:20:08.937 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:20:10.974 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:20:10.974 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:20:12.998 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:20:12.999 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:20:59.581 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:20:59.582 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:21:34.063 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:21:34.063 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:21:36.121 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:21:36.121 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:21:38.176 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:21:38.176 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:21:40.277 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:21:40.277 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:22:05.704 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:22:05.706 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:22:45.469 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:22:45.470 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:23:09.826 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:23:09.828 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:23:50.337 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:23:50.343 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:24:13.945 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:24:13.946 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:24:54.876 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:24:54.877 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:25:59.000 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:25:59.001 | -||
| 10.10.10.15 | -216.239.35.12 | -Client | -4 | -Feb 15, 2024 22:12:28.681 | -||
| 216.239.35.12 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:28.728 | -||
| 10.10.10.15 | -216.239.35.4 | -Client | -4 | -Feb 15, 2024 22:12:28.842 | -||
| 216.239.35.4 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:28.888 | -||
| 10.10.10.15 | -216.239.35.8 | -Client | -4 | -Feb 15, 2024 22:12:29.042 | -||
| 216.239.35.8 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:29.089 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:12:29.243 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:29.290 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:29.447 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:29.448 | -||
| 10.10.10.15 | -216.239.35.12 | -Client | -4 | -Feb 15, 2024 22:12:30.802 | -||
| 216.239.35.12 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:30.850 | -||
| 10.10.10.15 | -216.239.35.4 | -Client | -4 | -Feb 15, 2024 22:12:30.973 | -||
| 216.239.35.4 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:31.032 | -||
| 10.10.10.15 | -216.239.35.8 | -Client | -4 | -Feb 15, 2024 22:12:31.173 | -||
| 216.239.35.8 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:31.220 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:12:31.376 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:31.423 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:31.577 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:31.577 | -||
| 10.10.10.15 | -216.239.35.12 | -Client | -4 | -Feb 15, 2024 22:12:32.867 | -||
| 216.239.35.12 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:32.914 | -||
| 10.10.10.15 | -216.239.35.4 | -Client | -4 | -Feb 15, 2024 22:12:33.112 | -||
| 216.239.35.4 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:33.159 | -||
| 10.10.10.15 | -216.239.35.8 | -Client | -4 | -Feb 15, 2024 22:12:33.271 | -||
| 216.239.35.8 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:33.318 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:12:33.475 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:33.522 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:33.694 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:33.694 | -||
| 10.10.10.15 | -216.239.35.12 | -Client | -4 | -Feb 15, 2024 22:12:34.956 | -||
| 216.239.35.12 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:35.002 | -||
| 10.10.10.15 | -216.239.35.4 | -Client | -4 | -Feb 15, 2024 22:12:35.182 | -||
| 216.239.35.4 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:35.228 | -||
| 10.10.10.15 | -216.239.35.8 | -Client | -4 | -Feb 15, 2024 22:12:35.398 | -||
| 216.239.35.8 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:35.445 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:12:35.625 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:35.673 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:35.785 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:35.786 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:37.806 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:37.806 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:39.856 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:39.856 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:41.931 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:41.932 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:12:43.954 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:12:43.956 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:13:06.439 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:13:06.439 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:06.439 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:06.489 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:13:08.492 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:08.494 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:08.543 | -||
| 10.10.10.15 | -216.239.35.12 | -Client | -4 | -Feb 15, 2024 22:13:40.310 | -||
| 216.239.35.12 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:40.357 | -||
| 10.10.10.15 | -216.239.35.4 | -Client | -4 | -Feb 15, 2024 22:13:40.512 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:13:40.536 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:40.542 | -||
| 216.239.35.4 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:40.574 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:40.583 | -||
| 10.10.10.15 | -216.239.35.8 | -Client | -4 | -Feb 15, 2024 22:13:40.714 | -||
| 216.239.35.8 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:40.764 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:13:40.917 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:40.965 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:13:48.274 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:13:48.277 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:14:12.619 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:12.624 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:12.668 | -||
| 10.10.10.15 | -216.239.35.12 | -Client | -4 | -Feb 15, 2024 22:14:44.515 | -||
| 216.239.35.12 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:44.562 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:14:44.702 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:44.704 | -||
| 10.10.10.15 | -216.239.35.4 | -Client | -4 | -Feb 15, 2024 22:14:45.158 | -||
| 216.239.35.4 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:45.219 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:14:45.359 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:45.406 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:14:45.707 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:45.755 | -||
| 10.10.10.15 | -216.239.35.8 | -Client | -4 | -Feb 15, 2024 22:14:45.980 | -||
| 216.239.35.8 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:46.027 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:14:53.026 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:14:53.029 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:15:16.786 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:16.791 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:15:18.794 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:18.843 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:15:48.884 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:48.887 | -||
| 10.10.10.15 | 216.239.35.12 | Client | 4 | -Feb 15, 2024 22:15:49.063 | +8 | +37.942 seconds |
| 216.239.35.12 | 10.10.10.15 | Server | 4 | -Feb 15, 2024 22:15:49.110 | -||
| 10.10.10.15 | -216.239.35.4 | -Client | -4 | -Feb 15, 2024 22:15:49.462 | -||
| 216.239.35.4 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:49.509 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:15:50.127 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:50.175 | -||
| 10.10.10.15 | -216.239.35.8 | -Client | -4 | -Feb 15, 2024 22:15:51.107 | -||
| 216.239.35.8 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:51.154 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:15:51.890 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:51.938 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:15:57.829 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:15:57.829 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:16:20.970 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:16:20.971 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:16:24.975 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:16:25.023 | +8 | +N/A |
| 10.10.10.15 | 216.239.35.4 | Client | 4 | -Feb 15, 2024 22:16:53.677 | +8 | +37.834 seconds |
| 216.239.35.4 | 10.10.10.15 | Server | 4 | -Feb 15, 2024 22:16:53.739 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:16:54.054 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:16:54.054 | -||
| 10.10.10.15 | -216.239.35.12 | -Client | -4 | -Feb 15, 2024 22:16:54.276 | -||
| 216.239.35.12 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:16:54.322 | -||
| 10.10.10.15 | -216.239.35.0 | -Client | -4 | -Feb 15, 2024 22:16:54.593 | -||
| 216.239.35.0 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:16:54.648 | +8 | +N/A |
| 10.10.10.15 | 216.239.35.8 | Client | 4 | -Feb 15, 2024 22:16:55.435 | +8 | +38.056 seconds |
| 216.239.35.8 | 10.10.10.15 | Server | 4 | -Feb 15, 2024 22:16:55.481 | +8 | +N/A |
| 10.10.10.15 | 216.239.35.0 | Client | 4 | -Feb 15, 2024 22:16:57.059 | +14 | +20.601 seconds |
| 216.239.35.0 | 10.10.10.15 | Server | 4 | -Feb 15, 2024 22:16:57.107 | -||
| 10.10.10.15 | -10.10.10.5 | -Client | -4 | -Feb 15, 2024 22:17:02.738 | -||
| 10.10.10.5 | -10.10.10.15 | -Server | -4 | -Feb 15, 2024 22:17:02.740 | +17 | +N/A |
| 10.10.10.15 | 10.10.10.5 | Client | 4 | -Feb 15, 2024 22:17:26.136 | +63 | +13.057 seconds |
| 10.10.10.5 | 10.10.10.15 | Server | 4 | -Feb 15, 2024 22:17:26.139 | +63 | +N/A |