Découverte de périphérique UPnP en C # à l’aide de SSDP

Découverte de périphérique UPnP en C # à l’aide de SSDP

UPnP (Universal Plug and Play) est un ensemble de protocoles réseau qui permet aux appareils de se découvrir et de communiquer entre eux sur un réseau. Il est utilisé par de nombreux appareils grand public tels que les routeurs, les imprimantes et les lecteurs multimédias. Dans cet article, nous allons explorer comment utiliser C # pour découvrir des périphériques UPnP sur un réseau à l’aide du protocole SSDP (Simple Service Discovery Protocol).

Le protocole SSDP est un protocole léger utilisé pour découvrir les périphériques UPnP sur un réseau. Il fonctionne en envoyant un message à tous les périphériques du réseau, demandant des réponses aux périphériques prenant en charge le protocole. Les réponses contiennent des informations sur l’appareil, notamment son adresse IP, son numéro de port et les services qu’il prend en charge.

Pour utiliser SSDP en C#, nous pouvons utiliser le namespace System.Net.Sockets pour envoyer un message multidiffusion et recevoir des réponses des appareils. Voici un exemple qui montre comment découvrir des périphériques UPnP à l’aide de SSDP :

using System.Net.Sockets;
using System.Net;
using System.Text;

IPEndPoint LocalEndPoint = new IPEndPoint(IPAddress.Parse("10.0.0.52"), 1901);      // modify with your local ip address
IPEndPoint MulticastEndPoint = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);

Socket UdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

UdpSocket.Bind(LocalEndPoint);

string SearchString = "M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\nMX:3\r\n\r\n";
UdpSocket.SendTo(Encoding.UTF8.GetBytes(SearchString), SocketFlags.None, MulticastEndPoint);

byte[] ReceiveBuffer = new byte[64000];
int ReceivedBytes = 0;

while (true)
{
    if (UdpSocket.Available > 0)
    {
        ReceivedBytes = UdpSocket.Receive(ReceiveBuffer, SocketFlags.None);

        if (ReceivedBytes > 0)
        {
            Console.WriteLine(Encoding.UTF8.GetString(ReceiveBuffer, 0, ReceivedBytes));
        }
    }
}

Cette fonction envoie un message de recherche SSDP à tous les appareils du réseau et écoute les réponses. Lorsqu’une réponse est reçue, elle est imprimée sur la console. Vous pouvez recevoir plusieurs fois la même réponse des mêmes appareils. Un filtrage peut donc être nécessaire.

Voici un exemple de réponse:

HTTP/1.1 200 OK
Cache-Control: max-age=3600
ST: upnp:rootdevice
USN: uuid:29884002-0207-10c5-8019-88dea1106581::upnp:rootdevice
Ext:
Server: Roku/12.0.0 UPnP/1.0 Roku/12.0.0
LOCATION: http://10.0.0.171:8060/

C’est tout! Avec seulement quelques lignes de code, vous pouvez découvrir les périphériques UPnP sur votre réseau à l’aide de C# et SSDP.