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

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

 

int 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信息的传送是依靠HTTPU和HTTPMU进行的。不论是控制指针,或是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


 

 

 

 

你可能感兴趣的:(编程,struct,网络,socket,service,XP)