最近园子里,关于.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拦截,不是更爽朗。。。。
所以是不是应该换个名,叫电信网关拦截弹广告之类的。。。。
本人非网络专业,以上对网络的忽悠及见解,纯属个人认知,不代表权威,若有错误的,欢迎批评指正。
版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/archive/2012/11/25/2787770.html