淘客熙熙

主题:请大家帮忙参考一下:这样的跨平台客户软件如何实现? -- kingcu

共:💬41 🌺7 新:
全看树展主题 · 分页首页 上页
/ 3
下页 末页
家园 请大家帮忙参考一下:这样的跨平台客户软件如何实现?

准备开发的一个客户端软件,要求要跨平台,还要能够截获用户浏览器发出的http请求。具体要求如下,跨平台:要求能够在所有主流操作系统上运行,Windows 2000/XP/Vista/7,Mac OS X和Linux;截获浏览器的http请求:每当用户打开一个网页的时候,要求截获这个http请求,并记录其url,还要求支持所有的主流浏览器:FireFox, IE, Chrome, Opera, Safari。

做了几个初步设计,请大家帮着参考一下,如果您有更好的方案,还请不吝赐教。

方案一

用Abobe AIR作为用户界面的平台,AIR runtime现在可以支持上面的三种系统,可以解决跨平台的要求。但是AIR没有什么系统级编程能力,所以无法直接截获HTTP Request。但是AIR可以进行文件操作,而浏览器的历史文件(history file)里存有访问过的url,所以可以通过读取这个history file,得到url。但是这个设计有太多的脆弱环节,AIR无法确切的知道系统上装了那些浏览器,浏览器的history不一定总是存在特定的位置,用户访问过的url也不一定总是会写入history,等等。而且,读取history的操作也会很复杂,因为不光每一种浏览器的history文件的格式不一样,就连同一种浏览器的不同版本之间都不一样,例如FireFox,3.0之前的版本用的是Mork文件格式,3.0开始用SQLite,但是3.0和3.5的SQLite Database Schema也不一样。

方案二

把客户端分成两个部分,一部分是AIR做的用户界面,另一部分是系统级编程(native system programming)实现的http截获。但是程序分成两个部分,增加了复杂性,也降低了系统的可靠性。

方案三

用Qt来实现客户端,由于是C++,而且Qt比AIR有多得多的系统编程支持,可以不需要把客户端分成两部分。

这个程序的关键在于如何截获http request,我现在没有任何具体的实现或是直接的资料,只知道几个大概的方向:在Windows下,可以用Winsock LSP(Layered Service Provider)实现;或者是写一个HTTP Proxy Server,然后让用户的所有浏览器都指向这个proxy。

家园 新绿坝开发中?
家园 用libpcap

Windows下用winpcap,截获所有的以太帧,然后分析IP,TCP,HTTP

缺点是只能根据端口号来判断是否是HTTP(全判断CPU太高),另外一个是拼TCP流的时候要注意一下算法,兼顾效率和解析成功率

这玩意以前做过一个,是在核心网交换机解析用户所希望的全部业务,效率是个瓶颈,解析HTTP协议太费CPU和内存,在单机上,每分钟到1.5G就撑不住鸟

家园 绿坝是什么?
家园 谢谢。感觉太底层了,会增加复杂度,效率也是问题。
家园 内事问BAIDU,外事问Google

你不是生活在真空吧?

家园 Java也许是个不错的选择
家园 做一个虚拟设备驱动程序

虚拟一个网卡插在真正网卡和应用软件之间。这样行不行?

家园 这个方案是最合适的
家园 用Qt比较好吧。用AIR的话,一是AIR的能力

有限,很多事情做不了,二是AIR的运行库好像不能随应用一起发布,分发的时候比较麻烦。截获HTTP请求可以单独为各个浏览器做插件,现在的主流浏览器都是开源的,非开源的也有sdk,做插件应该是比较容易,也不用分析底层协议,那样既麻烦又不可靠。

家园 印象中IE的plugin开发起来好像挺麻烦的

要写ActiveX。而且写plugin的话,光主流浏览器就有至少5、6种,同一种浏览器的不同版本之间也可能不同,程序量会大一些。但是和写http proxy比的话,技术难度会低不少,不失为一条可行的解决途径。花谢了。

家园 您指的是AWT还是Swing?

不会让俺用那个JavaFx吧,

家园 也许行,但是太底层了,还不如写个http proxy。
家园 【讨论】HTTP sniffer for windows

http://www.sharewareconnection.com/titles/capture-http-traffic.htm

家园 监听局域网还不简单,这么多工具

snort tcpdump ,只要你把网卡的混杂模式打开,整个网段的通信都可以看到。

全看树展主题 · 分页首页 上页
/ 3
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河