posted @ 2009-02-26 00:56 大城小格 阅读(215) 评论(0)
编辑
posted @ 2008-10-01 14:14 大城小格 阅读(165) 评论(1)
编辑
本来以为,当一个类以singleton创建之后,调用他的方法都是线程安全的。
结果,我错了!!!!
如果要线程安全的去调用方法,那么方法里面也要声明线程安全。
posted @ 2009-02-26 00:56 大城小格 阅读(215) 评论(0)
编辑
前言
现在对即时IM做的最好的是pidgin,基本上包含了现有所有的IM,列表如下:
Supported chat networks:
- AIM
- Bonjour
- Gadu-Gadu
- Google Talk
- Groupwise
- ICQ
- IRC
- MSN
- MySpaceIM
- QQ
- SILC
- SIMPLE
- Sametime
- XMPP
- Yahoo!
- Zephyr
以后我会慢慢入侵上面的网络,现在已经完成的:Google Talk, XMPP, QQ, MSN,开始攻占旺旺。
前提准备
有端口分析设备:
Wireshark 去扫描端口,然后分析协议。
Wireshark过滤规则
下面简单说一下常用的过滤规则:
1、可按协议类型过滤,比如只想看使用HTTP协议的那就直接输入“HTTP”;
2、若只要显示与指定IP(比如说google中国64.233.189.104)通信的记录则可输入“ip.addr ==
64.233.189.104”;如果要再限制为只要从64.233.189.104来的记录则应输入“ip.src ==
64.233.189.104”,而到64.233.189.104的记录则应输入“ip.dst == 64.233.189.104”;
3、还可以针对HTTP的请求方法进行过滤,比如只显示发送“GET”请求的:http.request.method == "GET":
4、最后需要提醒一点:过滤语句可利用“&&”(表示“与”)和“||”(表示“或”)来组合使用多个限制规则,比如“(http && ip.dst == 64.233.189.104) || dns”:
下载
http://www.box.net/shared/7g9hqfalrz、
WireShark再次入门
http://openmaniak.com/cn/wireshark_filters.php
-
- |
捕捉过滤器:用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
显示过滤器:在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。 |
1. 捕捉过滤器
捕捉过滤器的语法与其它使用Lipcap(Linux)或者Winpcap(Windows)库开发的软件一样,比如著名的TCPdump。捕捉过滤器必须在开始捕捉前设置完毕,这一点跟显示过滤器是不同的。
设置捕捉过滤器的步骤是:
- 选择 capture -> options。
- 填写"capture filter"栏或者点击"capture filter"按钮为您的过滤器起一个名字并保存,以便在今后的捕捉中继续使用这个过滤器。
- 点击开始(Start)进行捕捉。


| 语法: |
|
Protocol |
|
Direction |
|
Host(s) |
|
Value |
|
Logical Operations |
|
Other expression |
| 例子: |
|
tcp |
|
dst |
|
10.1.1.1 |
|
80 |
|
and |
|
tcp dst 10.2.2.2 3128 |
Protocol(协议):
可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果没有特别指明是什么协议,则默认使用所有支持的协议。
Direction(方向):
可能的值: src, dst, src and dst, src or dst
如果没有特别指明来源或目的地,则默认使用 "src or dst" 作为关键字。
例如,"host 10.2.2.2"与"src or dst host 10.2.2.2"是一样的。
Host(s):
可能的值: net, port, host, portrange.
如果没有指定此值,则默认使用"host"关键字。
例如,"src 10.1.1.1"与"src host 10.1.1.1"相同。
Logical Operations(逻辑运算):
可能的值:not, and, or.
否("not")具有最高的优先级。或("or")和与("and")具有相同的优先级,运算时从左至右进行。
例如,
"not tcp port 3128 and tcp port 23"与"(not tcp port 3128) and tcp port 23"相同。
"not tcp port 3128 and tcp port 23"与"not (tcp port 3128 and tcp port 23)"不同。
posted @ 2009-02-13 09:50 大城小格 阅读(300) 评论(1)
编辑
前言
我只是列举了一个我目前解决不了的问题,希望大家看了我的分析能够一起解决。
前提条件:
反编译了Fetion的官方源码,这个没什么难度,下载个Reflector就实现了项目的反编译。
废话先说说:
首先发发牢骚,飞信的核心代码写的还算可以,可是到了应用层之后就非常的烂,和实习生的水平差不多,中国移动也真是惨,不懂技术就被微软玩的团团转。举个例子,竟然在user这个级别硬生生插入了个persistencyManager,硬生生的去持久化数据。
这个完全可以用设计模式解决的,却自己和自己绕来绕去。愚蠢!
还有在user.status里面的set,反编译后可以看到一堆的代码,一个赋值操作又被捆绑了一堆逻辑,不知道是fetion小组哪个白痴的杰作。搞到我debug的时候绕了半天才发现这里操作了sqllite。
正文:
连接核心在imps.CLient.CommLayer.ConnectionManagerImp里面。就是CreateSipConnection。
他核心使用了3个连接去尝试,包括:TcpSipConnection / HttpSipConenction / HTSipConnection
当设置了UsrDirect的连接方式,就启动TcpSipConnection
其余的都是默认必须执行
官方的飞信实际上使用了HttpSipConnection,可惜我调试了半天发现这个连接没有被启动,估计哪里出现了exception,微软的狗屎代码又没有去catch,然后直接停止了这个连接的启动。
网上很多人说官方的代码一段时间会掉线,就是因为没有启动HttpSipConnection,他里面有个5秒钟的轮训发送SIPP,保持连接(用HttpAnalyzer就可以看到)
大概过程:
1.登录的时候,loginFramework调用了DoLogin方法,初始化了一堆LoginAction
2.其中有个是sipcTunnelAction 是个关键,就是实际连接远程的服务器
3.当sipcTunnelAction.Execute(),就会调用ConnectionFactory去创建SipConnectionImp,同时就初始化了HTSipConnection / HttpSipCOnnection。并且开始连接。
4.首先是启动HTSipConnection
现在的问题就是官方的程序能够启动HTtpSipConnection,但是我反射后的代码不能。
我作了如下测试:
如果我把官方所有的配置文件删除了去启动,第一次也是没有启动HttpSipCOnnection,但是会自动修复配置文件,第二次启动的时候就能够回复httpsipconnection。
这个就是关键。
希望有兴趣的朋友帮忙继续研究下去!
posted @ 2009-02-11 23:23 大城小格 阅读(2879) 评论(10)
编辑
messenger.Nameserver.ContactAdded += new ListMutatedAddedEventHandler(Nameserver_ContactAdded);
private void Nameserver_ContactAdded(object sender, ListMutateEventArgs e)
{
e.Contact.RemoveFromList();
}
posted @ 2008-11-27 01:09 大城小格 阅读(150) 评论(1)
编辑
posted @ 2008-11-03 00:10 大城小格 阅读(269) 评论(0)
编辑
posted @ 2008-10-27 11:26 大城小格 阅读(292) 评论(1)
编辑
posted @ 2008-10-26 19:53 大城小格 阅读(334) 评论(0)
编辑
posted @ 2008-10-24 12:53 大城小格 阅读(326) 评论(0)
编辑
posted @ 2008-10-24 11:24 大城小格 阅读(398) 评论(1)
编辑