112 lines
2.8 KiB
ReStructuredText
112 lines
2.8 KiB
ReStructuredText
.. only:: comment
|
|
|
|
© Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
|
|
|
|
.. _WebBrowser:
|
|
|
|
WebBrowser
|
|
##########
|
|
|
|
The ``WebBrowser`` provides a client interface for connecting to the :ref:`WebServer`.
|
|
|
|
Key features
|
|
============
|
|
|
|
- Connects to the :ref:`WebServer` via the ``SoftwareManager``.
|
|
- Simulates HTTP requests and HTTP packet transfer across a network
|
|
- Allows the emulation of HTTP requests between client and server:
|
|
- Automatically uses ``DNSClient`` to resolve domain names
|
|
- GET: performs an HTTP GET request from client to server
|
|
- Leverages the Service base class for install/uninstall, status tracking, etc.
|
|
|
|
Usage
|
|
=====
|
|
|
|
- Install on a Node via the ``SoftwareManager`` to start the ``WebBrowser``.
|
|
- Service runs on HTTP port 80 by default.
|
|
- Execute sending an HTTP GET request with ``get_webpage``
|
|
|
|
Implementation
|
|
==============
|
|
|
|
- Leverages ``SoftwareManager`` for sending payloads over the network.
|
|
- Provides easy interface for making HTTP requests between an HTTP client and server.
|
|
- Extends base Service class.
|
|
|
|
|
|
Examples
|
|
========
|
|
|
|
Python
|
|
""""""
|
|
|
|
The ``WebBrowser`` utilises :ref:`DNSClient` and :ref:`DNSServer` to resolve a URL.
|
|
|
|
The :ref:`DNSClient` must be configured to use the :ref:`DNSServer`. The :ref:`DNSServer` should be configured to have the ``WebBrowser`` ``target_url`` within its ``domain_mapping``.
|
|
|
|
.. code-block:: python
|
|
|
|
from primaite.simulator.network.hardware.nodes.host.computer import Computer
|
|
from primaite.simulator.system.applications.web_browser import WebBrowser
|
|
|
|
# Create Computer
|
|
computer = Computer(config={
|
|
"hostname":"computer",
|
|
"ip_address":"192.168.1.2",
|
|
"subnet_mask":"255.255.255.0",
|
|
"default_gateway":"192.168.1.1",
|
|
"start_up_duration":0,
|
|
}
|
|
)
|
|
computer.power_on()
|
|
|
|
# Install WebBrowser on computer
|
|
computer.software_manager.install(WebBrowser)
|
|
web_browser: WebBrowser = computer.software_manager.software.get("web-browser")
|
|
web_browser.run()
|
|
|
|
# configure the WebBrowser
|
|
web_browser.target_url = "example.com"
|
|
|
|
# once DNS server is configured with the correct domain mapping
|
|
# this should work
|
|
web_browser.get_webpage()
|
|
|
|
Via Configuration
|
|
"""""""""""""""""
|
|
|
|
.. code-block:: yaml
|
|
|
|
simulation:
|
|
network:
|
|
nodes:
|
|
- hostname: example_computer
|
|
type: computer
|
|
...
|
|
applications:
|
|
- type: web-browser
|
|
options:
|
|
target_url: http://example.com/
|
|
|
|
Configuration
|
|
=============
|
|
|
|
|
|
``target_url``
|
|
""""""""""""""
|
|
|
|
The URL that the ``WebBrowser`` will request when ``get_webpage`` is called without parameters.
|
|
|
|
The URL can be in any format so long as the domain is within it e.g.
|
|
|
|
The domain ``example.com`` can be matched by
|
|
|
|
- http://example.com/
|
|
- example.com
|
|
|
|
|
|
``Common Attributes``
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
See :ref:`Common Configuration`
|