gssdp-discover utility can scan for uPnP devices:
# Install gupnp tools sudo apt install gupnp-tools # Discover uPnP devices sudo apt install gupnp-tools Using network interface eth0 Scanning for all resources Showing "available" messages resource available USN: uuid:febed3e7-12b5-d981-39b3-ee171492f3e6 Location: http://192.168.8.8:1990/WFADevice.xml resource available USN: uuid:febed3e7-12b5-d981-39b3-ee171492f3e6::upnp:rootdevice Location: http://192.168.8.8:1990/WFADevice.xml resource available USN: uuid:e7d6ff43-6f80-31a0-bd00-8afb93ca713d Location: http://192.168.8.1:60000/e7d6ff43/gatedesc.xml resource available USN: uuid:e7d6ff43-6f80-31a0-bd00-8afb93ca713d::upnp:rootdevice Location: http://192.168.8.1:60000/e7d6ff43/gatedesc.xml # Get uPnP devices list: gssdp-discover -i eth0 -n 5 | grep Location | sort | uniq Location: http://192.168.8.1:60000/e7d6ff43/gatedesc.xml Location: http://192.168.8.8:1990/WFADevice.xml
To subscribe to uPnP events...
uPnP devices should not allow subscribe from non-LAN device (eg: CallStranger exploit)
wget -qO - http://192.168.8.8:1990/WFADevice.xml <?xml version="1.0"?> <root xmlns="urn:schemas-upnp-org:device-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <device> <deviceType>urn:schemas-wifialliance-org:device:WFADevice:1</deviceType> <friendlyName>WFADevice</friendlyName> <manufacturer>Broadcom Corporation</manufacturer> <manufacturerURL>http://www.broadcom.com</manufacturerURL> <modelDescription>Wireless Device</modelDescription> <modelName>WPS</modelName> <modelNumber>X1</modelNumber> <serialNumber>0000001</serialNumber> <UDN>uuid:febed3e7-12b5-d981-39b3-ee171492f3e6</UDN> <serviceList> <service> <serviceType>urn:schemas-wifialliance-org:service:WFAWLANConfig:1</serviceType> <serviceId>urn:wifialliance-org:serviceId:WFAWLANConfig1</serviceId> <SCPDURL>/x_wfawlanconfig.xml</SCPDURL> <controlURL>/control?WFAWLANConfig</controlURL> <eventSubURL>/event?WFAWLANConfig</eventSubURL> </service> </serviceList> </device> </root> curl -v http://192.168.8.8:1990/event?WFAWLANConfig -H "CALLBACK: <http://192.168.8.253:80>" -H "NT: upnp:event" -H "TIMEOUT: Second-1800" -X SUBSCRIBE * Trying 192.168.8.8... * TCP_NODELAY set * Connected to 192.168.8.8 (192.168.8.8) port 1990 (#0) > SUBSCRIBE /event?WFAWLANConfig HTTP/1.1 > Host: 192.168.8.8:1990 > User-Agent: curl/7.58.0 > Accept: */* > CALLBACK: <http://192.168.8.253:80> > NT: upnp:event > TIMEOUT: Second-1800 > < HTTP/1.1 200 OK < Server: POSIX, UPnP/1.0 UPnP Stack/2013.4.3.0 < Date: Fri, 12 Jun 2020 10:01:51 GMT < SID: uuid:5ee3528f-07bd-07bd-07bd-07bd00000022 < Timeout: Second-1800 < Connection: close < * Closing connection 0
uPnP allows remote control to SmartTV
To remote power device compatible with Wake-on-LAN, magic packet can be sent using wakeonlan utility
# Install wakeonlan utility sudo apt install wakeonlan # Remote wake up a device wakeonlan e4:7d:bd:31:40:c6
To use remote control:
wget -qO - http://192.168.0.21:7676/rcr/
<?xml version="1.0"?> <root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:sec="http://www.sec.co.kr/dlna" xmlns:dlna="urn:schemas-dlna-org:device-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <device> <deviceType>urn:samsung.com:device:RemoteControlReceiver:1</deviceType> <friendlyName>[TV] Samsung 6 Series (40)</friendlyName> <manufacturer>Samsung Electronics</manufacturer> <manufacturerURL>http://www.samsung.com/sec</manufacturerURL> <modelDescription>Samsung DTV RCR</modelDescription> <modelName>UE40KU6400</modelName> <modelNumber>1.0</modelNumber> <modelURL>http://www.samsung.com/sec</modelURL> <serialNumber>20090804RCR</serialNumber> <UDN>uuid:ee5ac016-1dfb-4dbc-8d72-321fa6cccd8c</UDN> <sec:deviceID>SHCHC5ZTTO2RS</sec:deviceID> <sec:ProductCap>Resolution:1920X1080,Tizen,Y2016</sec:ProductCap> <serviceList> <service> <serviceType>urn:samsung.com:service:MultiScreenService:1</serviceType> <serviceId>urn:samsung.com:serviceId:MultiScreenService</serviceId> <controlURL>/RCR/control/MultiScreenService</controlURL> <eventSubURL>/RCR/event/MultiScreenService</eventSubURL> <SCPDURL>MultiScreenService.xml</SCPDURL> </service> </serviceList> <sec:Capabilities> <sec:Capability name="samsung:multiscreen:1" port="8001" location="/ms/1.0/"/> </sec:Capabilities> </device> </root>
http://192.168.0.21:7676/RCR/control/MultiScreenService/MultiScreenService.xml
<?xml version="1.0" encoding="utf-8"?> <scpd xmlns="urn:schemas-upnp-org:service-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <actionList> <action> <name>SendKeyCode</name> <argumentList> <argument> <name>KeyCode</name> <direction>in</direction> <relatedStateVariable>A_ARG_TYPE_KeyCode</relatedStateVariable> </argument> <argument> <name>KeyDescription</name> <direction>in</direction> <relatedStateVariable>A_ARG_TYPE_KeyDescription</relatedStateVariable> </argument> </argumentList> </action> </actionList> <serviceStateTable> <stateVariable sendEvents="no"> <name>A_ARG_TYPE_KeyCode</name> <dataType>ui4</dataType> </stateVariable> <stateVariable sendEvents="no"> <name>A_ARG_TYPE_KeyDescription</name> <dataType>string</dataType> </stateVariable> </serviceStateTable> </scpd>04-Sep-2020