- 浏览: 228960 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jj7jj7jj:
容我来补一刀~1,function(){ ...
执行JS匿名函数的N种方式 -
duwu:
根本就不能用,试了好多天,一次都没发送成功,发了根本就没有任何 ...
邮件发新浪微博 -
ganky:
终于搞定了,我郁闷啊……我是用JAVA写的,在登录成功后使用g ...
基于web飞信接口的飞信应答机器人 -
ganky:
之前也有搞了一下,只实现了登录,因为一直找不到webim_se ...
基于web飞信接口的飞信应答机器人 -
kewin:
现在127行了哦
基于web飞信接口的飞信应答机器人
最小的飞信的ruby客户端,功能很简单,目前只能给自己和飞信好友发短信。使用TCP连接,没有走HTTP通道。
源码:http://code.google.com/p/fetion-ruby/
2012-06-13 更新,又可以工作了
登录时rsa加密部分参考了pyftion(http://code.google.com/p/pytool/source/browse/#svn%2Ftrunk%2FPyFetion 可以正常登录)和rfetion(https://github.com/flyerhzm/rfetion/blob/master/lib/rfetion/fetion.rb#L530 已经不能正常登录)的实现,外加自己的推测。
使用:
经过几个不同ip测试,均没有遇到验证码问题。
我怎么没有遇到图形验证码呢?
是不是如那位兄弟说的,密码设置的太过简单?
别这么轻易放弃哪
协议分析可以使用 nathan 提供的工具 http://hi.baidu.com/nathan2007/blog/item/095a7d66088d2825aa184c20.html
源码:http://code.google.com/p/fetion-ruby/
2012-06-13 更新,又可以工作了
登录时rsa加密部分参考了pyftion(http://code.google.com/p/pytool/source/browse/#svn%2Ftrunk%2FPyFetion 可以正常登录)和rfetion(https://github.com/flyerhzm/rfetion/blob/master/lib/rfetion/fetion.rb#L530 已经不能正常登录)的实现,外加自己的推测。
使用:
fetion = Fetion.new "mobile_num","password" fetion.login fetion.send_sms "mobile_num","any sms" fetion.send_sms_to_self "test-中文-ruby-fetion" fetion.logout
经过几个不同ip测试,均没有遇到验证码问题。
评论
18 楼
qxt
2010-08-02
鹤惊昆仑 写道
今天测试了一下,每次都要图形验证码,绕不过去了。正式宣布放弃维护这段代码。
我怎么没有遇到图形验证码呢?
是不是如那位兄弟说的,密码设置的太过简单?
别这么轻易放弃哪
17 楼
鹤惊昆仑
2010-08-01
如果只是做天气预报、服务器监控等应用,可以利用移动139邮箱的邮件到达通知来做(绝对免费的!)http://methodmissing.iteye.com/blog/726588
16 楼
webdi
2010-07-31
楼上的飞信密码太简单?改为字母+数字试试?
15 楼
鹤惊昆仑
2010-07-30
今天测试了一下,每次都要图形验证码,绕不过去了。正式宣布放弃维护这段代码。
14 楼
kaka2008
2010-07-30
我照着 http://code.google.com/p/maplefetion/ 这个例子改了下,目前在我机器上(windows 2003)可用
麻烦大家也测试一下
require 'uri' require 'net/http' require 'net/https' require "socket" require 'rexml/document' require 'digest/md5' require 'digest/sha1' require "iconv" class Fetion def initialize(phone_num , password) @phone_num = phone_num; @password = password; @domain = "fetion.com.cn"; #@domain = "feixin.10086.cn" @login_xml = '<args><device type="PC" version="0" client-version="4.0.3390" /><caps value="simple-im;im-session;temp-group;personal-group" /><events value="contact;permission;system-message;personal-group" /><user-info attributes="all" /><presence><basic value="400" desc="" /></presence></args>'; self.init end def init doc = REXML::Document.new(self.get_system_config()) sipc_proxy = "" doc.elements.each("//sipc-proxy") do |element| # using regexp should be faster sipc_proxy = element.text end @SIPC = SIPC.new(sipc_proxy); sipc_url = "" doc.elements.each("//ssi-app-sign-in") do |element| sipc_url = element.text end @fetion_num = self.get_fetion_num(self.SSIAppSignIn(sipc_url)); doc.elements.each("//http-tunnel") do |element| @http_tunnel = element.text end end def login() request1 = sprintf("R %s SIP-C/2.0\r\nF: %s\r\nI: 1\r\nQ: 1 R\r\nL: %s\r\n\r\n",@domain, @fetion_num, @login_xml.length); request1 = request1 + @login_xml; server_response = @SIPC.request(request1); @nonce = server_response.scan(/nonce="(.*)"/)[0][0] request2 = sprintf("R %s SIP-C/2.0\r\nF: %s\r\nI: 1\r\nQ: 2 R\r\nA: Digest response=\"%s\",cnonce=\"%s\"\r\nL: %s\r\n\r\n", @domain, @fetion_num, self.get_response(), @cnonce, @login_xml.length); request2 = request2 + @login_xml; @SIPC.request(request2); end def send_sms(phone, sms_text) sms_text = Iconv.iconv("UTF-8","GB2312",sms_text)[0] request = sprintf("M %s SIP-C/2.0\r\nF: %s\r\nI: 2\r\nQ: 1 M\r\nT: tel:%s\r\nN: SendSMS\r\nL: %s\r\n\r\n",@domain, @fetion_num, phone, sms_text.length); request = request + sms_text; @SIPC.request(request); end def send_sms_to_self(sms_text) sms_text = Iconv.iconv("UTF-8","GB2312",sms_text)[0] request = sprintf("M %s SIP-C/2.0\r\nF: %s\r\nI: 2\r\nQ: 1 M\r\nT: %s\r\nN: SendCatSMS\r\nL: %s\r\n\r\n",@domain, @fetion_num, @uri, sms_text.length); request = request + sms_text @SIPC.request(request); end def logout() logout_request = sprintf("R %s SIP-C/2.0\r\nF: %s\r\nI: 1 \r\nQ: 3 R\r\nX: 0\r\n\r\n", @domain, @fetion_num); @SIPC.request(logout_request); end def get_response() @cnonce = Digest::MD5.hexdigest(rand.to_s) puts "conce: #{@cnonce} , fetion_num: #{@fetion_num} , domain : #{@domain} ,password:#{@password}" key = Digest::MD5.digest(@fetion_num + ":" + @domain + ":" + @password) h1 = Digest::MD5.hexdigest(key + ":" + @nonce + ":" + @cnonce).upcase h2 = Digest::MD5.hexdigest("REGISTER:" + @fetion_num).upcase return Digest::MD5.hexdigest(h1+":" + @nonce + ":" + h2).upcase end def get_system_config() uri = URI.parse("http://nav.fetion.com.cn/nav/getsystemconfig.aspx") http = Net::HTTP.new(uri.host, uri.port) params = sprintf('<config><user mobile-no="%s" /><client type="PC" version="4.0.3390" platform="W5.1" /><servers version="0" /><service-no version="0" /><parameters version="0" /><hints version="0" /><http-applications version="0" /><client-config version="0" /></config>',@phone_num) headers = { 'Content-Type' => 'application/x-www-form-urlencoded' } resp = http.post(uri.path, params, headers) return resp.body end def SSIAppSignIn(url) uri = URI.parse(url); #path = uri.path + "?mobileno=" + @phone_num + "&pwd=" + @password path = "https://uid.fetion.com.cn/ssiportal/SSIAppSignInV2.aspx?mobileno="+ @phone_num + "&pwd=" + @password http = Net::HTTP.new(uri.host,uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE # turn off SSL warning resp, xml = http.get(path, nil) count = 0 while resp.response['set-cookie'].nil? break if count > 3 sleep(1) resp,xml=http.get(path,nil) count = count+1 end @cookie = resp.response['set-cookie'].split(';')[0] puts "cookie---------- #{@cookie}" @ssic = @cookie.split("=")[1] return xml end def get_fetion_num(xml) @uri = "" doc = REXML::Document.new(xml) doc.elements.each("//results/user") do |element| @uri = element.attribute("uri").value end return @uri.scan(/sip:([0-9]+)@/)[0][0] end end class SIPC def initialize(sipc_addr) puts sipc_addr #uri = "221.176.31.33:8080" uri = sipc_addr.split(":") @socket = TCPSocket.new(uri[0], uri[1].to_i) end # send SIP request def request(sip_request) puts sip_request @socket.write_nonblock(sip_request) #@socket.write(sip_request) #select,read_nonblock and rescue is the key #another choice may be: http://rev.rubyforge.org/ IO.select [@socket] res = "" begin while chunk = @socket.read_nonblock(4096) res = res + chunk end rescue end puts res return res end end
麻烦大家也测试一下
13 楼
鹤惊昆仑
2010-07-29
更新部分代码,ubuntu下测试通过。http://gist.github.com/498262
12 楼
kaka2008
2010-07-29
lz,搞定了。
11 楼
qxt
2010-07-27
呵呵,我的天气预报也没有了。
是移动停止低版本号客户端登陆,那很简单吧,修改下版本号不就成了?
是移动停止低版本号客户端登陆,那很简单吧,修改下版本号不就成了?
10 楼
鹤惊昆仑
2010-07-27
移动停止了低版本电脑客户端的登陆。有空再改造下吧。难怪定时天气预报也没有了
9 楼
qxt
2010-07-26
lz,今早运行程序时报错了。
看了下程序,SSIAppSignIn方法中的
有异常了
Net:HTTPNotFound
不知是网络问题呢还是飞信进行了调整
./fetion.rb:103:in `SSIAppSignIn': private method `split' called for nil:NilClas s (NoMethodError) from ./fetion.rb:32:in `init' from ./fetion.rb:17:in `initialize'
看了下程序,SSIAppSignIn方法中的
resp, xml = http.get(path, nil)
有异常了
Net:HTTPNotFound
不知是网络问题呢还是飞信进行了调整
8 楼
cana_xu
2010-06-29
写PHP的路过,rails的语法竟如此奇怪!
7 楼
yydriver
2010-06-25
那位大大能给小弟讲讲如何开始分析一款软件?
6 楼
鹤惊昆仑
2010-02-25
我放到google code上了(http://fetion-ruby.googlecode.com/svn/trunk/Fetion.rb)
5 楼
googya
2010-02-25
感觉ruby写出来的东西就是比python写的,看起来要顺眼一点!
最近我也想写一个练习一下呢,没想到就看到你写的了!
最近我也想写一个练习一下呢,没想到就看到你写的了!
4 楼
shaobin0604
2009-09-21
鹤惊昆仑 写道
大部分直接翻译自可可熊的PyFetion,协议分析使用fiddle(需要先强迫飞信走HTTP代理)简单看了看。ruby代码写的少,难入法眼,见笑,嘿嘿。
协议分析可以使用 nathan 提供的工具 http://hi.baidu.com/nathan2007/blog/item/095a7d66088d2825aa184c20.html
3 楼
loushizan
2009-09-02
这段代码还要求gbk编码,utf8编码的时候,
sms_text = Iconv.iconv("UTF-8","GB2312",sms_text)[0],
这行代码要注释掉。
sms_text = Iconv.iconv("UTF-8","GB2312",sms_text)[0],
这行代码要注释掉。
2 楼
鹤惊昆仑
2009-09-02
大部分直接翻译自可可熊的PyFetion,协议分析使用fiddle(需要先强迫飞信走HTTP代理)简单看了看。ruby代码写的少,难入法眼,见笑,嘿嘿。
1 楼
lanjingyu
2009-08-31
呵呵,浏览这么多咋没人说句话呢?
发表评论
-
更新了那个"最小的ruby飞信客户端"
2012-06-13 23:39 1133曾经的那个“最小的ruby飞信客户端” http://www. ... -
基于web飞信接口的飞信应答机器人
2010-11-25 23:08 4488fetion-robot是基于web飞信接口的飞信机器人(一小 ... -
邮件发新浪微博
2010-11-25 22:46 3769绑定邮件后,发邮件即可收发新浪微博。请先访问 http://s ... -
获取gmail新邮件---ruby版
2010-07-29 22:55 1743#! /usr/bin/ruby #author new ... -
if $0 == _FILE_
2009-11-18 09:56 950if __name__ == "__main__&q ... -
配置irb支持tab自动补全
2009-10-20 14:34 1714编辑~/.irbrc,输入下面内容即可使irb支持tab自动补 ... -
ruby-sms
2009-08-19 19:55 1170出处:http://raa.ruby-lang.org/pro ... -
A simple full-text search engine in 200 lines of Ruby
2009-08-18 23:25 896http://eigenclass.org/hiki/simp ... -
最小的ruby飞鸽客户端--仅可以发消息
2009-08-18 21:51 1050飞鸽(IPMSG)在企业局域网内应用还是非常广泛的,我本来想用 ... -
ruby非阻塞式socket编程--写飞信客户端的经验总结
2009-08-07 23:27 2865最近在使用ruby编写飞信客户端时,遇到TCPSocket的阻 ... -
飞信 HTTPS入口
2009-07-27 14:02 1592require 'net/http' require ' ... -
Camping is a Microframework
2009-06-08 22:35 1530require 'camping' Campin ...
相关推荐
"C#编写飞信客户端接口规范和源码"这个主题聚焦于如何使用C#编程语言来实现与飞信服务的交互。以下是关于这个主题的详细知识点: 1. C#语言基础:C#是一种面向对象的编程语言,由微软公司开发,广泛用于Windows桌面...
ipad 飞信客户端ipad 飞信客户端ipad 飞信客户端ipad 飞信客户端
本文将详细解析"飞信客户端接口规范和2008源码"这一主题,涵盖飞信的基本架构、客户端接口设计以及源码分析。 一、飞信客户端接口规范 飞信客户端接口规范是开发者实现飞信功能的关键指南,它定义了客户端如何与...
Java版飞信客户端源码分析 飞信是中国移动推出的一款即时通讯软件,它允许用户通过互联网或移动网络进行免费的短信、语音通话等通信服务。本文将深入探讨Java版飞信客户端的源码,帮助开发者了解其内部工作原理,...
飞信客户端应用程序是基于VC(Visual C++)开发的一款通讯软件,主要面向中国移动的用户,提供了免费短信、语音对讲、文件传输等多种功能。在深入理解飞信客户端应用程序的编程实现之前,我们需要先了解VC++的基本...
在这个主题中,我们主要关注的是C#实现的飞信源码以及相关的FetionSDK.dll说明,这对于我们理解飞信的客户端接口规范至关重要。 首先,让我们探讨C#编程语言。C#是由微软公司开发的一种面向对象的编程语言,它设计...
飞信客户端是中国移动推出的一款即时通讯软件,专为PPC(Pocket PC)用户设计,旨在提供便捷、高效的通信服务。这款应用充分利用了移动网络的优势,让用户可以免费或以极低的费用实现短信、语音和数据通信,从而在...
飞信客户端 下载 收发短信 Fetion2008_3.1.0480
【ASP飞信客户端详解】 ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于生成动态网页。在本案例中,"简单的asp飞信客户端"是一个基于ASP技术构建的网页应用,允许用户通过网页直接向指定的...
在本文中,我们将深入探讨如何使用C#编程语言基于Fetionsdk.dll库来开发一个飞信客户端。飞信是一款由中国移动推出的即时通讯软件,它允许用户通过互联网或短信进行免费聊天。通过反编译飞信2008客户端,开发者能够...
飞信客户端代码CLASS,自己反编译就可以看了,代码回被直接发代码会被删除
【标题】:“webFetion网页版本飞信客户端”是一个基于网页的即时通讯服务,它允许用户通过浏览器进行短信发送、在线聊天等操作,无需安装专门的客户端软件。飞信是中国移动推出的一款通信服务,旨在融合互联网和...
安卓v2.2版飞信客户端,绝对快速,完美版本,本人亲自测试
【第三方飞信客户端Libfetion绿色版】是一款基于飞信服务的非官方客户端软件,主要特点是无需安装,可直接运行,便于用户快速便捷地使用飞信功能。Libfetion是一个开源项目,由热心开发者社区维护,它为用户提供了一...
飞信是中国移动最新发布的一款方便、快捷的沟通工具。通过飞信您可以使用手机和PC与对方进行语音聊天、信息交互和发送文件。只要中国移动网络覆盖到的地方,您就不会失去与您好友的联系。 您可以使用以下客户端...
"Fetion2012March飞信客户端"是2012年3月版本的飞信,可能包含了那个时期的功能特性,对于那些怀念旧版软件的用户来说具有一定的怀旧价值。 飞信的主要功能包括: 1. **即时通讯**:飞信允许用户通过互联网发送...
谁让移动让我花了那么多钱呢 把它源码放出来 有其他源码需要 nneeenn@yahoo.com.cn<br><br>联想i750飞信手机客户端源码和程序 联想 i750 飞信 源码+程序 下载 (本为s5 的 我下到手机里发现能用)