java实现ssdp协议_Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++
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++相关推荐
- 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 ...
- SSDP协议编程 upnp设备查找方法
SSDP协议编程 upnp设备查找方法 [cpp] view plaincopy int ssdp_discovery() { struct sockaddr_in addrin ; st ...
- java url压缩_URL短地址压缩算法 微博短地址原理解析 (Java实现)
最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没有找到Java版的短网址(ShortUrl)的算法,很是郁闷.同时还 ...
- ssdp协议 upnp_SSDP 简单服务发现协议
SSDP 简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一.它为网络客户端(network client)提供了一种发现网络服务(network services)的机 ...
- 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虚拟机平台) 该 ...
- ssdp协议 upnp_SSDP,简单服务发现协议
SSDP 简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一.它为网络客户端(network client)提供了一种发现网络服务(network services)的机 ...
- 利用 SSDP 协议生成 100 Gbps DDoS 流量的真相探秘
原文地址 https://www.4hou.com/technology/5979.html 上个月我们分享过一些反射型DDoS攻击数据,SSDP攻击的平均大小是12 Gbps,我们记录的最大的反射式 ...
- C实现SSDP协议的设备发现及设备搜索
/** ===========================================================================** Filename: ssdpServ ...
- ssdp协议_Cotopaxi:使用指定IoT网络协议对IoT设备进行安全测试
cotopaxi是用于IoT设备安全测试的工具集.你可以指定IoT网络协议(如CoAP,DTLS,HTCPCP,mDNS,MQTT,SSDP)进行测试. 安装 只需从git克隆代码即可:https:/ ...
- 什么是UPNP协议:UPNP协议作用及启用路由器UPNP支持的方法详细介绍
目录 [隐藏] UPNP简介 基本概念 官网解释 以下是微软官方网站对UPnP的解释: 以下是BC官方网站对UPnP的解释: UPnP是用来干什么的? 经典应用 网络地址转换 NAT 穿越技术 实际应 ...
最新文章
- StrongOD快捷键说明及其例子
- python和c先学哪个对于初中生来说-初中生想学编程,请问先学C语言好还是先学Python?...
- 深入理解Nginx 模块开发与架构解析-陶辉 读书笔记
- linux adb工具_这是一个可以显示Linux命令的工具
- Pytest框架集成Allure定制测试报告详解(一)
- Spring Boot学习总结(1)——Spring Boot入门
- 大数据技术应用有哪些特点
- 数字信号处理知识点总结(三):离散傅里叶变换(DFT)
- 分享一个本人打造的公众号吸粉、推广方案。
- Andorid 方法数超过64K的问题
- Marshmallow及ORM小结
- Rust的错误处理机制
- thymeleaf模板引擎即时生效的问题
- 先说说什么是主数据和参考数据?
- 【考试】职称英语考试那些事儿
- iOS 下载开始的时候获取将要下载完成的文件的大小
- PREP 语法笔记 10
- linux驱动环境搭建
- Ubuntu上安装xilinx PetaLinux工具的注意事项
- 江南大学计算机与科学研究生分数线,江南大学2021考研分数线已公布