SSDP协议编程 upnp设备查找方法

发布时间:2018-10-02 02:40:04   来源:文档文库   
字号:

SSDP协议编程 upnp设备查找方法

SSDP协议编程 upnp设备查找方法

[cpp] view plaincopyint ssdp_discovery() { struct sockaddr_in addrin ; struct timeval rtime ; int newsock ; int ret ; char buf[1024] ; int i=0 ; int yes=1 ; rtime.tv_sec = 2 ; rtime.tv_usec = 0 ; bzero(&addrin, sizeof(addrin)); addrin.sin_family = AF_INET; addrin.sin_addr.s_addr = inet_addr("239.255.255.250"); //htonl(INADDR_ANY) addrin.sin_port = htons(1900); newsock=socket(AF_INET,SOCK_DGRAM,0); if( newsock < 0) {perror("1"); return -1;} setsockopt( newsock, SOL_SOCKET, SO_RCVTIMEO, (const char *)&rtime, sizeof(struct timeval)); setsockopt( newsock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) ; ret=bind( newsock, (struct sockaddr *)&addrin, sizeof(addrin)); if( ret < 0 ) {perror("2"); return -1;} while(i<8) { i++; yes=sizeof(struct sockaddr_in); memset(buf, 0, sizeof(buf)); ret=recvfrom( newsock, &buf,sizeof(buf), 0, (struct sockaddr *)&addrin, &yes); if( ret < 0 ) {perror("3"); continue;} printf("ip:%s/n",inet_ntoa( addrin.sin_addr)); } close(newsock); return 0; }

SSDP是一个“简单服务发现协议” ,即英文“Simple Service Discovery Protocol的缩写” , 该协议定义了如何在网络上发现网络服务的方法。SSDP也规定了存放在XML文件中的信息格式。SSDP信息的传送是依靠HTTPUHTTPMU进行的。不论是控制指针,或是UPnP设备,工作中都必然用到SSDP,设备接入网络之后,要利用它向网络广播自己的存在(广播的信息中还有设备位置的描述),以便尽快与对应的控制指针建立联系;控制指针则利用SSDP来搜索自己将要控制的设备在哪里?并且可以排除已经存在的设备和控制指针――只为新近的或尚未“联络”上的双方服务。控制指针利用SSDP的方式是经由HTTPU发出搜索请求,这种请求可以很详细,能具体到需要什么样的设备以及何种服务。例如:请求对特定的VCR机进行设置时钟的服务。设备利用SSDP的方式是“收听”来自网络端口的消息,从中发现与自己匹配的信息,一旦找到与自己匹配的信息,经由HTTPMU来发送一个响应信息到控制指针。运行了UPnP服务的系统实施攻击并非难事,只要向该系统的1900端口发送一个UDP包,其中“LOCATION”域的地址指向另一个系统的Chargen端口,就可能使系统进入一个无限的连接循环,这将会导致受影响系统 CPU 和内存占用率达100%,使远程XP系统完全不能使用而拒绝了服务,只有通过重启后系统才能恢复正常。另外,攻击者只要向某个拥有众多XP主机的网络发送一个伪造的UDP报文,也可能会导致目标网络上所有的XP主机通过所选择的URL,执行了一个攻击的选择。而且当UPNP的部分服务被当作UDP来执行的时候,他产生的所有这些攻击都是难以找到的。

包格式举例

NOTIFY * HTTP/1.1

HOST: 239.255.255.250:1900

CACHE-CONTROL: max-age=10

LOCATION:http://IPADDRESS:PORT/.xml

NT: urn:schemas-upnp-org:device:InternetGatewayDevice:1

NTS: ssdp:alive

SERVER: EEYE/2001 UPnP/1.0 product/1.1

USN: uuid:EEYE

---------------------------------------------------------------------------------------------

SEARCH * HTTP/1.1

HOST: 239.255.255.250:1900

MAN: "ssdp:discover"

MX: 6

ST: urn:schemas-upnp-org:service:WANIPConnection:1

 

版权声明:本文为博主原创文章,未经博主允许不得转载。上一篇configure: error: C compiler cannot create executables错误解决

下一篇linux中的信号处理(signalalarm

本文来源:https://www.2haoxitong.net/k/doc/3d8a5103ac02de80d4d8d15abe23482fb5da0242.html

《SSDP协议编程 upnp设备查找方法.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式