Wednesday, December 16, 2015

转发国内SMS信息到你的邮箱

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Rix Tox
链接:http://www.zhihu.com/question/22767554/answer/38517186
来源:知乎

我要介绍的方法能做到不注册新的手机号,不用重新绑定国内原有的账号,只接收短信不产生任何漫游通话和数据费用,不用另外购买一台手机,或者专门使用一台双卡双待手机,不用每次接收短信都要换一次SIM卡,也不用担心接错国际长途电话的情况。

有些要求和限制必须事先声明一下:使用本方法必须持有国内的手机卡。手机号不一定要买漫游套餐,但是必须开通漫游服务。如果仅接收短信是不收取费用的,但是发短信、通话和使用数据是会产生费用的,但是不用担心,我会讲到如何禁止这些收费项目。当然,本方法涉及到Linux的操作、配置和使用,请量力而行。本文只是提供一个详细的思路,并不是手把手教程,如果有不清楚的地方请移步底部的外部链接。另外,使用本文所述信息所作的任何行为、造成的任何后果都需要读者自己承担,请谨慎行事!

如果一切顺利,你最终会得到这样一部小型设备接收并转发你所有的国内SMS信息到你的邮箱:

Step 0. ebay
你所需要的设备在任何一个国家都能在网上买到:
  1. [38.95 USD] Raspberry Pi B+,Micro SD 4GB+ (仅是为了搭建一个可以一直运行的平台,如果你拥有一台可以作为Linux服务器的硬件设备则可以直接用你现成的)
  2. [31.44 USD] 华为的3G无线网卡(需要从这个列表中找一个你能买到的,我用的是Huawei E1750

Step 1. Unlock
拿到华为3G网卡后先要进行解锁,否则只能使用国内的提供商,在海外是搜不到信号的。
具体如何解锁,不同的型号需要用不同的解锁程序,具体的工具请自行Google:unlock HUAWEI XXXXX(你的网卡型号)。

但是基本的流程大都是先从网卡设备上面找到一串15位的IMEI序列号。

然后使用算号程序生成一个UNLOCK密码。

然后使用解锁程序进行解锁。

有些设备还可能需要刷一下Firmware,就顺带着刷一下吧,用的是上面生成的FLASH密码。

这只是对无线网卡进行解锁,我们还需要对SIM卡进行解锁——禁用PIN码验证。操作方法可以用随便一台手机装上SIM卡,然后在设置里面关闭PIN码就好,或者可以把SIM卡装进网卡,在PC上安装相应的3G客户端程序,然后在设置里面禁用掉PIN就好。联通SIM卡的默认PIN是1234。
好了,你的网卡+SIM卡组合就已经准备完善了,接下来就是配置树莓派了。

Step 2. RasPBX
首先我们要将一套预装了Asterisk的RasPBX Linux系统写入到Micro SD卡中。下载RasPBX镜像文件,在Windows上可以使用Win32 Disk Imager程序把img文件写入到SD卡上。如果你的SD卡远大于4GB,那么可以使用Linux下的gparted工具把最后一个ext4分区resize一下。

把Micro SD插入树莓派,然后连上HDMI、USB键盘、USB无线网卡或有线网路,然后插上电源启动即可。然后跟着RasPBX Documentation页面的步骤进行初步的配置就好。

最主要的部分是exim4的配置,这个设置的是邮件发送服务器,我用的是Gmail,所以Mail Server写的是smtp.gmail.com::587,可以跟着这个页面的说明进行配置。Gmail的话在登录认证的SMTP_HOSTNAME部分最好写成*.google.com。

配置完后可以用send_test_mail [email protected]发一封测试邮件试试,如果你收到这样的邮件就说明配置成功了:

Step 3. Dongle
现在可以给树莓派插入你安装了SIM卡的3G无线网卡了。

先用ls /dev/ttyUSB*看看系统有没有将网卡识别成输入输出设备,如果什么都没有列出来就没有识别成功,但是这是正常的情况,因为大部分网卡都提供了一个Micro SD的插槽,使得它可以变身成一个移动储存设备,所以有时候会把它识别成一个U盘。这个时候我们就需要用usb_modeswitch工具切换一下网卡的识别模式。先使用lsusb命令(没有的话安装usbutils包)看一下网卡的厂家编号和产品编号:
[email protected] ~# lsusb
Bus 001 Device 005: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter
Bus 001 Device 006: ID 12d1:1446 Huawei Technologies Co., Ltd. E1552/E1800/E173 (HSPA modem)
Bus 001 Device 004: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
可以看到我的E1750的VendorID是12d1,ProductID是1446,然后使用usb_modeswitch切换模式
[email protected] ~# usb_modeswitch -v 12d1 -p 1446 -W -J
Take all parameters from the command line


 * usb_modeswitch: handle USB devices with multiple modes
 * Version 2.2.0 (C) Josua Dietze 2014
 * Based on libusb1/libusbx

 ! PLEASE REPORT NEW CONFIGURATIONS !

DefaultVendor=  0x12d1
DefaultProduct= 0x1446
HuaweiNewMode=1
NeedResponse=0

Look for default devices ...
  found USB ID 0bda:8178
  found USB ID 12d1:1446
   vendor ID matched
   product ID matched
  found USB ID 046d:c52b
  found USB ID 0424:ec00
  found USB ID 0424:9514
  found USB ID 1d6b:0002
 Found devices in default mode (1)
Access device 006 on bus 001
Current configuration number is 1
Use interface number 0
Use endpoints 0x01 (out) and 0x81 (in)

USB description data (for identification)
-------------------------
Manufacturer: HUAWEI Technology
     Product: HUAWEI Mobile
  Serial No.: not provided
-------------------------
Using standard Huawei switching message
Looking for active driver ...
 OK, driver detached
Set up interface 0
Use endpoint 0x01 for message sending ...
Trying to send message 1 to endpoint 0x01 ...
 OK, message successfully sent
Reset response endpoint 0x81
libusb: error [op_clear_halt] clear_halt failed error -1 errno 71
 Could not reset endpoint (probably harmless): -99
Reset message endpoint 0x01
libusb: error [op_clear_halt] clear_halt failed error -1 errno 71
 Could not reset endpoint (probably harmless): -99
-> Run lsusb to note any changes. Bye!
然后再看一下lsusb的结果:
[email protected] ~# lsusb
Bus 001 Device 005: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter
Bus 001 Device 007: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
Bus 001 Device 004: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
会发现网卡的产品标识变了,现在再看tty设备列表就能看到了:
[email protected] ~# ls -l /dev/ttyUSB*
crw-rw-rw- 1 root dialout 188, 0 Jan 30 20:11 /dev/ttyUSB0
crw-rw-rw- 1 root dialout 188, 1 Jan 30 20:11 /dev/ttyUSB1
crw-rw-rw- 1 root dialout 188, 2 Jan 30 20:16 /dev/ttyUSB2
这一部分可以写一个udev的rule来自动化,不需要每次插入设备都手动执行,具体的方式见底部链接。然后我们要配置这个网卡,让Asterisk能自动将收到的SMS信息转发到邮箱。
[email protected] ~# install-dongle
Installing GSM VoIP gateway with chan_dongle.
Please read the documentation at http://raspbx.org/dongle

Please enter the phone number of your SIM card
(defaults to +1234567890 if left blank): +8618688888888
Send incoming SMS to email address
(leave empty to disable SMS forwarding): [email protected]
Forward incoming SMS to mobile phone number (via dongle0)
(leave empty to disable):
Reading package lists... Done
Building dependency tree
Reading state information... Done
usb-modeswitch is already the newest version.
asterisk11-chandongle is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Saving previous contents of /etc/asterisk/extensions_custom.conf to /etc/asterisk/extensions_custom.conf.orig

Would you like to install a webpage for sending SMS with
chan_dongle? (http://raspbx/sms/) [y/N] y
Enter password for SMS page: password

Please wait...


STOPPING ASTERISK
Waiting for Asterisk to Stop Gracefully...

Asterisk Stopped

SETTING FILE PERMISSIONS.............Done
Removing any dangling symlinks
Dangling symlinks removed

STARTING ASTERISK
Asterisk Started
Reloading Asterisk because of Dynamic Hints
Your configuration has been saved successfully to these files:
/etc/asterisk/dongle.conf
然后我们进入Asterisk终端启动SIM卡的GPRS Only模式(AT^SYSCFG=13,1,3FFFFFFF,1,2就是设置模式的命令,其他的命令可以在这个网页查到),只收取SMS和Voice信息,不使用数据。然后由于我们没有设置VoiceMail所以不会产生通话费用。
[email protected] ~# asterisk -r
Asterisk 11.15.0, Copyright (C) 1999 - 2013 Digium, Inc. and others.
Created by Mark Spencer <[email protected]>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Running under group 'dialout'
Connected to Asterisk 11.15.0 currently running on raspbx (pid = 5345)
raspbx*CLI> dongle show devices
ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Number
dongle0      0     Free       20   3    3       AT&T           E1750      11.126.13.00.00   354818043592804  460016366644531  +8618688888888
raspbx*CLI> dongle cmd dongle0 AT^SYSCFG=13,1,3FFFFFFF,1,2
[dongle0] 'AT^SYSCFG=13,1,3FFFFFFF,1,2' Command queued for execute
[2015-01-30 20:44:25] NOTICE[5461]: at_response.c:1719 at_response: [dongle0] Got Response for user's command:'OK'
现在打开你的邮箱就可以看到转发的SMS信息了。
百度的验证码是我随手点来测试用的。有了这样的设备环境就再也不用愁在国外因为收不到验证码而用不了国内的网络服务了。

外部链接
[1]. GSM VoIP Gateway with Chan_dongle
[2]. RasPBX Documentation
[3]. Adding a Huawei 1552 to Asterisk
[4]. All Modem 3G Unlocker: How to unlock Huawei 3G Modem E173, E1550 and E1750
[5]. 50-huawei-e1750.rules

From http://www.zhihu.com/question/22767554

No comments: