希望得到帮助

4 views
Skip to first unread message

Kse8107

unread,
Nov 3, 2009, 9:25:06 PM11/3/09
to OpenQ开发者邮件列表
我们是来自四川大学的一个团队,希望能够开发一个linux下的软件,实现pidgin中大部分协议之间的跨协议通讯。大体的想法如下:比如说我只有一
个msn的账号但是没有qq的账号,但是我知道对方的qq账号并且想和对方通讯,那么可以通过一个qq的插件从服务器上匿名获取对方qq的IP(若对方
在线),从而在没有qq账号的情况下以msn用户的身份完成所谓“跨协议”的通讯(嗯……虽然这点pidgin做的已经很好了,就是把所有的通讯协议集
成在一个软件中,但是我们希望能够有一点突破)。我们希望能从贵团队中获得一些帮助,以及关于能否以匿名方式获得一个在线用户的IP,等一系列关于技术
方面可行性的问题。

Zhao Tongyi

unread,
Nov 3, 2009, 11:37:21 PM11/3/09
to op...@googlegroups.com

你好,
你要完成这个工作,我有几点要说明
第一,pidgin是使用插件的方式来完成各个协议的通讯,每一个插件之间并不进行通讯,
如果你要做到各个协议之间的通讯,你必须要实现各个协议之间的交互,
 
第二,QQ账户的客户端的IP并不是每一个客户端都会被服务器传送,也就是说你只能得到其中的一部分好友的IP地址
第三,好友的IP地址也有可能是内网的,比如(192.168.x.x),(10,x,x,x)等
第四,即使你得到了这些地址,你怎么通过MSN协议来完成通讯呢。
 
综述,是个复杂,在技术上也不一定可行的方案,祝好

 
2009/11/4 Kse8107 <chenghon...@gmail.com>



--
Best regards,

Tongyi ,Zhao

Kse8107

unread,
Nov 4, 2009, 12:22:02 AM11/4/09
to OpenQ开发者邮件列表
嗯~现在所最担心的问题就是技术上不可行。我想说一下我所知道的:

第一,我们对这个新的中间的插件的期望的实现形式是,比如说本地用的是msn协议,然后按下发送键之后,客户端会试图调用底层函数构造一个msn协议的
数据包,这个插件做的是在创建这个数据包的时候按照qq的协议封装这个数据包,再发送;然后接受的时候收到的肯定是个qq的数据包,插件捕捉到这个数据
包后解码,然后按照msn的协议再封装一次,发送给本机的客户端。关键的问题就是在填入本机的account信息的时候比较棘手,以及不知道这么做效率
怎么样。不过我想只要得到了对方的ip,建立一个p2p的通讯应该是没有问题的。

第二,关于内网ip,我不知道现在pidgin是怎么做的......我猜想可能用的是NAT吧,既然对方的客户端要登录,那么肯定要发送一个信息使用外网IP
连接到服务器端,于是NAT路由器的表上就有了这么一对对应关系,于是便可以从外网访问了。不知道我说的对不对~~书上是这么写的呃,我联想了一下。。
但是既然pidgin解决了这个问题,我想应该可以参考其源代码解决,这个方面的问题以前没考虑过......

谢谢大家的关注以及回复。

On Nov 4, 12:37 pm, Zhao Tongyi <zhaoton...@gmail.com> wrote:
> 你好,
> 你要完成这个工作,我有几点要说明
> 第一,pidgin是使用插件的方式来完成各个协议的通讯,每一个插件之间并不进行通讯,
> 如果你要做到各个协议之间的通讯,你必须要实现各个协议之间的交互,
>
> 第二,QQ账户的客户端的IP并不是每一个客户端都会被服务器传送,也就是说你只能得到其中的一部分好友的IP地址
> 第三,好友的IP地址也有可能是内网的,比如(192.168.x.x),(10,x,x,x)等
> 第四,即使你得到了这些地址,你怎么通过MSN协议来完成通讯呢。
>
> 综述,是个复杂,在技术上也不一定可行的方案,祝好
>

> 2009/11/4 Kse8107 <chenghongzhou8...@gmail.com>


>
> > 我们是来自四川大学的一个团队,希望能够开发一个linux下的软件,实现pidgin中大部分协议之间的跨协议通讯。大体的想法如下:比如说我只有一
> > 个msn的账号但是没有qq的账号,但是我知道对方的qq账号并且想和对方通讯,那么可以通过一个qq的插件从服务器上匿名获取对方qq的IP(若对方

> > 在线),从而在没有qq账号的情况下以msn用户的身份完成所谓"跨协议"的通讯(嗯......虽然这点pidgin做的已经很好了,就是把所有的通讯协议集

Zhao Tongyi

unread,
Nov 4, 2009, 12:37:59 AM11/4/09
to op...@googlegroups.com


2009/11/4 Kse8107 <chenghon...@gmail.com>

嗯~现在所最担心的问题就是技术上不可行。我想说一下我所知道的:

第一,我们对这个新的中间的插件的期望的实现形式是,比如说本地用的是msn协议,然后按下发送键之后,客户端会试图调用底层函数构造一个msn协议的
数据包,这个插件做的是在创建这个数据包的时候按照qq的协议封装这个数据包,再发送;然后接受的时候收到的肯定是个qq的数据包,插件捕捉到这个数据
包后解码,然后按照msn的协议再封装一次,发送给本机的客户端。关键的问题就是在填入本机的account信息的时候比较棘手,以及不知道这么做效率
怎么样。不过我想只要得到了对方的ip,建立一个p2p的通讯应该是没有问题的。
你这太混乱了,比如说你现在已经实现了一个软件,即可以发MSN有可以发QQ,这时候你这个软件的MSN和QQ都登录了,并且都获取到了密钥,这时候你可以安装你说的封装数据包发送,这个数据包你都伪填充好了,但是这又什么意思嘛,难道就是为了MSN和QQ只需要发一遍?那你CTRL+C,CTRL+V。好了
 

第二,关于内网ip,我不知道现在pidgin是怎么做的......我猜想可能用的是NAT吧,既然对方的客户端要登录,那么肯定要发送一个信息使用外网IP
连接到服务器端,于是NAT路由器的表上就有了这么一对对应关系,于是便可以从外网访问了。不知道我说的对不对~~书上是这么写的呃,我联想了一下。。
但是既然pidgin解决了这个问题,我想应该可以参考其源代码解决,这个方面的问题以前没考虑过......

我所说的得到对端IP地址,是在QQ协议里,获取好友信息时候,服务器会发送给本地的一个IP地址和端口,那些插件都是根据QQ 服务器传送的地址解析地理域名的,但是服务器并不能吧所有的地址发送给客户端,并且 有些是内网地址,

Ka-Hing Cheung

unread,
Nov 4, 2009, 12:43:00 AM11/4/09
to op...@googlegroups.com
2009/11/3 Kse8107 <chenghon...@gmail.com>:

> 嗯~现在所最担心的问题就是技术上不可行。我想说一下我所知道的:
>
> 第一,我们对这个新的中间的插件的期望的实现形式是,比如说本地用的是msn协议,然后按下发送键之后,客户端会试图调用底层函数构造一个msn协议的
> 数据包,这个插件做的是在创建这个数据包的时候按照qq的协议封装这个数据包,再发送;然后接受的时候收到的肯定是个qq的数据包,插件捕捉到这个数据
> 包后解码,然后按照msn的协议再封装一次,发送给本机的客户端。关键的问题就是在填入本机的account信息的时候比较棘手,以及不知道这么做效率
> 怎么样。不过我想只要得到了对方的ip,建立一个p2p的通讯应该是没有问题的。

既然是用 P2P,那麽跟MSN/QQ有甚麽關係?同意Zhao Tongyi 的說法,你這太混亂了,究竟你自己明不明白?

>
> 第二,关于内网ip,我不知道现在pidgin是怎么做的......我猜想可能用的是NAT吧,既然对方的客户端要登录,那么肯定要发送一个信息使用外网IP
> 连接到服务器端,于是NAT路由器的表上就有了这么一对对应关系,于是便可以从外网访问了。不知道我说的对不对~~书上是这么写的呃,我联想了一下。。
> 但是既然pidgin解决了这个问题,我想应该可以参考其源代码解决,这个方面的问题以前没考虑过......

Pidgin 一般情況下不需要知道好友的 IP。

-khc

Kse8107

unread,
Nov 4, 2009, 1:35:39 AM11/4/09
to OpenQ开发者邮件列表


>
> 既然是用 P2P,那麽跟MSN/QQ有甚麽關係?同意Zhao Tongyi 的說法,你這太混亂了,究竟你自己明不明白?
>

这个,似乎是我表达的有问题。我们现在所做的,只是希望能够在技术上面讨论跨协议转换这种做法的可行性,就像msn和yahoo做的那样,最终期望达到
的效果是,我只需要拥有一个协议A的账号,就可以有办法同时跟协议A、B、C、D中的好友实现通讯。有点类似http://hi.baidu.com/
tyg1/blog/item/869e1f3088b5ae99a8018e5c.html这里讲的意思,但是gtalk我没用过。看它的原理描述是
Jabber Client-Jabber Server1-Jabber Server2-Other IM Client
(eg,MSN,YAHOO,ICQ),我想把它做成p2p的,就是两个不同协议客户端之间直接采用某种协议进行通讯(两者中的某一种?),不通过
Server转发。

另外qq/msn不是客户端之间直接通讯的么?就是我想跟你聊天,然后我从Server得到你的IP,然后我用这个IP跟你进行通讯,TCP或者
UDP,这不对么?

>
> Pidgin 一般情況下不需要知道好友的 IP。
>

这不了解。那是如何做的?全部通过服务器转发么?

Ka-Hing Cheung

unread,
Nov 4, 2009, 1:40:10 AM11/4/09
to op...@googlegroups.com
2009/11/3 Kse8107 <chenghon...@gmail.com>:

> 这个,似乎是我表达的有问题。我们现在所做的,只是希望能够在技术上面讨论跨协议转换这种做法的可行性,就像msn和yahoo做的那样,最终期望达到
> 的效果是,我只需要拥有一个协议A的账号,就可以有办法同时跟协议A、B、C、D中的好友实现通讯。有点类似http://hi.baidu.com/
> tyg1/blog/item/869e1f3088b5ae99a8018e5c.html这里讲的意思,但是gtalk我没用过。看它的原理描述是
> Jabber Client-Jabber Server1-Jabber Server2-Other IM Client
> (eg,MSN,YAHOO,ICQ),我想把它做成p2p的,就是两个不同协议客户端之间直接采用某种协议进行通讯(两者中的某一种?),不通过
> Server转发。
>

我想這跟你對下面問題的誤解有關。

> 另外qq/msn不是客户端之间直接通讯的么?就是我想跟你聊天,然后我从Server得到你的IP,然后我用这个IP跟你进行通讯,TCP或者
> UDP,这不对么?

不對。

>
>>
>> Pidgin 一般情況下不需要知道好友的 IP。
>>
>
> 这不了解。那是如何做的?全部通过服务器转发么?

-khc

Kse8107

unread,
Nov 4, 2009, 2:00:56 AM11/4/09
to OpenQ开发者邮件列表

> 我想這跟你對下面問題的誤解有關。
>
> > 另外qq/msn不是客户端之间直接通讯的么?就是我想跟你聊天,然后我从Server得到你的IP,然后我用这个IP跟你进行通讯,TCP或者
> > UDP,这不对么?
>
> 不對。
>
>
> >> Pidgin 一般情況下不需要知道好友的 IP。
>
> > 这不了解。那是如何做的?全部通过服务器转发么?
>
> 對
>


官方的qq也用的是这种方式么?这样的话每天服务器负载岂不是很大,中国那么多亿人用qq……

另外,我想请问一下,比方说我同时在跟2个人聊qq,所采用的密钥是不是一样的?

> 我所说的得到对端IP地址,是在QQ协议里,获取好友信息时候,服务器会发送给本地的一个IP地址和端口,那些插件都是根据QQ
>服务器传送的地址解析地理域名的,但是服务器并不能吧所有的地址发送给客户端,并且 有些是内网地址,

这个不是很懂。。

Zhao Tongyi

unread,
Nov 4, 2009, 2:59:38 AM11/4/09
to op...@googlegroups.com


2009/11/4 Kse8107 <chenghon...@gmail.com>


> 我想這跟你對下面問題的誤解有關。
>
> > 另外qq/msn不是客户端之间直接通讯的么?就是我想跟你聊天,然后我从Server得到你的IP,然后我用这个IP跟你进行通讯,TCP或者
> > UDP,这不对么?
>
> 不對。
>
>
> >> Pidgin 一般情況下不需要知道好友的 IP。
>
> > 这不了解。那是如何做的?全部通过服务器转发么?
>
> 對
>


官方的qq也用的是这种方式么?这样的话每天服务器负载岂不是很大,中国那么多亿人用qq……

另外,我想请问一下,比方说我同时在跟2个人聊qq,所采用的密钥是不是一样的?
密钥是你这个session跟服务器的密钥,不是p2p,

Kse8107

unread,
Nov 4, 2009, 3:23:18 AM11/4/09
to OpenQ开发者邮件列表
好吧~我大概知道了……我去看一下jabber相关,谢谢大家。

ccpaging

unread,
Nov 9, 2009, 12:04:33 AM11/9/09
to openq
Jabber(XMPP)服务器定义了服务器间的协议,也就是说,借助这个协议可以把多个Jabber服务下的Client连接起来。
企业可以架设自己的Jabber服务器,这个服务器又能够与Google的Jabber服务器连接起来,这样企业的用户就可以和Gtalk用户交流信息了,当然对信息内容的支持程度取决于双方支持XMPP协议的程度。
另外,Jabber服务器可以与使用其它协议的服务器建立Interface,如Yahoo, MSN, ICQ等。
 
理论上看,可以在Jabber服务上开发QQ Interface,具体怎么做,我就不甚了解了。
 
在客户端实现转发,应该是有可能的,相当于一个人把自己的2个账号连接起来,实现消息同步。我记得Miranda QQ实现过2个QQ群信息的同步,猜想Miranda底层框架里边有一种Message Bus的机制,每一个客户端都可以访问到这个Bus。
 
有兴趣的朋友不妨根据的想法对上述2种方案进行评价,做出选择。
 
pidgin qq需要程序员,哪位大侠出来做点贡献。
 
2009-11-09

ccpaging

发件人: Ka-Hing Cheung
发送时间: 2009-11-04  14:40:13
收件人: openq
抄送:
主题: [OpenQ-dev] Re: 希望得到帮助
2009/11/3 Kse8107 <chenghon...@gmail.com>:
> 这个,似乎是我表达的有问题。我们现在所做的,只是希望能够在技术上面讨论跨协议转换这种做法的可行性,就像msn和yahoo做的那样,最终期望达到
> 的效果是,我只需要拥有一个协议A的账号,就可以有办法同时跟协议A、B、C、D中的好友实现通讯。有点类似http://hi.baidu.com/
> tyg1/blog/item/869e1f3088b5ae99a8018e5c.html这里讲的意思,但是gtalk我没用过。看它的原理描述是
> Jabber Client-Jabber Server1-Jabber Server2-Other IM Client
> (eg,MSN,YAHOO,ICQ),我想把它做成p2p的,就是两个不同协议客户端之间直接采用某种协议进行通讯(两者中的某一种?),不通过
> Server转发。
>
我想這跟你對下面問題的誤解有關。
> 另外qq/msn不是客户端之间直接通讯的么?就是我想跟你聊天,然后我从Server得到你的IP,然后我用这个IP跟你进行通讯,TCP或者
> UDP,这不对么?
不對。
>
>>
>> Pidgin 一般情況下不需要知道好友的 IP。
>>
>
> 这不了解。那是如何做的?全部通过服务器转发么?
-khc

li yuekui

unread,
Nov 9, 2009, 2:10:44 AM11/9/09
to op...@googlegroups.com
Hi, ccpaging

很抱歉我的阅读理解能力较差,在pigdin的mtn上,没有查找到5月份提交的补丁,我们目前在openq上提交的补丁,是体现在 im.pidgin.pidgin.openq 分支上么?
5月份那些包括名片和群信息的修改,是否还未通过调试验证,若我们想提供帮助,该怎么做呢?

2009/11/9 ccpaging <ccpa...@gmail.com>

star

unread,
Dec 10, 2009, 1:33:14 AM12/10/09
to OpenQ开发者邮件列表
你说的应该是gateway,实现异构网的通信。

On Nov 4, 4:23 pm, Kse8107 <chenghongzhou8...@gmail.com> wrote:
> 好吧~我大概知道了......我去看一下jabber相关,谢谢大家。

Reply all
Reply to author
Forward
0 new messages