Universal Plug and Play (UPnP) er en arkitektur til flerlagsforbindelser mellem værter . Giver automatisk forbindelse af værter til hinanden og deres fælles arbejde. Baseret på TCP/IP , HTTP , XML og andre åbne internetstandarder.
Universal Plug and Play Forum (UPnP Forum) er en åben brancheforening dannet i juni 1999 for at udvikle standarder for UPnP-teknologi, der ville gøre det lettere at forbinde smarte enheder på tværs af hjemmet og i sidste ende virksomhedsnetværk. Forummedlemmer opretter og udgiver UPnP-enhedskontrolprotokoller og servicekontrolprotokoller.
I begyndelsen af juni 2001 omfattede UPnP Forum over 350 virksomheder. Forummet ledes af UPnP Steering Committee, som består af 22 medlemmer. Derudover er der et teknisk udvalg, et marketingudvalg og forskellige arbejdsudvalg, der beskæftiger sig med specifikke kategorier af enheder. Lister over forummedlemmer samt oplysninger om, hvordan man tilmelder sig det, er tilgængelige på forummets hjemmeside.
UPnP er rettet mod hjemmenetværk, små virksomhedsnetværk og andre små netværk. Det giver dataudveksling mellem to enheder, der er under kontrol af enhver netværkskontrolenhed. UPnP fungerer uanset operativsystem, fysiske medier eller programmeringssprog.
UPnP understøtter nulkonfigurationsnetværk og automatisk enhedsgenkendelse: en enhed tilslutter sig dynamisk et netværk, opnår en IP-adresse, annoncerer dens muligheder efter anmodning og indsamler oplysninger om tilstedeværelsen og mulighederne for andre enheder. Tilstedeværelsen af DHCP- og DNS -servere er valgfri; de kan kun bruges, hvis de er tilgængelige online. Desuden kan enheden automatisk logge ud af netværket, og dette vil ikke føre til nogen forstyrrelse i dens drift.
UPnP-teknologien trækker på al erfaringen fra udviklingen af internettet, den bruger aktivt mange af dets komponenter, herunder IP , TCP , UDP , HTTP og XML . UPnP-udviklingsprojektet sørger for multilateralt samarbejde mellem interesserede virksomheder inden for oprettelse af standard enhedskontrolprotokoller (DCP). Som med internettet vil disse standarder være baseret på deklarative kablede adgangsprotokoller skrevet i XML og kommunikerer over HTTP.
UPnP giver dig mulighed for programmæssigt at videresende porte. Dette bruges af applikationer som Skype, μTorrent. Nedenfor er et eksempel på brug af et OLE -objekt til at implementere en sådan omdirigering (koden er skrevet i Delphi 7, understøttet af Windows XP Service Pack 2 og højere).
bruger ..., WinSock , ComObj , ActiveX .... //For nyere versioner af Delphi, tilføj "OleAuto" i stedet for "ComObj"-enheden. ... funktion GetLocalIP : String ; //Hent lokal IP-adresse const WSVer = $101 ; var wsaData : TWSAData ; P : PHostEnt ; Buf : array [ 0 .. 127 ] af Char ; start Resultat := '' ; hvis WSAStartup ( WSVer , wsaData ) = 0 så start hvis GetHostName ( @ Buf , 128 ) = 0 , så start P := GetHostByName ( @ Buf ) ; hvis P <> nul , så Resultat := iNet_ntoa ( PINAddr ( p ^. h_addr_list ^ ) ^ ) ; ende ; WSACleanup ; ende ; ende ; procedure AddUPnPEntry ( Port : Heltal ; const Navn : ShortString ; LAN_IP : streng ) ; var Nat : Variant ; Porte : Variant ; start hvis IKKE ( LAN_IP = '127.0.0.1' ), så begynd prøv Nat := CreateOleObject ( 'HNetCfg.NATUPnP' ) ; Havne := Nat . StaticPortMappingCollection ; hvis ikke VarIsClear ( Ports ), så begynd //gør noget //ShowMessage(IntToStr(Ports.Count)); havne . Tilføj ( Port , 'TCP' , Port , LAN_IP , Sand , navn ) ; ende ; undtagen på e : Undtagelse do ShowMessage ( 'Der opstod en fejl ved tilføjelse af UPnP-porte.' + e . Besked ) ; ende ; ende ; ende ; procedure RemoveUPnPEntry ( Port : Heltal ) ; var Nat : Variant ; Porte : Variant ; start prøv Nat := CreateOleObject ( 'HNetCfg.NATUPnP' ) ; Havne := Nat . StaticPortMappingCollection ; havne . Fjern ( Port , 'TCP' ) ; undtagen ShowMessage ( 'Der opstod en fejl under fjernelse af UPnP-porte.' + 'Tjek venligst om din router understøtter UPnP og ' + 'har den aktiveret eller deaktiveret UPnP.' ) ; ende ; ende ; procedure ListUPnPEntry ; var Nat : Variant ; Porte : Variant ; Enum : IEnumVARIANT ; MyPort : OLEVariant ; IntPort , ExtPort : Heltal ; Desc , Protocol , IntClient , ExtIP : WideString ; Aktiveret : Boolean ; iValue : LongWord ; start prøv Nat := CreateOleObject ( 'HNetCfg.NATUPnP' ) ; Havne := Nat . StaticPortMappingCollection ; hvis ikke VarIsClear ( Ports ), så start Enum := IUnknown ( Ports . _NewEnum ) som IEnumVARIANT ; mens Enum . Næste ( 1 , MyPort , iValue ) = S_OK start Desc : = MyPort . Beskrivelse ; Aktiveret := MyPort . Aktiveret ; ExtIP := Min port . Ekstern IPAddress ; ExtPort := MyPort . Ekstern Port ; IntClient := MyPort . InternalClient ; IntPort := MyPort . InternalPort ; Protokol := Min havn . Protokol ; Form 1 . Memo1 . Linjer . Tilføj ( Desc + ^ I + ^ I + IntToStr ( ExtPort ) + ^ I + Protocol + ^ I + IntToStr ( IntPort ) + ^ I + IntClient ) ; ende ; ende ; undtagen ShowMessage ( 'Der opstod en fejl med at angive UPnP-porte. Tjek venligst, om din router understøtter UPnP og har UPnP aktiveret.' ) ; ende ; ende ; procedure TForm1 . Button1Click ( Afsender : TObject ) ; start AddUPnPEntry ( 8090 , 'MyProgram' , GetLocalIP ) ; //Tilføj port ende ; procedure TForm1 . Button2Click ( Afsender : TObject ) ; start RemoveUPnPEntry ( 8090 ) ; //Slet portslut ; procedure TForm1 . Button3Click ( Afsender : TObject ) ; start ListUPnPEntry ; // Opdateringsslut ;I dette eksempel blev tjenestenavnet sat til "MitProgram". Tjenestenavnet indeholder en beskrivelse af portvideresendelsesprogrammet.