解决方案:使用 atinout 通过 USSD 菜单进行预订

解决方案:使用 atinout 通过 USSD 菜单进行预订

我有一个奈尔(尼泊尔手机公司)我想在基于 Ubuntu 的笔记本电脑的内置 3G 调制解调器(“Gobi 2000”硬件)中使用 SIM 卡。

该卡使用 Ncell 的“正常”资费,而不是Ncell 连接。因此,我无法预订便宜、永不过期的 Ncell Connect 数据包,但想使用每日上网套餐,这似乎是第二便宜且最灵活的选择。

问题:如何使用任何选项在 Ubuntu 下成功预订这些套餐,并使用笔记本电脑中的 SIM 卡?(例如 USSD 菜单选项,或需要短信确认的 Ncell Ecare)

理想情况下,解决方案应该尽可能实现自动化,同时还能防止我在每日互联网套餐的容量耗尽时遇到更昂贵的数据费率。

答案1

经过多次实验,以下是我迄今为止最好的解决方案。

解决方案:使用 atinout 通过 USSD 菜单进行预订

移动网络运营商使用 USSD 来提供响应式服务菜单 - 请参阅维基百科上的 USSD. 预订方式Ncell 的*17123#USSD通过装有 SIM 卡的计算机菜单是最舒适的选择。

由于专用的 USSD 客户端软件对我来说不起作用(见下文),我使用原始 AT 命令。为此,我将首先安装阿蒂诺特,一个使用 AT 命令的小型命令行实用程序:

sudo apt-get install ruby-ronn;
git clone git://git.code.sf.net/p/atinout/code atinout;
cd atinout;
make;
checkinstall make install;

然后,我可以使用 AT USSD 命令来预订每日 40 MB 的互联网套餐。这是完整的记录。调制解调器使用 确认您的命令后OK,等待几秒钟并按Enter显示 USSD 答案(那时应该已经到达)。然后按Ctrl+C终止atinout^C在记录中),然后重新启动它。

$ sudo stop modemmanager
stop: Unknown instance:

$ atinout - /dev/ttyUSB1 -
AT+CUSD=1,"*17123#",15
OK
+CUSD: 1,"1.) 1 day Pack 
3.) Facebook Pack 
4.) 7 Day Pack  
6.)  30 Day Pack 
8.) Unlimited Pack  
Note: 
Back:* Top:#",15
^C

$ atinout - /dev/ttyUSB1 -
AT+CUSD=1,"1",15
OK
+CUSD: 1,"1.Light 6 MB Rs 6 
2.Light 12 MB Rs 9 
3.Medium 18 MB Rs 12 
4.Heavy 40 MB Rs 20 
5.Deactivate 
Note: 
Back:* Top:#",15
^C

$ atinout - /dev/ttyUSB1 -
AT+CUSD=1,"4",15
OK
+CUSD: 1,"1.One time Activations 
2.Auto Renewal Activations 
Note: 
Back:* Top:#",15
^C

$ atinout - /dev/ttyUSB1 -
AT+CUSD=1,"1",15
OK
+CUSD: 0,"Dear Customer, your 40 MB pack with 24 hours validity 
is currently processing and will be activated within 10 min. ",15
^C

您可以将上述内容合并为一个脚本(假设现在您不必重试任何命令;只是AT为了显示 USSD 答案):

sudo stop modemmanager && \
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"*17123#\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT") && \
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"1\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT") && \
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"4\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT") && \
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"1\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT");

(注意,此脚本使用避免使用管道字符的技术

故障排除

连续多个 AT+CUSD 命令。由于某种原因,使用我的 3G 调制解调器 (Gobi 2000),在 90% 的情况下,只有一个AT+CUSD可以成功执行,然后atinout必须重新启动。为了避免出现问题,在上述过程中,我们atinout每次都简单地重新启动上面的记录。这不会结束 USSD 会话(“打开”USSD 菜单)。

如果调制解调器没有回答“OK”。按照上述记录操作时,请注意调制解调器是否用“OK”确认了每个命令。如果没有,请重新启动atinout并重试。如果这没有帮助,请重新开始整个过程​​。如果这没有帮助,您的调制解调器可能处于奇怪的状态。重置它,或者让计算机经历挂起/恢复循环。

一般使用 AT 命令。有关在 Linux 下使用 AT 命令与调制解调器通信的更多详细信息,请参阅这个答案

预订每日互联网套餐失败。Ncell Ecare 网站会失败,不会出现错误消息,并再次显示服务列表,而不是输入短信确认码的成功消息。如果您仍有有效的月度(或每周?)互联网套餐,就会发生这种情况。即使没有剩余数据余额。您可以检查,并在必要时取消套餐。这里。但是对我来说,即使取消套餐后,通过短信查询数据余额也会返回“亲爱的客户,您的月度帐户中还剩下 […] MB 数据,这些数据将在 […] 到期。”并且仍然无法预订每日互联网套餐。我必须等到到期日。也许可以尝试将 SIM 卡插入手机并通过 USSD 代码预订第一个每日互联网套餐(拨号*17123#并按照屏幕上的菜单操作)。

未来的改进

自动化。使用上述解决方案,我们必须手动浏览菜单,如果出现问题,请重试。可能会更好。

自动重新预订。理想情况下,此解决方案应包括当数据余额不足时自动(重新)预订。这可以通过 Ncell 警告短信和/或流量监控检测到。当套餐自然到期时,它不会自动预订新套餐,而是通过状态图标通知用户她正在以昂贵的费率浏览。

当数据余额用完时收到通知。如果是这样,我们不需要向 SIM 卡转移有限的金额,但可以转移大量金额,并且在遇到昂贵的费率时会收到警告(例如,任务栏中出现一个大红色图标)。至少有两种方法可以做到这一点:

在活动数据连接期间获取 Ncell 通知短信。Ncell 在数据余额不足时发送它。请参阅上文关于wvdial它如何工作的要点。它不能与NetworkManager开箱即用的 gammu 配合使用,因为它会抓取两个调制解调器控制通道。

限制数据流量。 非关税措施将成为这方面的候选工具,但它目前没有设置具有精确开始时间的一次性打包数据限制的功能。

替代的 USSD 客户端软件(对我来说不起作用)

Ubuntu Linux 下有专用的 USSD 客户端,但由于各种原因(我的 3G 调制解调器硬件:Gobi 2000),它们对我来说不起作用。但是,通过一些调试,您可能会让它们工作。一些用法在这个问题这个问题

名单以最有希望的候选人为第一名:

  • mmcli。ModemManager 及其命令行客户端mmcli似乎是很棒的软件,也是完成这项任务的最佳选择。请参阅这个答案在 StackOverflow 上了解如何使用mmcliUSSD 菜单。然而,在解决了 Ncell SIM 卡上始终开启的 PIN2 锁问题(解决方案类似于此),mmcli由于一个错误(因为调制解调器成功地与其他客户端软件一起使用了 USSD),仍然会拒绝通过 Gobi 2000 3G 调制解调器发送 USSD 命令:

    $ sudo apt-get install libqmi-utils
    $ sudo qmicli -d /dev/cdc-wdm0 --dms-uim-verify-pin=PIN2,0000
    $ sudo qmicli -d /dev/cdc-wdm0 --dms-uim-get-pin-status
    $ mmcli -m 0 -e  # Index as found via mmcli -L
    $ mmcli -m 0 --3gpp-ussd-initiate="*100#"
    error: Modem has nn USSD capabilities.
    
  • gsm-ussd。 gsm-ussd是一个专门用于发送 USSD 代码的命令行实用程序,它可以操作 USSD 菜单(请参阅这个答案)。不过,对于 Ncell,我可以发送 USSD 代码并获得答案,但无法操作 USSD 菜单。会出现各种不一致的错误消息,我没有调查问题出在我的硬件、gsm-ussd 还是 Ncell 的 USSD 实现上。

  • 甘穆。 gammu是一个可以发送 USSD 代码的 Linux 命令行实用程序,但根据这个问题,它还不能使用 USSD 菜单。python-gammu包含一个脚本service_numbers.py这是为了实现这一点。但它对我来说不起作用。

  • 奥福诺。 ofono具有与 ModemManager 类似的目的和界面[来源],只不过它是为Ubuntu Touch(可以在手机上运行)制作的。它的主要接口是DBus,但你可以使用它的测试用例命令行工具来发送USSD命令和操作USSD菜单(例子更多示例)然而,似乎需要一个rild(无线接口层守护进程)实现无法运行,并且只能在实际的移动电话上使用。启动时,ofonod会抱怨无法连接到,而且我在正常的 Ubuntu Linux 安装中rild找不到要安装的。rild

  • ussdq。 ussdq是另一个适用于 Linux 的小实用程序,它包含一个操作 USSD 菜单的功能。但是,自 2013 年以来,它不再处于积极开发状态,并且编译它需要一些努力(它使用 Gambas2 框架,但最近的 Ubuntu Linux 版本仅包含 Gambas3 的软件包)。

答案2

也可以看看我的其他答案,我认为这是更好的一个。

解决方案:通过 Ncell Ecare 网站预订

通过 USSD 命令进行预订是最舒适的解决方案(参见我的其他答案)但是如果出于某种原因它对你不起作用,这里还有另一个不太舒服但有效的替代方案。

  1. 将 25 尼泊尔卢比转入计算机的 SIM 卡。您可以同时购买任意次数的每日互联网套餐。最快捷、最方便的方法是拨打相应的 USSD 代码*17122*<980… mobile number>*25#[来源] 从您的地址簿中删除。价格包括 1.25 尼泊尔卢比的转账费用,以及以 20 尼泊尔卢比预订 40MB 每日互联网套餐时添加的税费。

  2. 使用手机创建 wifi 热点。并将计算机连接到它,或者使用现有的 wifi 连接(如果可用)。

  3. 预订一次性“40 MB 重度”每日互联网套餐恩赛尔您可以连续预订多个,数据量将累计。您必须使用短信收到的确认码确认第一个预订。例如,获取该短信的方式如下:

    1. 执行gammu deletesms 0 1(假设您不需要存储在插槽 1 中的短信)为传入的短信腾出空间。它将在第一个可用空间中接收(这里保证是 1),但如果 SIM 卡上的所有 20-30 个存储空间都用完了,它将不会接收。

    2. 在Ncell Ecare网站的预订流程中点击“发送短信”。

    3. 执行gammu getsms 0 1即可获得确认短信。

    4. 在 Ncell Ecare 网站上输入确认码。

  4. 通过移动数据使用互联网,直到它停止工作。

  5. 通过余额检查确认余额已用完。简而言之:

    gammu deletesms 0 1 && \
    gammu sendsms TEXT 9909 -text "status" && \
    sleep 10 && \
    gammu getsms 0 1
    

    如果移动宽带连接无法正常工作,请将其断开(某些连接管理器会抓取两个调制解调器控制通道,而不留下任何控制通道gammu)。

  6. 重复。

故障排除

简化 Ncell Ecare 的登录。使用Ncell Ecare 网站通常很不舒服,因为它会阻止浏览器保存登录数据,阻止使用复制粘贴功能粘贴到密码字段,此外,登录表单上还有验证码。解决方案:

  1. 如果使用 Firefox,请安装自动填充表格添加在。

  2. 然后访问 Ncell 登录页面,右键单击某个字段并选择“添加完整表格作为个人资料...”。

  3. 在配置文件创建对话框中,将站点规则匹配修改为(?:ecare\.ncell\.com\.np:9443),并输入用户名和密码的值。

  4. 复制该配置文件并使其适用于您拥有的其他 SIM 卡。

  5. 从现在开始,要登录,请右键单击登录页面上除表单字段之外的任意位置,然后选择“自动填充表单→”。

  6. (可选)要允许粘贴到密码字段,请安装福克斯替换Firefox 插件并为 URL 设置一条规则,https://ecare.ncell.com.np:9443/nser/index.do?method=init其中设置了“输入和输出的 HTML”选项,并将文本替换onkeydown="keyDownForbidCopyPaste(passwordIn)为无内容。

  7. (可选)如果您真的想要摆脱验证码解决,解决验证码问题,你可以使用Rumola 浏览器插件。但请注意,验证码解决将花费 0.013 美元,因为它涉及(至少有时)人工处理。他们的验证码自动搜索不适用于 Ncell Ecare 登录表单。相反,右键单击验证码文本字段并选择“使用此字段输入验证码”。然后双击该字段让 Rumola 解决验证码。在此过程中,使用上面的“自动表单填充”步骤填写剩余的登录信息。

解决方案Ncell Ecare 网站显示 WSOD。WSOD = 死机白屏。访问网站时,您只会在浏览器中看到白色内容区域。这是他们的 Web 应用程序中的一个错误,在登录 Ncell Ecare 时遇到 Internet 连接故障时会触发该错误。要解决此问题,至少有以下选项:

  • 删除 Ncell Ecare 登录存储的缓存和 cookie,前往登录页面并再次登录。

  • 切换到其他多狐配置文件(适用于 Firefox)或多重登录配置文件(适用于 Chrome),然后重新加载页面。

另请参阅我的其他答案

未来可能的改进

使用移动宽带连接预订套餐。一旦我找到如何在数据连接处于活动状态时接收确认码短信(用于在 Ncell Ecare 网站上预订数据包),这将起作用。NetworkManager开箱即用,不适用于 Linux 和 gammu,因为网络管理器将抓取两个调制解调器控制通道,而没有留下任何通道gammu。断开连接、使用获取短信然后重新连接的替代方案gammu也不起作用,因为 Ncell 会强制注销,这也会使短信确认码无效。有人报告说,使用wvdial而不是NetworkManager连接解决了这个问题 [来源]。

在通知中自动获取短信。与上述步骤一样,它需要一种在活动数据连接期间处理短信的方法。它会在通过 Ncell Ecare 网站预订互联网套餐时显示确认短信,并将其移动到硬盘以保持 SIM 卡存储空间可用来接收新短信。与当前使用手动命令从 SIM 卡中获取确认短信的提议相比,这将加快该过程。

通过 Ncell Ecare 进行预订,无需短信确认。这会大大简化流程,因为可以使用计算机的移动宽带连接来预订互联网套餐。需要 Ncell 采取行动。

通过 Ncell Ecare 网站进行预订,无需强制注销。这会大大简化流程,就像不需要短信确认一样,因为可以使用计算机的移动宽带连接,将其关闭以获取短信,然后再次打开以将确认码输入 Ncell Ecare。目前,这将强制注销,这也会使确认码无效。

通过 Ncell 应用程序进行预订,可以管理外部 SIM 卡。在这种情况下,Ncell 应用程序将允许管理多张 SIM 卡,而无需在手机中实际安装其他 SIM 卡。原则上与 Ncell Ecare 网站类似。同样,需要 Ncell 采取行动。

另请参阅我的其他答案

无效的替代方案

通过智能手机浏览器通过 Ncell Ecare 网站进行预订。尝试过这个,但不知为何无法用智能手机登录该网站。登录按钮不起作用。此外,由于该网站不适合移动设备,因此通过 wifi 热点连接在计算机上预订似乎更舒服。

安装Ncell 应用程序两次。有多种方法可以下载和修改任何 Android,以便你可以安装两次(我使用此解决方案适用于 Ncell 应用程序)。我希望它允许我使用两个不同的帐户登录,同时管理我的手机和计算机的 SIM 卡。但是,Ncell 应用程序的登录依赖于 SIM 卡检测,您不能使用它来管理不存在的 SIM 卡。

通过模拟器中的 Ncell 应用程序进行预订。您可以在 OpenBox 等虚拟机中运行 Android 和 Ncell 应用程序,但很难伪造 SIM 卡检测。

相关内容