From d53795f9b181b1e52cc1275f647daf6533e2285e Mon Sep 17 00:00:00 2001 From: David Cheeseman <5287736+nuvious@users.noreply.github.com> Date: Tue, 23 Jul 2024 01:36:37 -0400 Subject: [PATCH] Quick correction. --- Whitepaper.md | 4 ++-- Whitepaper.pdf | Bin 407005 -> 407030 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Whitepaper.md b/Whitepaper.md index fc625c0..bfd40a0 100644 --- a/Whitepaper.md +++ b/Whitepaper.md @@ -14,7 +14,7 @@ UPNP covert channels have been researched in the past. Mohamed et al. implemente # Overview -UPNP devices usually service requests using HTTP or Websockets. When devices are looking for Universal Plug and Play (UPNP) devices, they use SSDP broadcast messages to request information about devices and/or services. Specifically, a M-SEARCH request with `ssdp:all` or `upnp:rootdevice` is specified in the `MAN` field is broadcast with UDP to `239.255.255.250` on port `1900`. An `MX` value is specified in discover requests to specify the number of seconds devices have to respond. Devices then respond directly to the requestor with a Simple Service Discovery Protocol (SSDP) message providing various information. All requests and responses are formatted with HTTP/1.1 [1] [6]. Below is an example of one such response from a Roku device: +UPNP devices usually service requests using HTTP or Websockets. When devices are looking for Universal Plug and Play (UPNP) devices, they use SSDP broadcast messages to request information about devices and/or services. Specifically, a M-SEARCH request with `ssdp:all`, `upnp:rootdevice`, or other service requests is specified in the `ST` field is broadcast with UDP to `239.255.255.250` on port `1900`. An `MX` value is specified in discover requests to specify the number of seconds devices have to respond. Devices then respond directly to the requestor with a Simple Service Discovery Protocol (SSDP) message providing various information. All requests and responses are formatted with HTTP/1.1 [1] [6]. Below is an example of one such response from a Roku device: ![SSDP Packet Capture](assets/fig1.png "SSDP Packet Capture") @@ -25,7 +25,7 @@ M-SEARCH * HTTP/1.1 HOST: 239.255.255.250:1900 MAN: "ssdp:discover" MX: 1 -ST: ST: urn:dial-multiscreen-org:service:dial:1 +ST: urn:dial-multiscreen-org:service:dial:1 USER-AGENT: Chromium/125.0.6422.112 Windows ``` diff --git a/Whitepaper.pdf b/Whitepaper.pdf index 55e4a7bb16903c34f2a718d2bafe13ca74749459..3270bee4780bc3673a4c5766331c4f0bc0f5c823 100644 GIT binary patch delta 10173 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