NDK下 将Platinum SDK 编译成so库 (android - upnp)

本文介绍如何在多种平台上使用Platinum UPnP SDK构建DLNA/UPnP控制点和设备,重点讲解在Ubuntu环境下编译适用于Android的so库的过程及注意事项。

Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/UPnP Device),其中包括有UPnP AV Media Server, Media Render & Control Point的例子。它可以在Windows, Mac OSX, Linux, iPhone, Android, Symbian等多种C语言开发平台上编译通过且运行 

官方网址:http://www.plutinosoft.com/platinum

SDK下载地址:http://sourceforge.net/projects/platinum/

下载后得到一个PlatinumKit-1-0-4-2_99100e_aab601.zip

版本信息为

Platinum Kit Version 1-0-4-2

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

Neptune:  aab601

Platinum:  99100e

解压开来先熟悉下该包的内容

查看Platinum目录下的ReadMe.txt


该包包含了这两个主要的库

进入Platinum\Build\Targets\x86-microsoft-win32-vs2008目录

打开PlatinumManaged.sln解决方案可以看到工程的关联

NeptunePlatinum都是静态链接库,后续编译so库会用到

Platinum.Managed是动态链接库,暂时不用管

看看给android调用的so库如何编译


首先要下载ndk组件包

网址:http://developer.android.com/tools/sdk/ndk/index.html#Installing

这里我以ubuntun 64位环境为例,下载android-ndk-r8e-linux-x86_64.tar.bz2 

ubuntun下解压后配置ANDROID_NDK_ROOT环境变量

<1>使用命令vi ~/.bashrc 打开环境变量设置,并在文件末尾添加:

ANDROID_NDK_ROOT=你的ndk根目录绝对路径

export ANDROID_NDK_ROOT

<2>使用命令source  ~/.bashrc使环境变量设置生效。

<3>使用命令echo $ANDROID_NDK_ROOT查看是否生效,如果输出完整路径正确,说明环境变量设置ok.

<4>此步可选,使用cd命令进入到androidNDK/samples/hello-jni进入例子目录,然后使用命令:sudo $ANDROID_NDK_ROOT/ndk-build如果编译成功,则会生成so库,表示NDK能够正常Work

Ndk环境搭好后就可以编译Platinum lib了

<1>androidNDK目录下面生成out/config.mk文件,里面输入内容如下:

HOST_TAG:=linux-x86

然后保存退出;

<2>进入Platinum目录

打命令scons target=arm-android-linux build_config=Release

(请确保scons工具已安装)

正常的话最后会输出:scons: done building targets.表示编译完成了。

在Platinum\Build\Targets\arm-android-linux\Release目录下生成相关*.a

不带后缀的是c可执行文件

<3>进入到/PlatinumKit/Platinum/Source/Platform/Android/module/platinum/jni目录下面,

注意:这里需要先修改该jni目录下的Android.mk文件,将LOCAL_LDLIBS += -laxTls改为LOCAL_LDLIBS += -laxTLS,主要是前面生成库的名字是-laxTLS而不是-laxTls

使用命令:$ANDROID_NDK_ROOT/ndk-build NDK_DEBUG=0

编译之后会输出如下信息,表示生成SO库成功。

SharedLibrary  : libplatinum-jni.so

Install        : libplatinum-jni.so => libs/armeabi/libplatinum-jni.so

进入到目录PlatinumKit/Platinum/Source/Platform/Android/module/platinum/lib目录下面可以看到生成so.

最后是测试该so

将Platinum\Source\Platform\Android下的两个工厂导入eclipse

一个是lib工程,一个是apk工程,建立引用关系,然后在platinum工程下建立libs/armeabi目录并将前面编好的so库放进去


运行sample-upnp



示例比较粗糙,start后设备并不能被外界发现,需要自己重新封装,具体用法可参照

Platinum\Source\Tests\MediaRenderer下的MediaRendererTest.cpp文件

可在PlatinumManaged.sln解决方案下将MediaRendererTest工程导入,然后配置项目依赖项把那两个静态库添进来,在window下将MediaRendererTest跑起来可被外界发现

至此一个简单的platinumso库封装和调用就实现了

至于DMR,DMS以及DMC等实现就需要自己先摸透该框架的使用方法

主要涉及到这三个类

PLT_FileMediaServer:封装实现了DMS
PLT_MicroMediaController:不是库里的类,是其一个例子的类,继承了PLT_SyncMediaBrowserPLT_MediaController,即实现了DMC
PLT_MediaRenderer:实现了DMR 

另外里面许多示例程序包括Platinum.Managed都是值得参考借鉴的

好了Platinum UPnP SDK的初级使用教程到此结束

### CTFHUB 平台上的 SSRF 漏洞详情 在 CTFHUB 平台上,SSRF (Server-Side Request Forgery, 服务器端请求伪造) 是一种常见且重要的漏洞类别。该类漏洞允许攻击者通过构造特定的 URL 或参数来诱导服务器向指定目标发起 HTTP 请求。 #### 基本概念与影响范围 通常情况下,SSRF 攻击旨在使受害的应用程序作为代理去访问那些对外部网络不可见但对应用程序可见的服务资源。这些内部服务可能存储敏感数据或提供管理接口,一旦被恶意利用可能导致严重的后果[^3]。 #### 利用方式实例分析 对于某些 PHP 应用环境下的 SSRF 场景,在实际操作过程中发现了一种特殊的 payload 构造方法: ```plaintext http://challenge-80b40c7bb0f917cb.sandbox.ctfhub.com:10800/?url=http://notfound.ctfhub.com@127.0.0.1/flag.php ``` 上述 Payload 的特点在于它巧妙地运用了 `@` 符号将外部域名指向本地 IP (`127.0.0.1`) ,从而绕过了简单的黑名单过滤机制并成功触发了 SSRF 行为,最终实现了对 `/flag.php` 文件内容的非法获取[^4]。 #### 解决方案建议 针对此类问题的有效缓解措施可以从以下几个方面入手: - **输入验证加强**:严格校验用户提交的数据合法性,特别是涉及远程调用功能时要特别谨慎处理 URL 参数。 - **白名单策略实施**:仅限于信任列表内的主机名/IP 进行通信交互;同时考虑加入 DNS 缓存刷新逻辑防止缓存投毒风险。 - **协议限制应用**:避免支持过多不必要的协议(如 gopher:// 等),减少潜在威胁面。 - **防火墙配置优化**:合理设置云服务商提供的安全组规则以及 VPC 内网 ACL 控制,阻止来自公网对私有子网内资产的未授权访问尝试。 综上所述,为了有效防范 SSRF 类型的安全隐患,开发团队应当综合采取多种防护手段相结合的方式,并持续关注最新的攻防动态和技术趋势以确保系统的安全性得到保障[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值