精华内容
下载资源
问答
  • 渗透测试第一步信息收集)

    千次阅读 2020-04-04 20:33:30
    目录前言信息收集方式区别域名信息收集主域名信息子域名信息网络信息搜索旁站、c段信息收集绕过cdn获取真实ip网站架构分析服务器类型网站容器脚本类型数据库类型CMS类型WAF主机及端口扫描网站敏感目录和文件 ...

             ~~~~~~~~         因为想要面对一个新的开始,一个人必须有梦想、有希望、有对未来的憧憬。如果没有这些,就不叫新的开始,而叫逃亡。 ​​​​
                                                                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                                 ————玛丽亚·杜埃尼亚斯

    前言

    信息收集对于渗透测试前期来说是非常重要的,因为我们只有掌握了目标网站或目标主机足够多的信息之后,我们才能更好地对其进行漏洞检测。最简单的比如说目标站点的ip、中间件、脚本语言、端口、邮箱等等。

    信息收集方式区别

    信息收集的方式可以分为两种:主动和被动

    • 主动收集:相当于通过技术手段去侦察目标的情况,比如通过直接访问、扫描网站。这种流量将流经网站,目标可能会记录下我们的行为。
    • 被动收集:相当于通过技术手段去收集目标遗留的信息,比如利用第三方的服务对目标进行访问了解,比例:Google搜索、Shodan搜索等

    没有一种方式是完美的,每个方式都有自己的优势。主动可获取更多的信息,但目标机会有所察觉。被动收集信息相对较少,但不会被目标发现。那么在实际的应用中,通常都是两种方式相结合的方式,这样才能采集到目标更完整的信息。

    域名信息收集

    主域名信息

    知道目标的域名之后,我们要做的第一件事就是获取域名的注册信息,包括该域名的DNS服务器信息和注册人的联系信息等。
    whois查询
    whois是一个标准的互联网协议,可以用于收集网络注册信息,注册的域名,ip地址等信息。
    查询方法:
    国外的who.is:https://who.is/
    站长之家:http://whois.chinaz.com/
    爱站:https://whois.aizhan.com/
    微步:https://x.threatbook.cn/
    备案信息查询
    网站备案是根据国家法律法规规定,需要网站的所有者向国家相关部门申请的备案,这是国家信息产业部多网站的一种管理。主要针对国内的网站,如网站搭建在国外,则无需备案。
    查询方法:
    天眼查:https://www.tianyancha.com/
    ICP备案查询网:http://www.beianbeian.com/
    国家企业信用信息公示系统:http://www.gsxt.gov.cn/index.html

    子域名信息

    子域名是在顶级域名下的域名,收集的子域名越多,我们测试的目标就越多,渗透的成功率也越大。往往主站找不到突破口的时候,我们从子域名入手,有时候就会带来意想不到的惊喜。
    在线查询
    https://phpinfo.me/domain/
    http://i.links.cn/subdomain/
    http://dns.aizhan.com
    https://www.dnsscan.cn/dns.html
    子域名探测工具
    工具比较多,常见的如下:

    • layer子域名挖掘机
    • subDomainsBrute
    • K8
    • orangescan
    • DNSRecon

    一般layaer和subdomainsbrute比较常用
    搜索引擎枚举
    我们可以利用google 搜索语法进行子域名搜索。
    传送门在此——>黑客搜索大法(Google Hacking)
    第三方聚合应用枚举
    很多第三方服务汇聚了大量的DNS数据集,可以通过它们检索某个给定域名的子域名,只要往其搜索栏中输入域名就可以检索到相关的域名信息。
    VirusTotal:https://www.virustotal.com/#/home/search
    DNSdumpster:https://dnsdumpster.com/
    证书透明度公开日志枚举
    证书透明度(Certificate Transparency,CT)是证书授权机构(CA)的一个项目,证书授权机 构会为每一个 SSL/TLS 证书发布到公共日志中。一个 SSL/TLS 证书通常包含域名、子域名和邮 箱地址,这些也经常成为攻击者非常希望获得的有用信息。查找某个域名所属证书的最简单的 方法就是使用搜索引擎搜索一些公开的 CT 日志。
    Crt.sh :https://crt.sh/
    censys:https://censys.io/

    网络信息搜索

    旁站、c段信息收集

    旁站:是和目标网站在同一台服务器上的其它网站
    c段:是和目标服务器ip处在同一个c段的其它服务器
    查询方式
    利用Bing.com:语法为:http://cn.bing.com/search?q=ip:111.111.111.111
    站长之家:http://s.tool.chinaz.com/same
    利用Google:语法:site:125.125.125.*
    利用Nmap:语法:nmap -p 80,8080 –open ip/24
    工具:K8、御剑、北极熊扫描器等
    在线:http://www.webscan.cc/

    绕过cdn获取真实ip

    在渗透测试过程中,目标服务器可能只有一个域名,那么如何通过这个域名来确定目标服务器的真实ip呢。如果目标服务器不存在cdn可以直接通过ping域名或者nslookup解析域名信息。如果存在cdn就需要用到一些方法了。
    传送门在此——>论网站CDN的绕过姿势

    网站架构分析

    服务器类型

    服务器信息包括服务器用的操作系统:linux还是windows。知道服务器操作系统后还需要知道其具体版本,因为很多低版本的操作系统都存在一直的漏洞。
    判断方法

    • 可以通过ping来探测,windows的TTL值一般都是128,linux则为64.所以大于100的肯定就是windows系统,而几十的就是linux
    • windows对大小写不敏感,linux则敏感。如www.xxx.com/index.php和www.xxx.com/index.Php打开的效果一样则说明是windows
    • 用工具nmap进行探测

    网站容器

    知道操作系统后,我们就需要知道网站用的web服务器是什么类型的:apache、nginx、tomcat、iis。知道了类型后还要具体探测容器的具体版本,不同的web容器版本存在着不同的漏洞。我们可以使用whatweb进行探测。
    判断方法
    whatweb:https://whatweb.net/
    或者命令行
    传送门在此——>网站指纹扫描工具whatweb
    常见的几种web容器(Apache、Nginx、Tomcat)

    脚本类型

    我们需要知道网站用的脚本类型:php、jsp、asp、aspx
    了解它们之间的区别传送门在此——>各类后台脚本语言区别(PHP、JSP、ASP和ASPX)
    判断方法

    • 可以根据网站url来判断
    • 谷歌语法判断,site:xxx filetype:php
    • 根据firefox的插件判断比如wappalyzer

    在这里插入图片描述

    数据库类型

    还需要知道网站用的是哪种类型的数据库:mysql、oracle、sqlserver、access。
    几种数据库的区别
    1.Access 全名是 Microsoft Office Access,是由微软发布的关联式数据库管理系统。小 型数据库,当数据库达到 100M 左右的时候性能就会下降。数据库后缀名: .mdb 一般是 asp 的网页文件用 access 数据库
    2.SQL Server 是由 Microsoft 开发和推广的关系数据库管理系统(DBMS),是一个比较大 型的数据库。端口号为 1433。数据库后缀名 .mdf
    3.MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗 下产品。MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的应用软件 之一,MySQL 数据库大部分是 php 的页面。默认端口是 3306
    4.Oracle 又名 Oracle RDBMS,或简称 Oracle。是甲骨文公司的一款关系数据库管理系统。 常用于比较大的网站。默认端口是 1521
    总结
    成本上:access免费,mysql开源,sqlserver收费几千,oracle数万。
    处理能力:access千以内访问量,sqlserver几千,mysql一万+,oracle海量。
    规模:access小型数据库,sqlserver中型,mysql中小型,oracle大型
    常见搭配
    ASP 和 ASPX:ACCESS、SQL Server
    PHP:MySQL、PostgreSQL
    JSP:Oracle、MySQL

    CMS类型

    指纹识别是有必要的,只有识别出相应的web容器或者cms才能查找出与其相关的漏洞。cms又称为整站系统,常见的cms有:WordPress、Dedecms、Discuz、PhpWeb、PhpWind、Dvbbs、PhpCMS、ECShop、、SiteWeaver、AspCMS、帝国、Z-Blog等。
    在线识别网站
    BugScaner:http://whatweb.bugscaner.com/look/
    云悉指纹:http://www.yunsee.cn/finger.html
    WhatWeb:https://whatweb.net/

    WAF

    waf也叫web应用防火墙,是通过一系列针对http/https的安全策略来专门为web应用提供保护的一款产品。waf的探测一般会被忽略,因为一般遇到waf的第一想法就是告辞告辞…。
    判断方法

    # nmap
    root@kali:~# nmap -p 80,443 --script=http-waf-detect 14.215.177.38
    root@kali:~# nmap -p 80,443 --script=http-waf-fingerprint 14.215.177.38
    # waf00wf探测waf
    root@kali:~# wafw00f -a www.baidu.com
    

    在这里插入图片描述
    在这里插入图片描述

    主机及端口扫描

    不仅仅要对目标网站进行扫描,还要对目标主机进行扫描,包括目标主机存在的漏洞,开放的端口,端口运行的服务等等。主机可以用nessus,端口扫描可以用nmap。
    传送门在此——>Nmap相关介绍及使用常见端口号

    网站敏感目录和文件

    在渗透测试中,探测web目录结构和隐藏的敏感文件是一个必不可少的环节,从中可以获取网站的后台管理页面,文件上传页面,甚至可以扫描出网站的源代码。
    收集方向
    后台目录:弱口令、万能密码、爆破
    安装包:获取数据库信息,甚至是网站源码
    上传目录:截断、上传图片马
    mysql管理接口:弱口令、爆破、万能密码,甚至脱裤、拿到shell
    安装页面:可以二次安装进行绕过
    phpinfo:配置信息暴露
    编辑器:fck、ke等
    robots.txt文件:爬虫规范文件,侧面得知网站哪些目录重要
    传送门——>robots协议相关
    敏感文件、敏感目录的挖掘一般都是靠工具,常用的工具有:
    字典爆破:dirb[kali 如:dirb http://192.168.200.113]对目标网站进行目录扫描]、DirBuster、 wwwscan 、御剑后台、Webdirscan 等
    蜘蛛:Burp、OWASP ZAP、AWVS 等
    在线工具:http://www.webscan.cc/
    网络空间搜索引擎:zoomeyeshodanfofa

    展开全文
  • 5G NR随机接入过程

    万次阅读 多人点赞 2019-05-19 11:26:33
    1.5G NR 随机接入过程的目的 1.获得上行同步 2.获得UL grant ,申请上行资源 2.5G NR随机接入过程的种类 与LTE一样,5G NR随机接入过程分为基于竞争的随机接入和基于非竞争的随机接入。 竞争的随机接入通俗来讲...

    1.5G NR 随机接入过程的目的
    1.获得上行同步
    2.获得UL grant ,申请上行资源
    2.5G NR随机接入过程的种类
    与LTE一样,5G NR随机接入过程分为基于竞争的随机接入和基于非竞争的随机接入。
    竞争的随机接入通俗来讲就是当多个UE发送前导码给基站时,由于基站分不清是那个UE发给它的。于是UE需要发送一条与自己相关的独特的消息3给基站,基站此时就能分清哪个UE发送的。
    非竞争的随机接入通俗的来讲就是基站指定哪个UE给基站发送消息,基站自己分配资源给指定的UE。UE发送基站给定的前导码。
    3.5G NR基于竞争的随机接入
    根据TS38.321协议可知,5G NR随机接入过程主要增加了波束故障恢复过程的情况。NR基于竞争的随机接入之前要对随机接入流程进行初始化,主要是对变量的赋值,命名等等。主要有以下参数:

    prach - ConfigIndex用 于传输随机接入前导 码的可 用 PRAC H 时机 集
    preambleReceivedTargetPower初始随机接入前导功率
    rsrp- ThresholdSSB用于选择SSB和相应的随机接入前导码和/或PRACH时机的RSR P阈值
    rsrp- ThresholdSSB-SULNUL载波和SUL载波之间选择的RSRP阈值
    rsrp-ThresholdCSI-RS用于选择CSI-RS和相应的随机接入前导码和/或PRACH时机的RSRP阈值
    powerControlOf fset当启动随机接入过程以进行波束故障恢复时 ,rsrp-ThresholdSSB和rsrp-ThresholdCSI-RS之间的功率偏移
    powerRampingStep功率斜坡因子
    PowerRampingStepHighPriority差分随机接入过程中的功率斜坡因子
    scalingFactorBI用于区分随机接入过程的缩放因子
    ra-PreambleIndex随机接入前导码索引
    ra-ssb-OccasionMaskIndex定义与SSB相关联的PRACH场景
    ra-OccasionList定义与CSI-RS相关联的PRACH场景,其中MAC实体可以发送随机接入前导码
    preambleTransMax随机接入前导码传输的最大数量

    而NR随机接入过程与LTE相比,在以下几个方面增加了一些新的内容
    1.随机接入的用途
    2.随机接入前导的发送机制
    3.随机接入的覆盖范围
    在NR 中,随机接入除了让UE接入到某个载波上,最重要的是用于系统消息的请求和波束赋形失败后恢复的过程。首先解释下波束赋形,在LTE系统部署的过程中频点都在3.5GHZ以下,所以,频率越低,那么波长越大,故波传播的曲线远离于直线,波能量的损失就会减小。而在5G中,由于部署的频点在3.5GHZ以上,那么波长达到毫米波的级别,波长越短,波的传播曲线越趋近于一条直线。如果直接用毫米波来传播,就会产生能量损耗,为了解决这个问题,在上下行的公共信道需要采用波束赋形的方式进行发送和接收。
    从MAC层的角度来说,为使用波束赋形,首先需要了解发送前导和参考信号之间的对应关系在参数配置上的体现。在NR系统中,一个随机接入信道中包含了64个随机前导码序列。这样的随机接入信道在频域上最多可同时排列8个,而且在频域上分布的连续性导致了在时域分布的复杂性。
    在介绍随机接入过程之前首先介绍以下5G里面的系统消息。5G系统的系统消息分为三种:
    1.MIB
    2.SIB1
    3.Other SI
    其中,MIB是UE在做了小区搜索并完成了频率和时间同步之后,需要马上获得的系统信息。MIB通过BCH进行广播,而BCH和同步信号(PSS/SSS)组合在一起,统称SS BLOCK(SSB),也叫同步信号块,这也是NR系统中固有的信令开销。MIB是一个小区里面必须广播的系统信息,这是因为在随机接入过程中MIB中的前4个参数是必需的。在获取MIB之后,UE必须要获取下一个系统消息就是SIB1。而在MIB中的消息就没有必要存在于SIB1中,以免重复造成资源的浪费。SIB1是在PDSCH上广播的,主要广播以下几类信息:
    1.小区选择参数
    2.接入控制参数
    3.初始接入相关的信道配置
    4.系统消息请求配置
    5.其他系统消息的调度信息
    6.其他的一些信息,比如是否支持VOIP业务等。
    其中小区选择信息顾名思义是UE判断小区的信号是否满足小区驻留条件的必要信息;接入控制信息是指UE判断某种业务是否被允许发起的必要信息;初始接入相关的信道配置信息是随机接入过程所必需的信道配置信息。这三类信息结合起来作为UE在该小区驻留并且发起初始随机接入必需的信息。其余的信息是在RRC连接状态后,由专用信道来获取。所以SIB1消息也是UE进入RRC连接状态所必需的信息。Other SI消息是除SIB1以外的消息,共有8种SIB1以外的消息:SIB2-SIB9。
    系统消息的获取也是按照时间来获取的,MIB,SIB1和Other SI的获取顺序如下图:
      系统消息获取过程
    MIB,SIB和Other SI 是按照时间顺序来获取的,如上图:MIB随着SSB一起广播,对于UE来说,通过盲检获取了SSB以后,也获取了MIB。获取SIB1的PDCCH的搜索空间。参数配置在MIB中。一旦获取了MIB后,UE就可以通过检测这个PDCCH来获取SIB1。而SIB1中包含SIBx和OtherSI的调度信息,包括SIBx到Other SI的映射关系以及Other SI的调度周期和发送窗口的大小。
    随机接入的第一步就是选择发送前导的资源,包括前导本身和前导所在的PRACH机会。如果前导是由网络通过专用的RRC信令或者PDCCH Order(物理层信令)发送给UE,并且前导ID不为0,那么这种情况下触发的随机接入就是非冲突的随机接入。在LTE系统中UE还需要根据PRACH Mask Index来进一步选择RACH机会,NR系统在此基础上还要增加SSB或者CSI-RS的测量和比较的过程。需要明确的是在专用信令中,网络提供的是一组前导ID,RSS ID,其中RSS指的是SSB或者CSI-RS。资源选择的流程如下图所示:

    在这里插入图片描述
    需要指出的是按照上面的算法,符合条件的前导可能不止一个,那么如何在这些前导中间进行选择取决于UE的算法实现。
    下面介绍基于竞争的随机接入前导码的选择过程:
    在这里插入图片描述
    随机接入前导码发送流程如下图:
    在这里插入图片描述

    其中设置功率的过程为:将PREAMBLE_RECEIVED_TARGET_POWER设置为preambleReceivedTargetPower+DELTA_PREAMBLE+(PREAMBLE_POWER_RAMPING_COUNTER-1)PREAMBLE_POWER_RAMPING_STEP。
    RA-RNTI的计算公式如下:
    RA-RNTI=1+s_id+14
    t_id+1480f_id+14808*ul_carrier_id
    其中s_id是指定的PRACH的第一个OFDM的索引(0<=s_id<=14);t_id为系统帧中指定的PRACH的第一个时隙的索引(0<=t_id<=80);f_id是指定索引中的PRACH的值(0<=f_id<=80);
    ul_carrier_id表示发送MSG1的上行载波类型(0表示NUL载波,1表示SUL载波)
    补充一点:前导码跟LTE不同的是在一个RACH信道中多了给系统消息请求和专用的前导。

    随机接入第二步是UE在发送了前导以后的第一个PDCCH机会开始监听加绕RA-RNTI的PDCCH。监听的最大的持续时间是由一个被称为“监听窗口”的参数来决定的。其中RA-RNTI的定义和LTE系统有所不同,取决于所发送的前导所在的RACH信道的时频域位置以及上行载波的序列。在NR中,MSG2至少包含了前导索引、T_C_RNTI和上行Grant。如果RA-RNTI和前导索引与UE本地的值是吻合的,UE就认为收到了自己响应的消息,否则继续监听PDCCH。如果UE在监听窗口中没有收到自己的MSG2,就会在延时一定时间后,再次从第一步开始。具体流程如下:
    在这里插入图片描述

    随机接入过程第三步是UE发送包含UE_ID的Message3,然后监听Message4的PDCCH。Message3的PDCCH加绕的是T_C_RNTI,而Message4的PDCCH加绕的可能是C-RNTI或者T_C_RNTI。如果Message3上承载的是一个CCCH消息,那么冲突的解决在于Message3和消息4的对比,如果相同说明竞争解决成功。具体的流程如下:
    在这里插入图片描述
    随机接入第四步:竞争解决成功判断,接收到消息4,主要流程如下:在这里插入图片描述

    展开全文
  • 作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用... 浏览器查找域名的IP地址导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:* 浏览器缓存 – 浏览器会
    作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。
    
    本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~
    1. 首先嘛,你得在浏览器里输入要网址:



    2. 浏览器查找域名的IP地址


    导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:
    * 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
    * 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
    * 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
    * ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
    * 递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会 有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。

    DNS递归查找如下图所示:
    500pxAn_example_of_theoretical_DNS_recursion_svg.png


    DNS有一点令人担忧,这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:
    * 循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。
    * 负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。
    * 地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。
    * Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。

    大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。
    3. 浏览器给web服务器发送一个HTTP请求

    因为像Facebook主页这样的动态页面,打开后在浏览器缓存中很快甚至马上就会过期,毫无疑问他们不能从中读取。
    所以,浏览器将把一下请求发送到Facebook所在的服务器
    GET HTTP://facebook.com/ HTTP/1.1
    Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
    Accept-Encoding: gzip, deflate
    Connection: Keep-Alive
    Host: facebook.com
    Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]

    GET 这个请求定义了要读取的URL: “HTTP://facebook.com/”。 浏览器自身定义 (User-Agent 头), 和它希望接受什么类型的相应 (Accept and Accept-Encoding 头). Connection头要求服务器为了后边的请求不要关闭TCP连接。
    请求中也包含浏览器存储的该域名的cookies。可能你已经知道,在不同页面请求当中,cookies是与跟踪一个网站状态相匹配的键值。这样cookies会存储登录用户名,服务器分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里,每次请求时发送给服务器
    用来看原始HTTP请求及其相应的工具很多。作者比较喜欢使用fiddler,当然也有像FireBug这样其他的工具。这些软件在网站优 化时会帮上很大忙。
    除了获取请求,还有一种是发送请求,它常在提交表单用到。发送请求通过URL传递其参数(e.g.:HTTP://robozzle.com/puzzle.aspx?id=85)。发送请求在请求正文头之后发送其参数。

    像“HTTP://facebook.com/”中的斜杠是至关重要的。这种情况下,浏览器能安全的添加斜杠。而像“HTTP: //example.com/folderOrFile”这样的地址,因为浏览器不清楚folderOrFile到底是文件夹还是文件,所以不能自动添加 斜杠。这时,浏览器就不加斜杠直接访问地址,服务器会响应一个重定向,结果造成一次不必要的握手。
    4. facebook服务的永久重定向响应

    图中所示为Facebook服务器发回给浏览器的响应:
    HTTP/1.1 301 Moved Permanently
    Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
    pre-check=0
    Expires: Sat, 01 Jan 2000 00:00:00 GMT
    Location: HTTP://www.facebook.com/
    P3P: CP=”DSP LAW”
    Pragma: no-cache
    Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;
    path=/; domain=.facebook.com; httponly
    Content-Type: text/html; charset=utf-8
    X-Cnection: close
    Date: Fri, 12 Feb 2010 05:09:51 GMT
    Content-Length: 0

    服务器给浏览器响应一个301永久重定向响应,这样浏览器就会访问“HTTP://www.facebook.com/” 而非“HTTP://facebook.com/”。
    为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?这个问题有好多有意思的答案。
    其中一个原因跟搜索引擎排名有 关。你看,如果一个页面有两个地址,就像HTTP://www.igoro.com/ 和HTTP://igoro.com/,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是 什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。
    还有一个是用不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。
    5. 浏览器跟踪重定向地址


    现在,浏览器知道了 “HTTP://www.facebook.com/”才是要访问的正确地址,所以它会发送另一个获取请求:
    GET HTTP://www.facebook.com/ HTTP/1.1
    Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
    Accept-Language: en-US
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
    Accept-Encoding: gzip, deflate
    Connection: Keep-Alive
    Cookie: lsd=XW[...]; c_user=21[...]; x-referer=[...]
    Host: www.facebook.com

    头信息以之前请求中的意义相同。
    6. 服务器“处理”请求


    服务器接收到获取请求,然后处理并返回一个响应。
    这表面上看起来是一个顺向的任务,但其实这中间发生了很多有意思的东西- 就像作者博客这样简单的网站,何况像facebook那样访问量大的网站呢!
    * Web 服务器软件web服务器软件(像IIS和阿帕奇)接收到HTTP请求,然后确定执行什么请求处理来处理它。请求处理就 是一个能够读懂请求并且能生成HTML来进行响应的程序(像ASP.NET,PHP,RUBY…)。
    举 个最简单的例子,需求处理可以以映射网站地址结构的文件层次存储。像HTTP://example.com/folder1/page1.aspx这个地 址会映射/httpdocs/folder1/page1.aspx这个文件。web服务器软件可以设置成为地址人工的对应请求处理,这样 page1.aspx的发布地址就可以是HTTP://example.com/folder1/page1* 请求处理请求处理阅读 请求及它的参数和cookies。它会读取也可能更新一些数据,并讲数据存储在服务器上。然后,需求处理会生成一个HTML响应。
    所 有动态网站都面临一个有意思的难点 -如何存储数据。小网站一半都会有一个SQL数据库来存储数据,存储大量数据和/或访问量大的网站不得不找一些办法把数据库分配到多台机器上。解决方案有:sharding (基于主键值讲数据表分散到多个数据库中),复制,利用弱语义一致性的简化数据库。
    委托工作给批处理是一个廉价保持数据更新的技术。举例来讲,Fackbook得及时更新新闻feed,但数据支持下的“你可能认识的人”功能只需要每晚更新(作者猜测是这样的,改功能如何完善不得而知)。批处理作业更新会导致一些不太重要的数据陈旧,但能使数据更新耕作更快更简洁。7. 服务器发回一个HTML响应


    图中为服务器生成并返回的响应:
    HTTP/1.1 200 OKCache-Control: private, no-store, no-cache, must-revalidate, post-check=0,pre-check=0Expires: Sat, 01 Jan 2000 00:00:00 GMTP3P: CP=”DSP LAW”Pragma: no-cacheContent-Encoding: gzipContent-Type: text/html; charset=utf-8X-Cnection: closeTransfer-Encoding: chunkedDate: Fri, 12 Feb 2010 09:05:55 GMT
    2b3Tn@[...]
    整个响应大小为35kB,其中大部分在整理后以blob类型传输。
    内容编码头告诉浏览器整个响应体用 gzip算法进行压缩。解压blob块后,你可以看到如下期望的HTML:
    HTTP://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>lang=”en” id=”facebook”>

    关于压缩,头信息说明了是否缓存这个页面,如果缓存的话如何去做,有什么cookies要去设置(前面这个响应里没有这点)和隐私信息等 等。
    请注意报头中把Content-type设置为“text/html”。报头让浏览器将该响应内容以HTML形式呈现,而不是以文件形式下 载它。浏览器会根据报头信息决定如何解释该响应,不过同时也会考虑像URL扩展内容等其他因素。8. 浏览器开始显示HTML
    在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了:


    9. 浏览器发送获取嵌入在HTML中的对象


    在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。
    下面是几个我们访问facebook.com时需要重获取的几个URL:
    * 图片
    HTTP://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gif
    HTTP://static.ak.fbcdn.net/rsrc.php/zBS5C/hash/7hwy7at6.gif
    * CSS 式样表
    HTTP://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.css
    HTTP://static.ak.fbcdn.net/rsrc.php/zANE1/hash/cvtutcee.css
    * JavaScript 文件
    HTTP://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.js
    HTTP://static.ak.fbcdn.net/rsrc.php/z6R9L/hash/cq2lgbs8.js

    这些地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等…
    但不像动态页面那样,静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯,而从缓存中直接读取。服务器的响应中包含了静态文件保存的期限信息,所以浏览器知道要把它们缓存多长时间。还有,每个响应都可能包含像版本号一样工作的ETag头(被请求变量的实体值),如果浏览器观察到文件的版本 ETag信息已经存在,就马上停止这个文件的传输。
    试着猜猜看“fbcdn.net”在地址中代表什么?聪明的答案是”Facebook内容分发网络”。Facebook利用内容分发网络 (CDN)分发像图片,CSS表和 JavaScript文件这些静态文件。所以,这些文件会在全球很多CDN的数据中心中留下备份。
    静态内容往往代表站点的带宽大小,也能通过CDN轻松的复制。通常网站会使用第三方的CDN。例如,Facebook的静态文件由最大的 CDN提供商Akamai来托管。
    举例来讲,当你试着ping static.ak.fbcdn.net的时候,可能会从某个akamai.net服务器上获得响应。有意思的是,当你同样再ping一次的时候,响应的 服务器可能就不一样,这说明幕后的负载平衡开始起作用了。10. 浏览器发送异步(AJAX)请求


    在Web 2.0伟大精神的指引下,页面显示完成后客户端仍与服务器端保持着联系。
    以 Facebook聊天功能为例,它会持续与服务器保持联系来及时更新你那些亮亮灰灰的好友状态。为了更新这些头像亮着的好友状态,在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。还是在Facebook这个例子中,客户端发送给HTTP://www.facebook.com/ajax/chat/buddy_list.php一个发布请求来获取你好友里哪个 在线的状态信息。
    提起这个模式,就必须要讲讲”AJAX”– “异步JavaScript 和 XML”,虽然服务器为什么用XML格式来进行响应也没有个一清二白的原因。再举个例子吧,对于异步请求,Facebook会返回一些 JavaScript的代码片段。
    除了其他,fiddler这个工具能够让你看到浏览器发送的异步请求。事实上,你不仅可以被动的做为这些请求的看客,还能主动出击修改和重 新发送它们。AJAX请求这么容易被蒙,可着实让那些计分的在线游戏开发者们郁闷的了。(当然,可别那样骗人家~)
    Facebook聊天功能提供了关于AJAX一个有意思的问题案例:把数据从服务器端推送到客户端。因为HTTP是一个请求-响应协议,所 以聊天服务器不能把新消息发给客户。取而代之的是客户端不得不隔几秒就轮询下服务器端看自己有没有新消息。
    这些情况发生时长轮询是个减轻服务器负载挺有趣的技术。如果当被轮询时服务器没有新消息,它就不理这个客户端。而当尚未超时的情况下收到了 该客户的新消息,服务器就会找到未完成的请求,把新消息做为响应返回给客户端。总结一下
    希望看了本文,你能明白不同的网络模块是如何协同工作的
    本篇文章来源于 站长资讯网 原文链接:http://www.chinahtml.com/1007/127890385919293_2.html

     

     

     

     

    我们似乎每天都要做这样一件事情,打开一个浏览器,输入网址,回车,一个空白的页面顿时有了东西,它可能是百度之类的搜索页面,或是一个挤满了文字和图片的门户网站。从我们打开浏览器,到我们看到我们想看的内容,这过程究竟发生了什么?
    下面我们就从三个方面理解这个过程,一个是浏览器,二个是服务器,第三个是浏览器和服务器之间通信的协议。在理解这三方面之前我们必须先搞明白将这三方面联系起来的一个词:web。 

    1,world wide web 
    我们通常所说的web就是指world wide web。一般来讲,这一种通过浏览器来访问资源的技术。我们经常说的上网,应该大部都是指的是上万维网(web),但是我们经常将万维网和因特网(Internet)搞混。因特网是一种网络互连的技术,它更指的是物理层面上的互连,而万维网应该算是跑在因特网上的一种服务。
    我们通常通过浏览器还访问web,我们常见到的网页中包含超文本,图片,视频音频等各项内容。向我们提供这些资源的是一个一个的站点,通过互联网,这些站点相互连接起来。我们通过超链接从一个网页访问到另外一个网页,从一个站点到另外一个站点,所有的这一切组成一个庞大的网,这就是web。
    支持web的技术,首先是底层的网络,因为web就是建立在Internet之上,web的基本协议是HTTP协议,它跑在TCP上的协议之上,而TCP协议又需要IP协议的支持,IP协议又要由底层链路来支撑,所以我们可以从高到第看到这样一个协议栈 http->tcp->ip->连路层协议。要理解web到ip就已经足够了。
    我们可以想一想web上的资源有哪些? 首先是文本,后来添加了图片,到现在的各种音频视频资源,所有互联网上的资源都要通过一个叫做URI的东西还标记,当然了我们更常见是URL。现在也不必纠结于两者有何不同,URL就是URI的一个子集,URL给了我们资源的地址,所以我们能够找到它。
    现在看一个URL:这是一个图片的url。它是按照这样的语法来定义:scheme://domain:port/path?query_string#fragment_id.scheme就是协议,在浏览器里通常是http,例子中的是https是一种由HTTP和SSL/TLS组合起来的应用,用以提供加密通信和对网络服务器的身份验证(http://zh.wikipedia.org/zh/HTTPS )。然后就是域名,每个站点都至少有一个域名,上面例子上的域名部分是www.google.com.hk,这个域名也是分为三部分的,www是主机名,com.hk算是顶级域名,除了com还有cn,net等。域名后面是端口号默认为80,通常被省略,这是服务器端服务器软件侦听的端口,也是TCP里面一个端口号的值。然后就是path,资源在服务器上的路径。最后问号部分的客户端利用url传给服务器的一些参数值,通常值比较少,不太重要时这么做。
    2,协议
    (1)HTTP协议
    web里最重要的协议就是HTTP协议,对于经典的ISO七层网络模型来说, HTTP处于最高层--应用层。HTTP应用的模型是client/server模型。因此对应着两种HTTP消息类型,request和response。客户端向服务器发出请求,服务器向客户端发回请求。下面看一下两种类型消息的格式:



     
    下面分别进行解释。
    首先是HTTP Request Message
    请求行:请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。请求方法常见的有:GET POST HEAD PUT等。
    消息报头:在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。 请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。 请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。 POST请求的内容放在实体正文中。 
    HTTP Response Message
    状态行:最主要的一个字段是服务器响应代码。比如,200 OK ,400 Bad Request ,401 Unauthorized ,403 Forbidden ,404 Not Found ,500 Internal Server Error ,503 Server Unavailable
    消息报头:普通报头和实体报头与 请求报头的类似。有区别的在于响应包头,响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
    (这部分说的比较粗略,网上的资源比较多,可以参考这一篇:http://blog.csdn.net/gueter/article/details/1524447 和http://book.51cto.com/art/200902/109036.htm )
    下面是ethereal抓到的一个get报文,post报文和响应报文,可以大概看一下。
     
     
     
    (2)TCP协议
    HTTP协议基于TCP协议,也就是HTTP的所有内容将作为TCP的实体被封装到TCP报文里面。TCP协议是面向连接,可靠的传输机制。也就是说客户端在与服务器交互数据的过程中会有一个连接建立和释放的过程,看上面的Http头部字段可以看到相关的字段。TCP有强大的窗口机制能够适应发送方和接收方的发送接收能力,也能根据整个网络状况进行调整。
    (3)IP协议
    IP协议处于整个TCP/IP协议族的承上启下地位。我们知道因特网上主机是靠一个32位的ip地址来定位的,HTTP用的URL也算是地址,但是比较高级,IP协议是理解不了的,所以需要一个从URL到IP的转换,这个过程通过DNS(域名查询系统)协议完成。我们用的每一台电脑上都配置了DNS服务器的地址,如果没有配置那么你的网关默认充当了,当我们有一个URL想知道对应的IP时就需要向DNS服务器发送查询请求了,它会把查询的结果发回。
    2,浏览器
    在web的世界里最不能少的角色就是浏览器。前面我们说到HTTP协议,HTTP消息有两种,request和response。浏览器的主要工作就是发送http request报文和接收处理http response报文。没有看过浏览器的开源文档,但是我觉得一个软件只要完成下面几件事,基本上就可以称的上一个浏览器了。
    (1)能够根据用户的请求生成合适的HTTP REQUEST报文。比如用户在浏览器地址栏上输入地址进行访问,浏览器要能够生成HTTP GET报文,表单的发送生成POST报文等等。
    (2) 能够对各种的RESPONSE进行处理。
    (3)渲染Html文档,生成文档树,能够解释css,还要有个javascript引擎。
    (4)能够发起dns查询得到ip地址。
    浏览器是个非常复杂的软件,当然现在的浏览器对http协议的支持应该不是问题,它们主要纠结于html文档渲染部分,对于用户层出不穷的新需求,w3c层出不穷的新标准,浏览器的路应该才刚刚开始。 
    3, 服务器
    服务器有两个层级的概念,它可以是机器,它上面存着一个站点的所有东西,也可以是软件,安装在一个也叫做服务器的机器上,帮助这个机器分发用户想要的东西。 我对服务器研究不多,只是用过几次apache。所以只是简单的谈谈我的认识。
    服务器最基本的功能就是响应客户端的资源请求。服务器首先会侦听80端口,来了http请求,就根据请求进行处理,请求一个图片那就根据路径找到资源发回,请求静态html页面也是如此,如果请求的是像php这样的动态页面应该先调用php编译器(或是解释器吧)生成html代码,然后返回给客户端。当然还要解决的一个问题就是并行问题以应对大访问量。
    因为对这方面不太了解,只想到了这么多。

    先说到这里, 有了新的认识再写。


    来源:http://www.cnblogs.com/orchid/archive/2012/04/21/2461442.html

     

     

    来源:从输入网址到显示网页的全过程分析
    http://www.itmian4.com/forum.php?mod=viewthread&tid=1655&fromuid=1931

    展开全文
  • 这段时间独立完成了个直播网站的搭建,虽然说是直播,其实只是引用了yy直播的链接,但是在这个过程中,个人感觉还是有蛮多东西需要记录下来的,故此写下此篇。 首先,各大直播网站有很多都有引用链接,一般都在...

    这段时间独立完成了一个直播网站的搭建,虽然说是直播,其实只是引用了yy直播的链接,但是在这个过程中,个人感觉还是有蛮多东西需要记录下来的,故此写下此篇。

    首先,各大直播网站有很多都有引用链接,一般都在分享里,分别会有embed标签的内容,还有就是ifame标签内容,下面讲讲这两个标签的区别,一部分为引用,一部分为个人实际开发经验。


    <embed> 标签


    属性

    属性 描述
    height pixels 设置嵌入内容的高度。
    src url 嵌入内容的 URL。
    type type 定义嵌入内容的类型。
    width pixels 设置嵌入内容的宽度。

    关于视频的格式以及编码就不做深入研究,同时embed标签还有很多属性可以设置,例如自动播放那些的,都可以在百度找到,同时有关于网页兼容问题,可以使用object标签,教程也可以在网上找到。


    下面通过虎牙里的直播获取到一个embed地址

    <embed width="800" height="500" allownetworking="all" allowscriptaccess="always" src="http://liveshare.huya.com/2023482443/huyacoop.swf" quality="high" bgcolor="#000" wmode="window" allowfullscreen="true" allowFullScreenInteractive="true" type="application/x-shockwave-flash">

    直接引用就好了,如果网站无法兼容,使用<object>+<embed>处理。


    关于手机直播源获取

    手机上是无法播放flash格式的视频的,所以需要获取一个可以在手机端播放的视频源。获取手段有很多,简单点的可以使用chrome浏览器,f12进入开发者模式,更换为手机驱动,有一些直播网站是可以看到的,例如虎牙。。。

    如果无法直接获取手机直播源,因为也有很多网站封装了,这时候就需要用手机抓包的方式去抓取手机直播源。当然,如果直播网站有ifame链接,直接用就是,例如qq视频、优酷视频这些是有的。

    至于怎么抓包,个人使用fiddler来抓包,很简单的,网上很多教程,一个小提醒,不要在直播app里抓包,一般封装了的,你用手机打开网页,然后抓包,就可以顺利抓取直播源

    一般抓取的直播源,都是m3u8格式的,用video标签加载就好了,然后视频直播源就搞定了,下一步,搭建一个聊天室

    展开全文
  • DHCP的4租约过程

    千次阅读 2018-03-22 19:56:51
    DHCP租约过程就是DHCP客户机动态获取IP地址的过程。DHCP租约过程分为4:①客户机请求IP(客户机发DHCPDISCOVER广播包);...详解4租约过程1:客户机请求IP客户机请求IP也称为DHCPDISCOVE...
  • SAS编程基础(2):常用 数据过程步

    千次阅读 2018-11-29 18:00:07
    /* 2018/11/29 SAS开发学习 常用语法及关键字 数据集合并:merge set 排序:proc sort 转置:proc transpose 写sql语句:proc sql 频数统计:proc freq .../* 数据过程步 / / 数据 读取处理数据 ...
  • 智能家居第一步: WiFi 设备怎么连上网字数1341 阅读236 评论0 喜欢1拿起手机打开软件就可以远程使用智能设备,是不是起来很酷炫。实际使用的效果如何,将手机和设备第一次连接起来, 是否会一帆风顺呢?如果你...
  • 开发过程中, 走了不少弯路,简单记下几个点以备用首先当然微信文档还是要先仔细过遍的. 文档链接: 点击打开链接 写在前面:三方平台代公众号办业务之前,公众号应该已经授权给三方平台权限了,此时应该已经获取...
  • 开始博士期间最后个研究问题–3D物体分类,但是刚开始就遇到个很麻烦的问题,ModelNet10/40数据集中的3D物体是.OFF文件,python无法直接读取off文件,经过大半个月的摸索,逐渐思路清晰,记录下整个研究过程。...
  • Java获取存储过程返回的多个结果集

    千次阅读 2017-09-08 07:15:24
    第一步:写你的存储过程  delimiter //  create procedure test_proc ()  begin  select * from test_table1 where id=1;  select * from test_table2 where id=2;  select * from test...
  • 微信公众号开发系列-网页授权获取用户基本信息,如果用户在微信中(Web微信除外)访问公众号的三方网页,公众号开发者可以通过此接口获取当前用户基本信息(包括昵称、性别、城市、国家)。利用用户信息,可以实现...
  • 既然前面有说到spring security 是如何验证当前用户以及获取到当前用户信息,哪么spring security auth2.0又是如何验证当前用户信息的呢? 技术详解: spring security auth2.0验证用户信息其实更加简单,具体的...
  • typedef介绍

    万次阅读 多人点赞 2019-08-21 17:18:48
    typedef为C语言的关键字,作用是为种数据类型定义个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 typedef本身是种存储类的关键字,与auto、extern、static、...
  • 图解DHCP的4租约过程

    万次阅读 2016-04-19 09:11:56
    DHCP租约过程就是DHCP客户机动态获取IP地址的过程。 DHCP租约过程分为4: ①客户机请求IP(客户机发DHCPDISCOVER广播包); ②服务器响应(服务器发DHCPOFFER广播包); ③客户机选择IP(客户机发DHCP...
  • 使用loadrunner模拟虚拟用户行为的第一步是录制脚本,也是很关键的一步。 一、选择首页中的创建/编辑脚本,打开VU Gen,新建脚本 二、选择协议 三、输入系统url,设置录制选项 【应用...
  • 浅析DNS域名解析过程

    万次阅读 2018-10-10 08:56:29
    转载自:... 一、DNS域名解析步骤 下图是DNS域名解析的一个示例图,它涵盖了基本解析步骤和原理。 下面DNS解析步骤进行讲解,后面将采用命令行的形式来跟踪DNS解析过程。... 第一步:检查浏览器缓存中是...
  • 微信小程序授权 获取用户信息

    万次阅读 多人点赞 2018-05-30 18:25:37
    小程序在18年4月25日做了次更新,不再支持直接弹出授权信息框 具体代码请看这里: >> 获取用户信息(用户信息获取unionId、openId)请移步到这里 用户打开小程序时,直接弹框获取用户信息授权,可能会...
  • 深入了解DHCP的4租约过程

    千次阅读 2017-05-17 22:02:52
    最近在调试STM32F107+LAN8720+lwip的过程中网络方面遇到了很多问题。...DHCP租约过程就是DHCP客户机动态获取IP地址的过程。 DHCP租约过程分为4: 1、客户机请求IP(客户机发DHCPDISCOVER广播包);
  • 可以获取网络,本地使用:imageView.setImageBitmap(ImageUtil.createVideoThumbnail(urlPath,MediaStore.Images.Thumbnails.MINI_KIND));public static Bitmap createVideoThumbnail(String filePath, int kind) {...
  • LTE学习笔记八:物理层过程

    万次阅读 多人点赞 2018-01-14 15:09:41
    终端和网络需要建立密切的信息交互,手机和网络都要...网络想找到某个终端,以期与其建立业务连接,这就是寻呼过程;网络的自适应能力依赖于对无线环境的精确感知,测量过程为网络的自适应提供依据;终端和网络的有
  • IDM

    千次阅读 2019-04-06 12:12:56
    不过在微信和大家交流的过程中发现,依然有很多朋友在使用过程中没有深入挖掘IDM的使用场景,而且很多细节都没有很好地掌握,导致在使用IDM的过程中出现各种乱七八糟的错误,包括IDM+结合油候脚本实现百度云资源的...
  • HTTP请求过程)——DNS解析过程

    千次阅读 2019-06-01 14:55:41
    第一步:进行域名解析,得到IP地址; 第二步:找到IP地址对应的服务器通过三次握手建立TCP连接,向服务器发送HTTP Request请求,并得到服务器的Response响应; 第三步:浏览器根据响应结果渲染输出页面。 DNS解析...
  • 前言 当我们在浏览器中输入一个URL访问地址,然后浏览器返回给我们一个响应页面,这内部... 这里将浏览器机制放在第一步是考虑如果浏览器中有了缓存数据,浏览器再次向目标URL发送请求时,在数据不过期的情况下,会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 493,311
精华内容 197,324
关键字:

信息获取过程第一步