Atitit.upnpSSDP查找nas的原理与实现java php c#.net c++

1.查找nas的原理

准备使用smb协议,但是使用unc好像太慢,直接使用smb其ip都返回true;

或许使用ip/path的方式是可以的。。

而且也没办法区分nas和pc

只好使用upnp ssdp协议来发现nas了。。

2.与dlna的关系

dlna是一套标准,是由微软,因特尔,索尼等大厂商组成的联盟,他们制定了一套标准让大家去用。其实dlna基本没做什么事,里面用到的协议都是现成的,而upnp是dlna进行设备控制的一个最基本的协议。如果要有dlna做了什么的话,那么就是把upnp这套协议的内容用在了数字家庭领域。使它得到了极大的发展

作者::绰号:老哇的爪子(全名::AttilaxAkbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )汉字名:艾龙,EMAIL:1466519819@qq.com

转载请注明来源:http://blog.csdn.net/attilax

3.与ssdp的关系

简单服务发现协议(SSDP,Simple Service Discovery Protocol)是一种应用层协议,是构成通用即插即用(UPnP)技术的核心协议之一。

SSDP:Simple Sever Discovery Protocol,简单服务发现协议,此协议为网络客户提供一种无需任何配置、管理和维护网络设备服务的机制。此协议采用基于通知和发现路由的多播发现方式实现。协议客户端在保留的多播地址:239.255.255.250:1900(IPV4)发现服务,

SSDP 协议消息

1、设备查询消息

当一个控制点加入到网络中时,设备发现过程允许控制点寻找网络上感兴趣的设备。发现消息包括设备的一些特定信息或者某项服务的信息,例如它的类型、标识符、和指向XML设备描述文档的指针。从设备获得响应从本质上说,内容与多址传送的设备广播相同,只是采用单址传送方式。设备查询通过HTTP协议扩展M-SEARCH方法实现的。典型的设备查询请求消息格式:

M-SEARCH * HTTP/1.1

HOST: 239.255.255.250:1900

MAN: "ssdp:discover"

MX: seconds to delay response

ST: search target

在设备接收到查询请求并且查询类型(ST字段值)与此设备匹配时,设备必须向多播地址239.255.255.250:1900回应响应消息。典型:

HTTP/1.1 200 OK

CACHE-CONTROL: max-age = seconds until advertisement expires

DATE: when reponse was generated

EXT:

LOCATION: URL for UPnP description for root device

SERVER: OS/Version UPNP/1.0 product/version

ST: search target

USN: advertisement UUID

4.Cling - Java/Android UPnP library and tools

3.2. Client operations with ControlPoint

Your primary API when writing a UPnP client application is theControlPoint. An instance is available withgetControlPoint()on theUpnpService.

publicinterfaceControlPoint{publicvoidsearch(UpnpHeadersearchType);publicvoidexecute(ActionCallbackcallback);publicvoidexecute(SubscriptionCallbackcallback);}

5.框架 java。Net

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

import java.net.MulticastSocket;

import java.net.NetworkInterface;

import java.net.SocketAddress;

import java.util.Scanner;

import android.content.Context;

import android.util.Log;

6.Cling  Code----

6.1.主要流程说明。。建立UpnpService发出查询请求

finalUpnpServiceupnpService=newUpnpServiceImpl(listener);

upnpService.getControlPoint().search(

newSTAllHeader()

);

6.2.// Let's wait 10 seconds for them to respond

System.out.println("Waiting 10 seconds before shutting down...");

Thread.sleep(10000);

6.3.通过回调监听器得到nas的ip地址

"presentationURI": "http://192.168.2.105:5000/",

6.4.Code--

publicstaticvoidmain(String[]args)throwsInterruptedException {

//TODOAuto-generated method stub

//UpnpServiceImpl us=new UpnpServiceImpl();

//for  (Device device : us.getRegistry().getDevices()) {

//System.out.println(AtiJson.toJson(device));

//}

// UPnP discovery is asynchronous, we need a callback

RegistryListenerlistener=newRegistryListener() {

publicvoidremoteDeviceDiscoveryStarted(Registryregistry,

RemoteDevicedevice) {

System.out.println(

"Discovery started: "+device.getDisplayString()

);

}

publicvoidremoteDeviceDiscoveryFailed(Registryregistry,

RemoteDevicedevice,

Exceptionex) {

System.out.println(

"Discovery failed: "+device.getDisplayString() +" => "+ex

);

}

publicvoidremoteDeviceAdded(Registryregistry, RemoteDevicedevice) {

System.out.println(

"Remote device available: "+device.getDisplayString()

);

System.out.println(  AtiJson.toJson(device)  );

}

publicvoidremoteDeviceUpdated(Registryregistry, RemoteDevicedevice) {

System.out.println(

"Remote device updated: "+device.getDisplayString()

);

}

publicvoidremoteDeviceRemoved(Registryregistry, RemoteDevicedevice) {

System.out.println(

"Remote device removed: "+device.getDisplayString()

);

}

publicvoidlocalDeviceAdded(Registryregistry, LocalDevicedevice) {

System.out.println(

"Local device added: "+device.getDisplayString()

);

}

publicvoidlocalDeviceRemoved(Registryregistry, LocalDevicedevice) {

System.out.println(

"Local device removed: "+device.getDisplayString()

);

}

publicvoidbeforeShutdown(Registryregistry) {

System.out.println(

"Before shutdown, the registry has devices: "

+registry.getDevices().size()

);

}

publicvoidafterShutdown() {

System.out.println("Shutdown of registry complete!");

}

};

// This will create necessary network resources for UPnP right away

System.out.println("Starting Cling...");

//   UpnpService upnpService = new UpnpServiceImpl(listener);

finalUpnpServiceupnpService=newUpnpServiceImpl(listener);

upnpService.getControlPoint().search(

newSTAllHeader()

);

// Let's wait 10 seconds for them to respond

System.out.println("Waiting 10 seconds before shutting down...");

Thread.sleep(10000);

//----------------------

//Registry registry = upnpService.getRegistry();

//Collection foundDevice = registry.getDevices();

//for (Device device : foundDevice) {

//System.out.println(AtiJson.toJson(device));

//}

//

// Release all resources and advertise BYEBYE to other UPnP devices

System.out.println("Stopping Cling...");

//     upnpService.shutdown();

System.out.println("--f");

Ret device

Remote device available: Synology DS213+ DS213+ 5.2-5644

{

"identity": {

"descriptorURL": "http://192.168.2.105:5000/ssdp/desc-DSM-eth0.xml",

"discoveredOnLocalAddress": "192.168.2.99",

"udn": {

"identifierString": "73796E6F-6473-6D00-0000-0011321cb389"

},

"maxAgeSeconds": 1900

},

"version": {

"major": 1,

"minor": 0

},

"type": {

"namespace": "schemas-upnp-org",

"type": "Basic",

"version": 1

},

"details": {

"friendlyName": "dy (DS213+)",

"manufacturerDetails": {

"manufacturer": "Synology",

"manufacturerURI": "http://www.synology.com"

},

"modelDetails": {

"modelName": "DS213+",

"modelDescription": "Synology NAS",

"modelNumber": "DS213+ 5.2-5644",

"modelURI": "http://www.synology.com"

},

"serialNumber": "0011321cb389",

"presentationURI": "http://192.168.2.105:5000/",

"dlnaDocs": []

},

"icons": []

}

7.参考

java - SSDP & Android, how to reply to a M-SEARCH - Stack Overflow.htm

SSDP协议- java学习之简单开发快乐学习- ITeye技术网站.htm

Cling核心手册- zangcf的专栏-博客频道- CSDN.NET.htm

jcifs lib can't detect NAS - Meggie_love的专栏-博客频道- CSDN.NET.htm

java实现ssdp协议_Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++相关推荐

  1. Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++

    Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++ 1. 查找nas的原理1 2. 与dlna的关系1 3. 与ssdp的关系1 4. Cling - Ja ...

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

    SSDP协议编程 upnp设备查找方法 [cpp] view plaincopy int ssdp_discovery() { struct sockaddr_in   addrin     ; st ...

  3. java url压缩_URL短地址压缩算法 微博短地址原理解析 (Java实现)

    最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷.同时还 ...

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

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

  5. wireshark-协议分析【初见】(NBNS协议,SSDP协议、IGMPv2)

    写在前面 win7:192.168.2.150(00-0c-29-CF-D3-0F) kali:192.168.2.120(00:0c:29:e7:1c:e5) (均使用的vmware虚拟机平台) 该 ...

  6. ssdp协议 upnp_SSDP,简单服务发现协议

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

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

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

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

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

  9. ssdp协议_Cotopaxi:使用指定IoT网络协议对IoT设备进行安全测试

    cotopaxi是用于IoT设备安全测试的工具集.你可以指定IoT网络协议(如CoAP,DTLS,HTCPCP,mDNS,MQTT,SSDP)进行测试. 安装 只需从git克隆代码即可:https:/ ...

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

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

最新文章

  1. StrongOD快捷键说明及其例子
  2. python和c先学哪个对于初中生来说-初中生想学编程,请问先学C语言好还是先学Python?...
  3. 深入理解Nginx 模块开发与架构解析-陶辉 读书笔记
  4. linux adb工具_这是一个可以显示Linux命令的工具
  5. Pytest框架集成Allure定制测试报告详解(一)
  6. Spring Boot学习总结(1)——Spring Boot入门
  7. 大数据技术应用有哪些特点
  8. 数字信号处理知识点总结(三):离散傅里叶变换(DFT)
  9. 分享一个本人打造的公众号吸粉、推广方案。
  10. Andorid 方法数超过64K的问题
  11. Marshmallow及ORM小结
  12. Rust的错误处理机制
  13. thymeleaf模板引擎即时生效的问题
  14. 先说说什么是主数据和参考数据?
  15. 【考试】职称英语考试那些事儿
  16. iOS 下载开始的时候获取将要下载完成的文件的大小
  17. PREP 语法笔记 10
  18. linux驱动环境搭建
  19. Ubuntu上安装xilinx PetaLinux工具的注意事项
  20. 江南大学计算机与科学研究生分数线,江南大学2021考研分数线已公布

热门文章

  1. 何凯明最新一作MAE解读系列1
  2. 教新手小白如何通过五分钟学会用Python爬取女神照片!
  3. 【原创】Structure from Motion (SfM)算法测试---3D重建简介
  4. 非计算机专业计算机基础大一考试题库,2017计算机基础大一考试题「附答案」...
  5. 电阻的种类以及选型要点
  6. javascript 闭包理解总结
  7. WEB安全之代码安全----ESAPI
  8. android GMS介绍
  9. 黑苹果E3-1290 v2(ivy bridge架构)安装成功案例分享
  10. matlab作函数图像,matlab绘制函数图像