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

[cpp] view plaincopy
  1. int ssdp_discovery()
  2. {
  3. struct sockaddr_in   addrin     ;
  4. struct timeval       rtime      ;
  5. int                  newsock    ;
  6. int                  ret        ;
  7. char                 buf[1024]  ;
  8. int                  i=0        ;
  9. int                  yes=1      ;
  10. rtime.tv_sec  = 2 ;
  11. rtime.tv_usec = 0 ;
  12. bzero(&addrin, sizeof(addrin));
  13. addrin.sin_family = AF_INET;
  14. addrin.sin_addr.s_addr = inet_addr("239.255.255.250"); //htonl(INADDR_ANY)
  15. addrin.sin_port = htons(1900);
  16. newsock=socket(AF_INET,SOCK_DGRAM,0);
  17. if( newsock < 0) {perror("1"); return -1;}
  18. setsockopt( newsock, SOL_SOCKET, SO_RCVTIMEO, (const char *)&rtime, sizeof(struct timeval));
  19. setsockopt( newsock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) ;
  20. ret=bind( newsock, (struct sockaddr *)&addrin, sizeof(addrin));
  21. if( ret < 0 )   {perror("2"); return -1;}
  22. while(i<8)
  23. {
  24. i++;
  25. yes=sizeof(struct sockaddr_in);
  26. memset(buf, 0, sizeof(buf));
  27. ret=recvfrom( newsock, &buf,sizeof(buf), 0, (struct sockaddr *)&addrin, &yes);
  28. if( ret < 0 ) {perror("3"); continue;}
  29. printf("ip:%s/n",inet_ntoa( addrin.sin_addr));
  30. }
  31. close(newsock);
  32. return 0;
  33. }

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

http://blog.csdn.net/tyyhong/article/details/4288524

SSDP协议编程 upnp设备查找方法相关推荐

  1. 什么是UPNP协议:UPNP协议作用及启用路由器UPNP支持的方法详细介绍

    目录 [隐藏] UPNP简介 基本概念 官网解释 以下是微软官方网站对UPnP的解释: 以下是BC官方网站对UPnP的解释: UPnP是用来干什么的? 经典应用 网络地址转换 NAT 穿越技术 实际应 ...

  2. UPnP协议编程实践

    本专题主要是介绍UPnP的工作原理和基本概念,包括SSDP.GENA和FXPP等基本协议,以及在Linux下如何使用Intel提供的UPnP开发包实现UPnP控制点和设备.本文是这个专题的第一篇,主要 ...

  3. C实现SSDP协议的设备发现及设备搜索

    /** ===========================================================================** Filename: ssdpServ ...

  4. android 获取设备的mac地址,Android编程获取设备MAC地址的实现方法

    本文实例讲述了Android编程获取设备MAC地址的实现方法.分享给大家供大家参考,具体如下: /** * 获取设备的mac地址 * * @param ac * @param callback * 成 ...

  5. Win11怎么搜索无线显示器?Win11查找无线显示器设备的方法

    ​Win11怎么搜索无线显示器?有Win11笔记本用户希望能够将电脑画面投放到无线投影仪或者是其他笔记本电脑上,今天就来讲讲Win11查找无线显示器设备的方法,其实非常简单. 还有详细的系统重装方法尽 ...

  6. 小米 samba linux,解决Win10.4无法访问samba协议小米路由盘修复方法

    原标题:解决Win10.4无法访问samba协议小米路由盘修复方法 近日,应该有不是朋友使用Win10升级到最新系统Windows 10 Fall Creators Update(秋季创意者更新),这 ...

  7. 利用 SSDP 协议生成 100 Gbps DDoS 流量的真相探秘

    原文地址 https://www.4hou.com/technology/5979.html 上个月我们分享过一些反射型DDoS攻击数据,SSDP攻击的平均大小是12 Gbps,我们记录的最大的反射式 ...

  8. ssdp协议 upnp_SSDP 简单服务发现协议

    SSDP 简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一.它为网络客户端(network client)提供了一种发现网络服务(network services)的机 ...

  9. 对于使用progisp软件进行ISP编程时进入不了编程模式的解决方法

    目录 对于使用progisp软件进行ISP编程时无法进入编程模式的解决方法 前提说明 Win10 解决方法 Win10 "禁用强制驱动程序签名" Win10 手动安装驱动. Win ...

最新文章

  1. JS中的7种设计模式
  2. 关于asp.net Session丢失问题的总结
  3. Android架构师亲述:我从某度外包到字节,你知道我经历了什么吗?
  4. 全球及中国教育行业投资动态与发展决策建议报告2022版
  5. WARNING: cell0 mapping not found - not syncing cell0
  6. 2016年第七届蓝桥杯C/C++ B组国赛 —— 第三题:棋子换位
  7. react学习系列1 修改create-react-app配置支持stylus
  8. 关于ORACLE 语句中,IN 超过1000个的解决方法
  9. python脚本转lua_初次使用Python脚本,proto协议文件转Lua代码
  10. Burpsuite Web渗透-扫描工具(中间攻击,渗透大牛都用来修改包和监视包)
  11. 现在更新鸿蒙会成为小白鼠吗,如果荣耀Magic3搭载了屏下镜头和鸿蒙系统,你会做第一批吗?...
  12. PKCS #1 RSA Encryption Version 1.5
  13. python基于协程的网络库gevent、eventlet
  14. 金蝶记账王和易记账哪个好_金蝶易记账和记账王的区别是什么?金蝶易记账的具体操作如下...
  15. 数学建模——指派问题
  16. java Socket IO流关闭问题(java.net.SocketException: Socket is closed)
  17. win10系统打不开qq提示错误代码0x00000005怎么办
  18. RSS阅读器FeedDemon使用方法
  19. js批量生成条形码制作前端标签打印工具
  20. 阿里90后运营的工作总结,细致而深刻!

热门文章

  1. 模拟量输入模块|CC-PAIN01|霍尼韦尔
  2. 数据库小组作业-学生选课系统(java+java swing+mysql实现)
  3. CA6140车床831003拨叉铣上端面毕业设计(说明书+CAD图纸+工序卡+过程卡)
  4. 2013年度总结:生活与工作都不容易,压力山大
  5. PyCharm入门教程——剪切、复制和粘贴
  6. 【行研报告】2021汽车直播行业研究报告——附下载链接
  7. BNU 0814 I. Pakhom and the Gully
  8. 怎样在图片内添加合适的对话框?
  9. ❤️❤️❤️Arduino语法手册 完整版
  10. 《我爱这土地》-艾青