zoukankan      html  css  js  c++  java
  • 秋式广告杀手技术分享:网络请求基础知识

    最近园子里,关于.net门槛的文章风风火火,不过这类事情每过段时间就会出来一次,所以酱油都懒的打了。

    当然个人也是有想法的,特别是这两天碰巧和一个三四年经验的java开发者呆在一起,对方说.net就是拉拉控件时,我还是很严厉的批评了对方,用自己比对方更具的丰富知识,重新引导对方对.net的看法。

    不知道是谁在传播这种.net纯控件论,而且这么传播的这个“谁",一定是个新手,所以建议新手,就不要整天跑外面乱吹了,好好学知识去吧。

    对于老手,在对新手进行知识传播时,特别是刚教授新学拉控件的时候,一定要讲下.net的精深,告诉他们学的是皮毛,没事不要乱吹自己有多厉害,做人要谦虚。

    现在我们看下知识点:

    现在很多开发的书,它们只讲.net的原理的开发手法,所以很多人只局域在.net的开发,光这样,到达100级也无法成功转职的。

    试问其它语言(java) 和.net有啥不同?

    不同的只是同样是初级,人家比你多懂点form标签属性的method属性有Get、Post等,action的属性可以指定数据传输到哪个页面。

    而.net的新手从控件入门的不懂,其实,新手只要顺带再学一下html,了解下基础Http协议,基本可以完胜java,所以教人控件的导师们,教的时候,除了引导学生对比查看前后生成的html和aspx之外,form属性,也要特别的花精力说一下。

    如果你再了解一下下面的知识,就可以秒杀同级java选手了,至少不会乱吹啥.net只是xxx。

    跳出.net的领域,我们回归一下,浏览器输出域名之后,发生了什么事?

    搜搜互联网,也许同样的标题,你可以找出的只是后半段的事,今天这里,给大伙补充下前半段的事:

    1:浏览器那点事:

    浏览器是什么?其实就是一个高效的代理,负责帮用户请求特定的网址,然后解析并呈现。

    几个必须说明的是:

    浏览器监听的端口不是80:

    通常是1024以上,而且会开好几个,(用心想想,这么多浏览器,一起开的时候,都从80端口来,那不是乱套了)

    所以从本机发出的请求,不是80端口,比较多是10000号以上的端口。

    学会查找一个进程对应开的端口:

    打开任务管理器,查看进程对应的PID(如果默认没显示,在任务管理器的选项里找,然后打勾)

    tp1

    接着,打开cmd:输入netstat -nao -p tcp,往下拉:

    发现找不到了,所以就不截图了,所以这里就得反着说了,为啥找不到了?因为浏览器进程的端口目前没有活动,回收了。

    所以,你反过来找,通过端口找到PID,再回去找相应的进程,就一定有对应的进程。 

    目前阶段,秋式广告杀手在广告屏蔽上,取了一定的成效,以最高效的方式的,屏蔽了广告,又不影响网络。

    不过只能处理域名方式,有些广告是IP形式出现的,软件暂时不能处理,这着实让我有点想法。


    所以我最近就在想,想一些网络请求的执行流程:

    当我们在浏览器输入一个网址的时候?发生了什么事?

    如果你去搜网络,会告诉你一些本机之外的事情,这里我就讲一下我知道的,本机之内的事情:

    1:浏览器拿到你的域名请求,要怎么处理,是浏览器的事了, 不过正规的都会按以下流程办事:

    把域名解析为IP:

    如何解析呢?

    1:查找浏览器自身的DNS缓存表。

    2:查找系统Hosts文件。

    3:查询系统缓存(不知道这个有没有,我只是好像大概也许可能听说过)

    4:请求本机DNS指向的服务器。

    所以大伙看到,秋式广告杀手在开启,调整完Hosts文件之后,需要重启下浏览器的原因,就是因为浏览器自身有DNS缓存表,不重启,指向的还是旧的IP。

    每种浏览器,都有自身一种清空DNS缓存表的机制:

    像IE,可以设置注册表来禁止,

    像Chrome,可以在浏览器通过特殊命令调出窗口,再清除。

    像Firefox,可以在选项里直接设置。 

    不同浏览器对于清空或禁止DNS缓存表都有自己的一套,所以,秋式广告杀手,只处理了像IE,通过注册表就可以处理的事情。

    另外其它浏览器,无法直接用代码操作,你总不能去教用户怎么设置吧?还不如告诉用户重启浏览器的操作,就显的更为简单了。


    如果选择步骤一上拦截:那么就得弄成浏览器插件了, 通过写浏览器插件,你可以掌握到用户第一手的请求,也可以对用户请求后的东西进行修改再返回;

    写浏览器插件,应该是最理想的做法,但是你得懂一点浏览器插件语言的东西,学一学新的知识。美中不足的是,写出来的软件,只适用这单独的一种浏览器。

    如果要全面有效,还得不停的针对浏览器写插件,然后再告诉用户,每种浏览器都给我装上一个,这样就OK了。。。。 

    再不成,就自己写个浏览器了,浏览器,不用内置的ie组件,自己能不能写?

    能写,有个三五年经验的人都能写,别说自己不会(现有的互联网,技术都是散落的,就怕你组合)

    但写出来考虑的因素特多:效率、性能、呈现、解析、速度,综合起来,估计就得是千年老龟。。。

    所以。。。自己玩玩,算是一种技术研究学习,倒也没啥不可。。。 

    正如上面四个步骤,Hosts是排在第二位的,不过Hosts只能一条一条的写入,好在要拦截的并不多。 

    对于步骤三,基本是没想啥法,操作系统缓存,目前还没意图。

    对于通过修改本机DNS指向自己的服务器,这样一来,的确可以做很多事,不过对于本人这点资金实力,往后期想,也负担不起这种责任。

    因为所有的请求都会到你服务器,你要负责所有的解析,要是自己服务器挂了,累大伙上不了网,不被骂死也被口水淹死。

    说了这么多,一来是要告诉大伙,软件为什么选择了hosts方式。

    从一讲到四,都是说域名,那IP咋拦截?

    这里又得给大伙讲点我所知道的网络知识:

    1:IP包 先查路由表(找到数据要发送到哪个IP(网关))。

    2:再查arp表(要把IP换成MAC地址)。

    3:物理硬件把数据传到网关(把数据送到MAC地址上去)

    4: 到了网关(开包,然后循环123找下一个发送点)


    除了以上的,还有好多通过设置是可以阻止IP请求的,这些设置,具体是1234的前中后,哪一步拦截的?

    留给大伙想。

    如果我们要阻止某个IP的请求,我们可以怎么做?

    1:修改路由表,把指定的ID,忽悠到一个不存在的网关去,这样IP送不出去,自然就实现了屏蔽的功能。

    2:修改arp表,把网关的地址,忽悠一个不存在的地址,这样,恭喜,你断网了。。哈哈。

    3:拦截网卡的数据,数据总是要从一个网卡跳到另一个网卡的,通过拦截网卡的数据,这就回到了上面说的全局拦截了。

    4:网关拦截(这通常就是路由器了,除了特定的路由器提供拦截设置外,哥们也掌控不到)

    这里就得说了,你要开了规则限制,等于全局拦截检测了,网速难免会慢一些的,虽然路由器的算法很高效。

    所以,下一次增加的功能,应该会从路由表出发,限制特定的IP,到鬼门关去,让它回不来。

    另外要说一下的,经常电信或其它宽带会弹广告,我们习惯性的会说,是DNS拦截弹的广告。。

    我就在想啊。。这DNS拦截,这DNS拦截,最多也就指向新的IP,也不至于能修改数据吧,总不能DNS服务器,还负责帮你请求数据,再插入广告吧?

    所以哥是这样想的:能拦截请求的,只有电信或其它宽带网关(它才是数据进进出出的窗口,只有这里拦截,返回时再插入广告)

    所以DNS拦截弹广告,是不是错误的让人以为,DNS也能是实现广告返回?

    如果DNS真能修改请求后的数据,插入广告,那软件回归DNS拦截,不是更爽朗。。。。 

    所以是不是应该换个名,叫电信网关拦截弹广告之类的。。。。 


    本人非网络专业,以上对网络的忽悠及见解,纯属个人认知,不代表权威,若有错误的,欢迎批评指正。

  • 相关阅读:
    啊,好久没更新了,今天分享一个小工具,两个方法,转换字节数组成十六进制字符串
    Oracle的关于建表,约束,查询等的练习
    Oracle的完整练习,纯手工打字,可能有一两点错误。。。
    Oracle的用户管理,授权及备份
    Oracle视图,序列及同义词、集合操作
    Oracle的总体回顾
    Oracle表管理
    Oracle基本代码学习
    网上B2C书城,1.0javaWEB版!!好几天没更新了,都忙着做那个网站了~
    Daily Scrum 12.23
  • 原文地址:https://www.cnblogs.com/cyq1162/p/2787770.html
Copyright © 2011-2022 走看看