Nmap备忘单:从探索到漏洞利用(Part3)
众所周知NMAP是经常用来进行端口发现、端口识别。除此之外我们还可以通过NMAP的NSE脚本做很多事情,比如邮件指纹识别,检索WHOIS记录,使用UDP服务等。
发现地理位置
Gorjan Petrovski提交了个NMAP的NSE脚本,帮助我们定位远程IP的地理位置:ip-geolocation-maxmind,ip-geolocation-ipinfodb,和ipgeolocation-geobytes。
这将告诉我们如何设置并使用附带的NMAP NSE的地理位置脚本。
ip-geolocation-maxmind
为了能调用该脚本,需要先下载MaxMind的城市数据库http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz。解压到本地的NMAP数据文件夹($Nmap_DATA/nselib/data/)。
命令:
Nmap --script ip-geolocation-* ip
提交新的地理位置提供商
有时地理位置可能是错误的,因为地理位置取决于的MaxMind数据库。因此我们必须给NMAP提供一个新的数据库。
获得WHOIS记录信息
WHOIS记录通常包含如注册人的姓名和联系方式的重要数据。虽然这里有很多工具可以查询WHOIS协议,但NMAP的证明了自身的优秀,因为它能够批量处理IP范围和主机列表。
命令:Nmap --script whois 目标
--script WHOIS查询参数告诉NMAP的,以获得给定目标的记录。此脚本使用IANA分配的数据来选择RIR,它的结果在本地缓存。另外,我们可以覆盖此行为,并选择服务提供商的说法whodb使用的顺序:
参数--script whois告诉NMAP去查询区域互联网注册管理机构WHOIS数据库来获得给定目标的whois记录。这个脚本使用IANA分配的数据选择RIR并在本地缓存结果。或者我们可以覆盖这一行为,指定whois数据库的提供商并依次查询。
命令:
Nmap --script whois --script-args whois.whodb=arin+ripe+afrinic <目标>
该脚本将会按顺序在WHOIS提供商中查询记录或者推荐记录,要忽略推荐记录请指定参数值nofollow。
命令:Nmap --script whois --script-args whois.whodb=nofollow <目标>
要批量查询的主机名列表(-iL <文件名>)的WHOIS记录而不启用端口扫描(-sn)。命令:Nmap -sn –script whois -v -iL hosts.txt (hosts.txt包含主机或者ip的列表)
禁用缓存
有时候whois查询返回的是缓存的结果而不是最新的,可以指定参数禁止查询缓存。
命令:
Nmap -sn --script whois -script-args whois.whodb=nocache scanme. Nmap.org
检查主机是否有恶意行为
NMAP通过调用谷歌安全浏览服务API来检查主机是否进行恶意软件分发或者网络钓鱼攻击的行为。
使用脚本http-google-malware之前,先获取谷歌安全浏览服务API的密钥:
https://developers.google.com/safe-browsing/key_signup?csw=1
命令:
Nmap -p80 -script http-google-malware -script-args http-google-malware.api=<API> <目标>
如果不使用API,也可以进行查询。
命令:Nmap -p80 --script http-google-malware -v scanme.Nmap.org
收集有效的邮箱
收集邮箱对渗透测试非常有用,我们可以对这些邮箱进行钓鱼工具或者暴力破解攻击。NMAP可以进行邮箱的收集,但是脚本http-google-email不在NMAP的官方资料库中,我们需要手动下载http://seclists.org/Nmap-dev/2011/q3/att-401/http-google-email.nse,并把它复制到本地脚本目录。正如你所看到的,下面的截图有电子邮件收集脚本的详细信息:
但作为一名安全研究人员必须要了解脚本,因为脚本可能包含恶意的东西。所以下面介绍关于脚本的详细信息。下面就是下载的脚本内容,这样你就不必再下载,可以直接使用该脚本。
description = [[
http-google-email queries the Google web search engine and Google Groups for e-mails pertaining to a specific domain.
]]
---
-- @usage
-- Nmap -p80 --script http-google-email <host>
--
-- @output
-- PORT STATE SERVICE
-- 80/tcp open http
-- | http-google-email:
-- | Nmap-dev () insecure org
-- | Nmap-svn () insecure org
-- |_fyodor () insecure org
--
-- @args http-google-email.domain Domain to search for.
-- @args http-google-email.pages The number of results pages to be requested from Google Web search and Google Group search respectively. Default is 5.
---
author = "Shinnok"
license = "Same as Nmap--See http://Nmap.org/book/man-legal.html"
categories = {"discovery", "safe", "external"}
require "http"
require "shortport"
portrule = shortport.http
--Builds Google Web Search query
--@param domain
--@param page
--@return Url
local function google_search_query(domain, page)
return string.format("http://www.google.com/search?q=%%40%s&hl=en&lr=&ie=UTF-8&start=%s&sa=N", domain, page)
end
--Builds Google Groups Search query
--@param domain
--@param page
--@return Url
local function google_groups_query(domain, page)
return string.format("http://groups.google.com/groups?q=%s&hl=en&lr=&ie=UTF-8&start=%s&sa=N", domain, page)
end
---
--MAIN
---
action = function(host, port)
local pages = 50
local target
local emails = {}
if(stdnse.get_script_args("http-google-email.pages")) then
pages = stdnse.get_script_args("http-google-email.pages")*10
end
-- Check if we have the domain argument passed
if(stdnse.get_script_args("http-google-email.domain")) then
target = stdnse.get_script_args("http-google-email.domain")
else
-- Verify that we have a hostname available
if not(host.targetname) then
return string.format("[ERROR] Host can not be resolved to a domain name.")
else
target = host.targetname
end
end
stdnse.print_debug(1, "%s: Checking domain %s", SCRIPT_NAME, target)
-- Google Web search
for page=0, pages, 10 do
local qry = google_search_query(target, page)
local req = http.get_url(qry)
stdnse.print_debug(2, "%s", qry)
stdnse.print_debug(2, "%s", req.body)
body = req.body:gsub('<em>', '')
body = body:gsub('</em>', '')
if body then
local found = false
for email in body:gmatch('[A-Za-z0-9%.%%%+%-]+@' .. target) do
for _, value in pairs(emails) do
if value == email then
found = true
end
end
if not found then
emails[#emails+1] = email
end
end
end
end
-- Google Groups search
for page=0, pages, 10 do
local qry = google_groups_query(target, page)
local req = http.get_url(qry)
stdnse.print_debug(2, "%s", qry)
stdnse.print_debug(2, "%s", req.body)
body = req.body:gsub('<b>', '')
body = body:gsub('</b>', '')
if body then
local found = false
for email in body:gmatch('[A-Za-z0-9%.%%%+%-]+@' .. target) do
for _, value in pairs(emails) do
if value == email then
found = true
end
end
if not found then
emails[#emails+1] = email
end
end
end
end
if #emails > 0 then
return "\n" .. stdnse.strjoin("\n", emails)
end
end
找到所有的NSE脚本的最简单方法是使用find命令如下所示。
find / -name ‘*.nse’
一般情况下的路径可能是usr/share/Nmap/scripts。
找到脚本文件所在的目录后,切换到这个目录,执行wget命令,当然你也可以手动拷贝一份到这个目录。
看下脚本内容是否正确。
拷贝了http-google-email.nse之后,我们需要手动更新脚本数据库,执行如下的命令:
Nmap -script-updatedb
更新完成后,就可以运行脚本了。
Nmap -p80 –script http-google-email <目标>
NSE脚本参数
选项–script-args是用于设置NSE脚本的参数。例如:
Nmap -sV --script http-title --script-args http.useragent=”Mozilla 999 ” <目标>
以上命令设置了参数useragent的值。
获取主机信息并进一步深入
作为一个专业的安全测试人员我们应该进一步获得关于网络或主机的附加信息去推动渗透测试。
-O参数用来探测目标操作系统:
命令:Nmap -O 目标
通过分析目标的响应是否符合某些操作系统的特征,从而判断目标操作系统的类型。为了能更准确的探测操作系统,目标主机至少要有一个开放的端口和关闭的端口。当扫描多个目标时,选项–osscan-limit可以忽略不满足这个要求的主机以加快扫描速度。使用选项-v可以展示扫描过程。
命令:Nmap -v -O 目标
在某些情况下NMAP不能确定操作系统时,它会显示一个指纹。该指纹可以提交到NMAP的数据库中(http://www.Nmap.org/submit/)
提交生成的指纹,并正确识别目标的操作系统,我们可以改善NMAP的操作系统检测功能在未来的版本中的准确性。
猜测操作系统
如果NMAP无法确定操作系统类型,通过选项–osscan-guess强制识别os。
命令:Nmap -O –osscan-guess 目标
它将列出的NMAP脚本数据库操作系统的所有可能的匹配。–fuzzy可以用作–osscan-guess的快捷方式。
如果目标至少有一个开放和一个关闭的TCP端口那么操作系统的类型识别会比较有效。选项–osscan-limit将会使NMAP不对没有满足这个要求的目标进行操作系统的识别。这样可以节省大量的时间,尤其是在对许多主机-Pn扫描。它只与选项-O或者-A搭配使用。
–max-OS-tries(设置针对目标的操作系统检测的最大尝试次数)
当NMAP针对目标进行操作系统检测,并未能找到一个完美的匹配时,它通常会重复尝试。默认情况下,如果环境条件比较好,NMAP会尝试五次,如果条件比较差那么只会尝试二次。指定 –max-os-tries的值比较低的话(比如1)会加快NMAP的速度,但可能会错过潜在的可识别的目标。
命令:map -O –max-os-tries 目标
扫描时显示调试信息
选项 –version-trace会让NMAP显示详细的扫描内容。
命令:Nmap -sV –version-trace 目标
执行RPC扫描
选项-sR对目标进行RPC(远程过程调用)扫描
命令:Nmap -sR 目标
上述-sR扫描的输出显示有关目标系统上运行的RPC服务的信息。RPC与Unix和Linux系统上的NFS(网络文件系统)服务关系很紧密。
NMAP扫描使用-hostmap选项
此hostmap脚本基于第三方服务,而官方版本只支持BFK的DNS历史记录。正如我前面所说的,下载脚本
(https://svn.Nmap.org/Nmap/scripts/hostmap-bfk.nse)并更新NMAP的脚本数据库,然后执行命令:
Nmap -p80 –script hostmap Nmap.org
这些参数–script hostmap -p80告诉NMAP的启动HTTP版的hostmap脚本,并限制只扫描80端口以加快这一任务。
该hostmap.nse查询两个不同的Web服务:BFK DNS记录和ip2hosts.com。 BFK DNS记录是一项免费服务,从公共DNS数据和ip2hosts收集其信息。这两项服务都是免费的,滥用他们将很有可能让你禁止使用该服务。
可以设定参数指定不同的搜索引擎。
Nmap -p80 –script hostmap –script-args hostmap.provider=BING <目标>
Nmap -p80 –script hostmap –script-args hostmap.provider=BFK <目标>
Nmap -p80 –script hostmap –script-args hostmap.provider=ALL <目标>
为了保存扫描每个IP的主机名,使用参数hostmap.prefix。设置此参数将创建一个在我们的工作目录<前缀><目标>文件名的文件:
Nmap -p80 –script hostmap-script-ARGS hostmap.prefix=hostfile <目标>
暴力破解DNS记录
这是用于试图通过暴力枚举DNS主机名猜测常见的子域。指定DNS-brute.srv,dns-bruter也将尝试列举常见的DNS SRV记录。
NMAP的时间选项
时间选项是什么,为什么?
作为一个渗透测试人员,我们通常会在在NMAP上设置时间选项,但我们必须得了解时间选项是什么,为什么要设置这个选项?
我们使用NMAP的时候经常会遇到防火墙,这些防火墙会阻碍某些请求。我们会根据需求设置时间选项以加快或减慢NMAP的扫描速度。
当在快速网络中(比如内网)扫描大量的主机时,我们可能需要增加并行操作的数量以便更快的获得结果。另外在扫描速度慢的网络时(或在互联网上),你可能需要减慢扫描速度以获得更准确的结果,或者逃避入侵检测系统。下面是一些NMAP的时间选项。
时间参数
默认情况下我们扫描使用的NMAP是在几秒钟内开始扫描。但是我们可以通过设置时间参数进一步提高性能。NMAP支持下列的时间格式:
M-分钟
S-秒
MS-毫秒
H-小时
有时如何选择时间参数可能会让人感到困惑,我们将设置多少时间用于扫描。要解决这些问题,NMAP的提供了如下多种扫描时序选项。
命令:Nmap -T[0-5] 目标
选项0:
这是一个非常缓慢的扫描选项,以便防火墙或IDS不会阻断该请求。
命令:Nmap -T0 目标
选项1:
比选项0稍微快一点点的扫描速度,用于绕过防火墙和IDS。
命令:Nmap -T1 目标
虽然T0和T1对于避免IDS报警非常有用,但它们将会花非常多的时间来扫描数千个端口或者服务器。
选项2:
比较“礼貌”的选项,占用较少的带宽以及目标计算机的资源。
命令:Nmap -T2 目标
选项3:
这是nmap的默认选项,常规的扫描速度和资源占用。
命令:Nmap -T3 目标
选项4和5:
在T4和T5是一个非常快速和侵略性的扫描。假设在一个相当快速和可靠的网络中,T4可以加速扫描。T5则是在此基础之上牺牲了准确性。
命令:Nmap -T4/-T5 目标
并行选项:
作为一个pentester我们不应该通过一个接一个的扫描浪费我们的时间。相反,我们可以通过并行扫描来优化。NMAP将目标IP段进行分组,然后在一次扫描一个组。一般情况下较大的分组是更有效的。缺点直到整个分组完成才能知道目标主机的情况。
并行处理有两个选项:最大值和最小值。
min:
选项–min-parallelism用于指定并行端口扫描操作的最小数量。
Nmap –min-parallelism [数量] [目标]
手动设置–min-parallelism选项可能会提升扫描性能,设置过高可能会产生不准确的结果。
MAX:
选项–max-parallelism用于指定并行端口扫描操作的最大数量。
Nmap –max-parallelism [数量] [目标]
主机分组大小选项:
nmap也可以设置主机分组的最大值和最小值。
MAX:
选项–max-hostgroup用于指定的Nmap并行扫描主机数的最大值。
Nmap –max-hostgroup [数目] [目标]
Min:
选项–min-hostgroup用于指定的Nmap并行扫描主机数的最小值。
Nmap –min-hostgroup [数目] [目标]
在扫描一个IP段或整个子网时NMAP将并行扫描多个目标以节省时间。默认情况下,基于扫描类型和网络条件Nmap会 自动调整正在执行的主机组的大小。通过指定–min-hostgroup选项,Nmap尝试保持主机组的大小为指定值。
设置最大值会有效避免网络拥堵和避免网内安全设备的告警。
RTT 超时
TCP连接中,RTT(往返超时)是用于在通信中的滑动窗口协议超时值的测定,并依赖于以下要点:如果超时值太小,源很快就超时,造成不必要的重传;另一方面,如果在超时值太大,则源会花费太长的时间以从错误中恢复。
NMAP会维持一个超时值,决定它等待探针响应的时间,以及再次发送探针的间隔。这是基于以前的探针的响应时间来计算。
在扫描过程中,Nmap计算这些响应时间值的内部流程如下:
SRTT - 平滑往返时间:这个响应时间的 估算是基于观察客户端到服务端之间的通信状况如何。这个值以微秒计算。
RTTVAR - 往返时间方差:网络通信可以是非常难以预测的,而Nmap通过创造一系列超时值去补偿这种不确定性。如果未在此方差内接收响应,则Nmap认为这一个响应不可能永远出现。
NMAP初始超时
它控制网络响应初始超时。
命令:Nmap –initial-rtt-timeout [时间] [目标]
增加时间值将减少因超时分组重发的次数。通过降低值我们可以加快扫描,但我们必须小心这样做。设置RTT超时值太低,可以抵消任何潜在的性能提升,并导致结果不准确。
RTT最大值
选项–max-rtt-timeout用于指定最大RTT(往返时间)数据包响应超时。
命令:Nmap –max-rtt-timeout [时间] [目标]
默认情况下为达到最佳效果Nmap会动态调整RTT超时选项。最大RTT超时缺省值为10秒。手动降低 最大RTT超时将允许更快的扫描(尤其是当扫描大块地址)。提高最大RTT超时将防止Nmap在网络状况不佳的情况进行扫描时过早地放弃。典型值是在 100毫秒(快速/可靠的网络)和10000毫秒( 慢速/不可靠的网络)之间。
最大尝试次数
这个选项用于设置每个探针最大的重复次数。
命令:Nmap –max-retries [数目] [目标]
默认情况下,Nmap基于网络状况自动调整探针重传次数。如果我们要覆盖默认设置或解决连接问题的可以使用–max-retries选项。指定的数值会增加它完成一个扫描需要的时间,但会产生更精确的结果。降低–max-retries 我们可以加快扫描,但我们可能无法得到准确的结果。
TTL选项
TTL(存活时间)是因特网协议(IP)报文分组中的一个值,用于告诉网络路由器分组是否已经在网络中的时间过长而应丢弃。从渗透测试者的角度来看,一个TTL值可以帮助了解有关目标的大量信息。
选项–ttl用于指定扫描中的ttl值。
命令:Nmap –ttl [时间] [目标]
使用此选项发送的数据包都会有指定的TTL值。扫描目标时连接速度很慢,其中正常数据包可能会接收到响应之前超时,此选项很有用。
主机超时选项
选项–host-timeout指定Nmap在超时多少时间后放弃对主机的扫描。
命令:Nmap –host-timeout [时间] [目标]
如果它位于慢速或不可靠的网络上主机可能需要较长的时间来扫描。由速率限制防火墙保护的系统也可能需要相当长的时间来进行扫描。选项–host-timeout指示Nmap如果如果指定时间内未能完成扫描则放弃目标。在上述的例子中,扫描实际上花费更长的时间(超过一分钟)才能完成,这将导致的Nmap终止扫描(因为已经指定一分钟内)。扫描跨WAN或Internet连接的多个系统时,此选项特别有用。
最小扫描延迟
选项–scan-delay指示Nmap在发送探针之间的指定的最小时间间隔是多久。
命令:Nmap –scan-delay [时间] [目标]
一些系统会采用速率限制阻碍Nmap扫描尝试。默认情况下Nmap会检测系统的速率限制自动调节扫描延迟。在某些情况下我们需要自己设置扫描延迟比如在限速或有IDS防护的情况下。
最大扫描延迟
选项–max-scan-delay指示Nmap在发送探针之间的指定的最大时间间隔是多久。
命令:Nmap –max-scan-delay [时间] [目标]
指定–max-scan-delay这样可以加快扫描,但是会降低扫描精度,同时网络负载会变大。
最小发包速率
选项–min-rate用来指定Nmap每秒钟发送的数据包数量最小是多少。
命令:Nmap –min-rate [数量] [目标]
最大发包速率
选项–max-rate用来指定Nmap每秒钟发送的数据包数量最大是多少。
命令:Nmap –max-rate [数量] [目标]
在上面的例子中,–max-rate 30指示Nmap每秒发送不超过30个数据包。这会大大减缓扫描速度,但对试图躲避入侵检测系统或者扫描有速率限制的目标有帮助。
绕过RST包速率限制
选项–defeat-rst-ratelimit用于通过发送RST(重置请求)包来进行速率限制的主机。
命令:Nmap –defeat-rst-ratelimit [目标]
选项–defeat-rst-ratelimit在目标通过发送RST包来限制扫描速率的情况下非常有用,它可以加快扫描速度,然而会影响结果的准确度。不过这种情况非常少见,正因如此也很少使用这个选项。
到这里文章就结束了,在下一部分,我会介绍如何使用nmap进行防火墙绕过,Web服务审计,Web应用程序渗透测试,以及Nmap脚本引擎的开发。
引用:
http://www.professormesser.com/nmap/hacking-nmap-using-nmap-to-calculate-network-response-time/5/
http://nmap.org/book/man-performance.html
*参考来源:resources.infosecinstitute,FB小编东二门陈冠希编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)
Nmap备忘单:从探索到漏洞利用(Part3)的更多相关文章
- Nmap备忘单:从探索到漏洞利用(Part 4)
这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下 ...
- Nmap备忘单:从探索到漏洞利用(Part 2)
这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫 ...
- Nmap备忘单:从探索到漏洞利用(Part 5)
这是备忘单的最后一部分,在这里主要讲述漏洞评估和渗透测试. 数据库审计 列出数据库名称 nmap -sV --script=mysql-databases 192.168.195.130 上图并没有显 ...
- Nmap备忘单:从探索到漏洞利用 Part1
在侦查过程中,信息收集的初始阶段是扫描. 侦查是什么? 侦查是尽可能多的收集目标网络的信息.从黑客的角度来看,信息收集对攻击非常有帮助,一般来说可以收集到以下信息: 电子邮件.端口号.操作系统.运行的 ...
- Nmap备忘单
#在推特上看到,感觉做的相当不错就转一波. 目标规格 开关 例 描述 nmap 192.168.1.1 扫描一个IP nmap 192.168.1.1 192.168.2.1 扫描特定的IP地 ...
- Cheat (tldr, bropages) - Unix命令用法备忘单
cheat 是一个Unix命令行小工具,用来查询一些常用命令的惯用法(我们都知道,man page阅读起来太累了,常常是跳到最后去看 examples,但并不是所有man pages里面都有examp ...
- Objective-C教程备忘单
终极版本的Objective-C教程备忘单帮助你进行iOS开发. 想开始创建你的第一个iOS应用程序么?那么看一下这篇很棒的教程吧:Create your first iOS 7 Hello Worl ...
- HTML5属性备忘单
在网上闲逛的时候看到了文章,感觉总结的这个html5文章,决定转载过来,在排版的时候也帮助自己重新梳理复习一遍.毕竟学习基础最重要. by zhangxinxu from http://www.zha ...
- 跨站脚本(XSS)备忘单-2019版
这是一份跨站脚本(XSS)备忘录,收集了大量的XSS攻击向量,包含了各种事件处理.通讯协议.特殊属性.限制字符.编码方式.沙箱逃逸等技巧,可以帮助渗透测试人员绕过WAF和过滤机制. 译者注:原文由Po ...
随机推荐
- Ibatis学习总结4--SQL Map XML 映射文件扩展
SQL Map XML 映射文件除了上文提到的属性还有一些其他重要的属性,下文将详细介绍这些属性. 缓存 Mapped Statement 结果集 通过在查询 statement 中指定 cacheM ...
- 转-JS子窗口创建父窗口操作父窗口
Javascript弹出子窗口 可以通过多种方式实现,下面介绍几种方法 (1) 通过window对象的open()方法,open()方法将会产生一个新的window窗口对象 其用法为: window ...
- 在Windows和UNIX下利用PHP和LDAP进行身份验证
我现在的老板曾要求我为企业内部的Web服务提供一种标准的身份验证方法.我遇到的一个主要问题就是我们公司主要使用了两种平台:UNIX和.所以,我的第一个想法并不很成功:它要求每个员工都使用UNIX或者L ...
- Ajax、反向Ajax和WebSocket 概念
Ajax 异步的JavaScript和XML(Asynchronous JavaScript and XML,Ajax),一种可通过JavaScript来访问的浏览器功能特性,其允许脚本向幕后的网站发 ...
- BZOJ-4300 绝世好(蛋疼)题 DP(递推)
翻zky学长的blog时翻出来的..... 4300: 绝世好题 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 736 Solved: 393 [Sub ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'db_item'
一直很奇怪,为什么报错,进入mysql命令行,show databases:发现多谢了一个空格,如上图.
- Rootkit Hacking Technology && Defence Strategy Research
目录 . The Purpose Of Rootkit . Syscall Hijack . LKM Module Hidden . Network Communication Hidden . Fi ...
- TCP/IP详解 学习七
静态选路的前提: 1) 网络比较小 2) 网络之间单点连接 3) 网络之间没有多余的路由 动态选路协议,用于路由器之间的通信,有以下几种: 1) ...
- ci中如何私有化方法
私有方法 在某些情况下,你可能想要隐藏一些方法使之无法对外查阅.将方法私有化很简单,只要在方法名字前面加一个下划线("_")做前缀就无法通过 URL 访问到了.例如,如果你有一个像 ...
- html5+监听设备加速度变化信息
watchAcceleration 监听设备加速度变化信息 Number plus.accelerometer.watchAcceleration( successCB, errorCB, optio ...