TI IPNC Web网页之流程分析
流程
Appro IPNC使用的web服务器是boa。
请仔细理解下面这段话。
boa这个web服务器是GUI界面和IPNC应用程序之间的通信的桥梁。它的责任是从web GUI中接收HTTP请求,并且在解析请求之后将相应的参数和值传递回去。
通过HTTP抓包工具,我们可以更好的理解这段话..
我们使用wireshark
,过滤条件是http && ip.src == 192.168.1.11
,其中ip是你本机ip。
如上图所示,这就是我们使用IE打开打开IPNC设备IP,成功进入到登录界面时,捕捉到的包。
按照从上到下,我们可以清楚的看到整个请求的流程。
当然这上面是我修改过显示的结果(为了显示中英文的网页),和原始的不太一致,不过顺序没变。
首先,当然还是index.htm
,这在nfs文件系统里的/var/www
路径下可发现。
由于需要判断系统语言而选择加载不同web文件(gz),所以我用自动跳转glogon.cgi代码代替原有的index.htm中的内容。
加载顺序
loadactivex.htm->gLogon.htm->IPNCWebDlls.CAB->gIPNC-ro.gz
最原始的index.htm
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head>
<title>Multimedia Playback&Recording System</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1"></head>
<FRAMESET Rows="0%,100%" border="0">
<frame src="loadActiveX.htm" noresize="noresize"/>
<frame src="gLogon.htm"/>
</FRAMESET>
</html>
原始的loadActiveX.htm
<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</HEAD>
<BODY>
<OBJECT ID="gffx" CLASSID="CLSID:B2F190F0-1FA4-4D77-9ABD-1A054D23653D" Width=0 Height=0 codebase="/IPNCWebDlls.CAB#version=-1,-1,-1,-1"></OBJECT>
</BODY>
</HTML>
原始的gLogon.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>DM365IPNC</title>
<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<script type="text/javascript">
var currheight = -1;
var currwidth = -1;
var portno = "";
if(location.port != "")
portno = ":" + location.port
var _0x225c=["\x69\x6E\x6E\x65\x72\x57\x69\x64\x74\x68","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x69\x6E\x6E\x65\x72\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x62\x6F\x64\x79","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74"];var viewWidth;var viewHeight;if( typeof window[_0x225c[0x0]]!=_0x225c[0x1]){viewWidth=window[_0x225c[0x0]];viewHeight=window[_0x225c[0x2]];} else {if( typeof document[_0x225c[0x3]]!=_0x225c[0x1]&& typeof document[_0x225c[0x3]][_0x225c[0x4]]!=_0x225c[0x1]&&document[_0x225c[0x3]][_0x225c[0x4]]!=0x0){viewWidth=document[_0x225c[0x3]][_0x225c[0x4]];viewHeight=document[_0x225c[0x3]][_0x225c[0x5]];} else {viewWidth=document[_0x225c[0x6]][_0x225c[0x4]];viewHeight=document[_0x225c[0x6]][_0x225c[0x5]];} ;} ;
function initPage(){
if (viewWidth<1024) {viewWidth=1024}
if (viewHeight<650) {viewHeight=650}
if (document.GoDB){
document.GoDB.width = viewWidth - 20
document.GoDB.height = viewHeight
document.GoDB.focus()
}
}
function doResize(){
parent.document.location.reload();
}
</script>
</head>
<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 bgcolor=#000000 onload="initPage()" onresize="doResize()">
<table border=0 cellspacing=0 cellpadding=0>
<tr valign=middle align=center><td>
<script type="text/javascript">
document.write("<OBJECT ID=\"GoDB\" CLASSID=\"CLSID:4635CCA8-3D11-418B-8257-29CF0FE60069\" Width=1004 Height=650 codebase=\"/IPNCWebDlls.CAB#version=-1,-1,-1,-1\">")
document.write("<PARAM NAME=\"BDBUrl\" VALUE=\"http://"+location.hostname+portno+"/gIPNC-ro.gz\"></PARAM>")
document.write("<SPAN style=\"font-family: Verdana; font-size: 9px; font-weight: normal; color: #FFFFFF\">The ActiveX control that displays the application has not been installed. <a href=\"#\" onclick=\"javascript:document.location.reload()\">Reload Page</a></SPAN></OBJECT>")
</script>
</td></tr>
</table>
</body>
</html>
我们直接看body标签下的OBJECT标签。CLASSID和CODEBASE分别指定了IPNCWebDlls.CAB
在系统中的位置(dll文件)和在web服务器中的位置。如果当前系统找不到这个插件的话,则从web服务器中下载。有则加载。
PARAM标签则是添加/gIPNC-ro.gz
对象,这就是TI IPNC Web的主体文件。而上面的IPNCWebDlls.CAB
文件则是网页中播放rtsp的ActiveX插件。
所以关于TI IPNC的Web开发,都是围绕这两个文件来进行的。
在TI IPNC Web网页之GoDB开发环境此文列出的文件列表中,在GUI/docs
中有一个文档为
GUI_Keywords_IPNC.xls
,一开始看上去你可能有些摸不着头脑。没听说boa服务器下的网页需要什么关键字。原来,IPNC RDK中,boa是修改过,配合GoDB界面来改的,所以这份关键字存在与boa和GoDB工程中的代码中,一一对应的。
我们再次使用wireshark进行抓包,会发现一些东西:
下面这幅图是在登录成功之后抓到包...
先从ini.htm这个url来分析,你不用在文件系统里面寻找了,找不到这个文件的,他是直接在boa代码里面分析处理的。
web浏览器发出请求然后返回(也就是HTTP Reuqst和HTTP Repsonse)。
关于HTTP协议可参考这篇文章HTTP Request header
ini.htm的作用是返回所有关键字的值,然后GoDB将其保存起来,供各个页面读取。
GET /ini.htm HTTP/1.1
Accept: */*
Authorization: Basic YWRtaW46YWRtaW4xMjM=
User-Agent: gSync
Host: 192.168.1.181
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
HTTP/1.1 200 OK
Date: Sat, 25 Oct 2014 05:33:43 GMT
Server: Boa/0.94.13
Connection: close
Content-Type: text/html
Content-Length: 18841
Last-Modified: Sat, 25 Oct 2014 05:33:43 GMT
motionxlimit=1280<br>motionxblock=4<br>motionyblock=3<br>authorityadmin=0<br>authorityoperator=1<br>authorityviewer=2<br>user=user1:admin
user2:tracyone
user3:hehe
user4:tracysecondd
user5:aaae
user6:
user7:
user8:
user9:
user10:
user11:
user12:
user13:
user14:
user15:
user16:
<br>authority=authority1:0
authority2:1
authority3:0
authority4:0
authority5:0
authority6:9
authority7:9
authority8:9
authority9:9
authority10:9
authority11:9
authority12:9
authority13:9
authority14:9
authority15:9
authority16:9
01001000000000000
02001000000000000
03001000000000000
04001000000000000
05001000000000000
06001000000000000
07001000000000000
<br>trackip=192.168.1.31:802<br>cloudip=192.168.1.120:8001<br>rtmp_url=rtmp://192.168.1.120:1935/live/mpr6000<br>ftp_upload_time=0000<br>recordlocalstorage=2<br>ftp_upload_option=1<br>file_size=0<br>video_long=3<br>schedulerepeatenable=0<br>schedulenumweeks=52<br>scheduleinfiniteenable=1<br>kernelversion=Linux version 2.6.37_DM8127_IPNC_3.50.00 <br>biosversion=U-Boot 2010.06-svn (Dec 25 2014 - 14:23:24) DM8127_IPNC_3.50.00<br>softwareversion=DM8127 IPNC RDK VERSION 03.50.00.08<br>sdinsert=0<br>sdleft=46325760<br>sdused=48795648<br>usbinsert=0<br>hddinsert=0<br>display_mode=3<br>ppt_sw_en=0<br>ppt_sw_sensitivity=0<br>ppt_sw_interval_time=0<br>psname=0;1;2;3;4<br>piname=10 seconds;15 seconds;30 senconds;1 minutes;2 minutes;3 minutes<br>channel_id=0<br>ch_id_name=1;2;3;4<br>language=0<br>reloadflag=0<br>reloadtime=28<br>maxaccount=16<br>minnamelen=4<br>maxnamelen=32<br>minpwdlen=4<br>maxpwdlen=16<br>bkupfirmware=0<br>
...省略....
Authorization: Basic YWRtaW46YWRtaW4xMjM=
这里使用的认证方式是:Basic access authentication
这种认证方式,一句话评价,只能防住电脑小白...
接下来是
vb.htm?paratest=keyword
这样的形式查询具体某个关键字的值,有那些关键字,那就得查询GUI_Keywords_IPNC.xls
这个文档了...
当然关键字的查询是通过
vb.htm?keyword
这样的形式。百思不得其解,从boa代码里面分析的话,原作者一开始采用这样的方式获取各个关键字值,但是后面发现这样需要定义太多重复函数,就采取上面的形式...
总之,通过这样的http请求,GoDB可以获取关键字的值然后填充各个控件。
然后通过
vb.htm?keyword1=xx&keyword2=xxx
这样的形式,进行设置。
TI IPNC Web网页之流程分析的更多相关文章
- Ti IPNC Web网页之ActiveX控件
Ti IPNC Web网页之ActiveX控件 本篇介绍关于TI IPNC网页中播放器相关的东西. gStudio工程中添加播放器并控制播放器 打开IPNC网页时首先会自动下载ActiveX控件并安装 ...
- TI IPNC Web网页之网页修改教程
web网页程序修改 打开gStudio之后,点击菜单栏中Help->Contents.先把这个诡异的编程语言看一遍吧.这里搬一些东西出来. GoDB简介 从第一副图片中,我们可以看出,从源文件到 ...
- TI IPNC Web网页之GoDB开发环境
介绍 下面介绍DM8127/DM385 IPNC RDK中网页制作相关的东东. 具体来说,各位获得这个RDK包时有以下文件: IPNC_RDK_DM812x_DM385_Version3.5.0.ta ...
- TI IPNC Web网页之进阶修改
GoDB内嵌HTML 原始的页面里面已经有一个内嵌HTML的例子了,那就是维护支持页面.下图是稍微修改后的页面...请自行脑补. 这里使用的是上一节所说的gdo containter的方法. 打开ma ...
- Nginx-HTTP之静态网页访问流程分析二
11. HTTP 阶段执行 下面会依次执行以下阶段: NGX_HTTP_SERVER_REWRITE_PHASE: 在将请求的 URI 与 location 表达式匹配前,修改请求的 URI (所谓重 ...
- Nginx-HTTP之静态网页访问流程分析一
假设访问静态网页的配置如下: worker_processes 1; error_log stderr debug; daemon off; master_process on; events { w ...
- web理论知识--网页访问过程(附有Django的web项目访问流程)
当我们闲暇之余想上网看看新闻,或者看个电影,通常的操作是:打开电脑.打开浏览器.输入网址.浏览页面信息.点击自己感兴趣的连接......那么有没有想过,这些网页从哪里来的?过程中计算机又做了什么事情了 ...
- 【Python之路】特别篇--微信Web网页版通信的全过程分析
文章所使用Python版本为py3.5 1.微信服务器返回一个会话ID 微信Web版本不使用用户名和密码直接登录,而是采用二维码登录,所以服务器需要首先分配一个唯一的会话ID,用来标识当前的一次登录. ...
- [web安全]Web应用漏洞攻击分析与防范
网站攻击主要分为以下几类: (1) sql注入攻击 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.它是利 ...
随机推荐
- Android代码写View
1.Java Code package com.fish.helloworld; import android.app.Activity; import android.content.Context ...
- /proc/cpuinfo
/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间. 它以文件系统的方式为访问系统内核数据的操作提供接口. 用户和应用程序可以通过 proc得到系统的信息,并可以改变内核的某些参数 ...
- .NET如何从配置文件中获取连接字符串
一.设置配置文件 <configuration> <!--在configuration下创建一个connectionStrings--> <connectionStrin ...
- sqlite mvc分页
<tr class="tr1"> <td> 共<asp:Literal r ...
- input 文本框和 img 验证码对齐问题
input 文本框和 img 验证码对齐问题 在网页制作中,常将 input 和 img 放在同一行,img标签总是比input高出一个头,非常难看. CCS实现input和img水平对齐的方法 同时 ...
- 新建一个DataTable如何手动给其添加多条数据!
早晨起来,想起昨天利用winform做类似于sqlserver数据库导入数据功能的时候,用到了新建一个DataTable手动给其添加多条数据,平时用不到,需要的时候想不起来了,这次不妨把他记下来.以下 ...
- 极路由1s手工安装ss插件
1.极路由申请开放root权限,将会失去保修,不过100块的东西还保修个什么 2.用putty连接极路由注意端口号 3. 然后一段一段执行下面的代码,很简单,复制一个段落的代码,粘贴进去,回车执行. ...
- Python之MySql操作
1.安装驱动 输入命令:pip install MySQL-python 2.直接使用驱动 #coding=utf-8 import MySQLdb conn= MySQLdb.connect( ho ...
- Java 第三天 Gradle和其它
Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具. 下载地址 http://www.gradle.org/downloads 环境变量 ...
- Linq的一些记录
1. IQueryable接口与IEnumberable接口的区别: IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了, ...