惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - Red_angelX

越狱iphone命令行ssh无法连接问题解决 Fedora22编译Qt3.3.X 黑科技项目:英雄无敌III Mod <<Fallen Angel>>介绍 NES模拟器开发-PPU笔记 Source Insight 3.X utf8支持插件更新 NES模拟器开发-CPU笔记 记录Qt的一个诡异Bug 准备开发一款开源NES模拟器 Source Insight 3.X 插件新loader发布 Source Insight 3.X utf8支持插件震撼发布 c语言非线程安全函数引发的BUG一列 Source Insight 3.X 标签插件v1.0发布 MinGW编译dll以及静态链接pthread 用Codeblocks的MinGW编译CxImage BMP图片魔法师KeyGen C#将Trace,Debug信息输出到控件上 让LuaInterface 2.0.1支持中文 五线谱编辑Demo(MFC) C#贴边自动隐藏组件完美版
中兴MF667S WCDMA猫Linux拨号笔记
Red_angelX · 2015-11-10 · via 博客园 - Red_angelX

  公司最近有个国外有个项目需要用到WCDMA猫,网上简单选型了一下决定使用ZTE的型号MF667S的猫,本以为在Linux下拨号是比较简单的(之前有两款3G猫的调试经验),估计半天能搞定,结果折腾了一周才调通,记录一下调试过程中遇到的坑.

  1,模式切换

  由于现在的猫都有多种模式,目的是为了Windows下的小白用户第一次插入的时候以cdrom或者u盘的模式使用,安装里面自带的驱动后,再由驱动切换到猫的模式.这种方法在Windows下是很方便的,但是到了Linux下就很蛋疼了,需要借助usb_modeswitch来进行模式切换.主页

  下载最新的usb_modeswitch,编译,编辑一下配置文件usb_modeswitch.conf:

DefaultVendor=0x19d2
DefaultProduct=0x1588
TargetVendor=0x19d2
TargetProduct=0x1589
MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
MessageContent2="5553424312345679000000000000061b000000020000000000000000000000"

  其中DefaultVendor和TargetVendor都是0x19d2,这也是ZTE公司的厂商ID,DefaultProduct为0x1588,是插入猫后做为USB模式系统认到的产品ID,可通过lsusb或者cat /proc/bus/usb/devices查看.TargetProduct0x1589是切换为猫后的产品ID,切换后可用lsusb查看.(不过感觉这里可以随便填一个,没什么用).MessageContent从usb_modeswitch主页抄的,试过只用一个MessageContent无法激活,需要MessageContent2一起使用.就这配置文件还踩了一个坑,以前的猫有加个MessageEndPoint=0xa,移植的时候也一同移植过来了,结果发消息怎么都是出错,后来移除后用默认的0x1发现可以切换了-.-.

  配置文件写好了,执行命令:./usb_modeswitch -W -c /etc/usb_modeswitch.conf,得到以下信息

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

 ! PLEASE REPORT NEW CONFIGURATIONS !

DefaultVendor=  0x19d2
DefaultProduct= 0x1588
TargetVendor=   0x19d2
TargetProduct=  0x1589
MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
MessageContent2="5553424312345679000000000000061b000000020000000000000000000000"
NeedResponse=0

Look for target devices ...
  found USB ID 1d6b:0002
  found USB ID 1d6b:0002
  found USB ID 1d6b:0001
  found USB ID 1d6b:0001
  found USB ID 1d6b:0001
  found USB ID 1d6b:0001
  found USB ID 1d6b:0001
  found USB ID 0403:6015
  found USB ID 0dfc:0001
  found USB ID 19d2:1588
   vendor ID matched
 No devices in target mode or class found
Look for default devices ...
  found USB ID 1d6b:0002
  found USB ID 1d6b:0002
  found USB ID 1d6b:0001
  found USB ID 1d6b:0001
  found USB ID 1d6b:0001
  found USB ID 1d6b:0001
  found USB ID 1d6b:0001
  found USB ID 0403:6015
  found USB ID 0dfc:0001
  found USB ID 19d2:1588
   vendor ID matched
   product ID matched
 Found devices in default mode (1)
Access device 003 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: ZTE,Incorporated
     Product: ZTE Mobile Broadband Station
  Serial No.: 1234567890ABCDEF
-------------------------
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
Trying to send message 2 to endpoint 0x01 ...
 OK, message successfully sent
Reset response endpoint 0x81
Reset message endpoint 0x01
-> Run lsusb to note any changes. Bye!

  说明已经切换成功了,再cat /proc/bus/usb/devices查看设备信息如下:

T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  6 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=02(comm.) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=19d2 ProdID=1589 Rev= 0.00
S:  Manufacturer=ZTE,Incorporated
S:  Product=ZTE Mobile Broadband Station
S:  SerialNumber=1234567890ABCDEF
C:* #Ifs= 7 Cfg#= 1 Atr=a0 MxPwr=500mA
A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=06 Prot=00
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=cdc_ether
E:  Ad=88(I) Atr=03(Int.) MxPS=  64 Ivl=125us
I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E:  Ad=87(I) Atr=03(Int.) MxPS=  64 Ivl=500us
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 6 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

  ProdID已经切换成1589,自动加载了个cdc_ether驱动,还有4个设备未驱动和一个usb存储.cdc_ether驱动生成了一个usb0的网口设备.至此,说明WCDMA猫已经切换模式成功.

  2,设备映射

  模式切换成功后,由于自动加载了网卡驱动生成了usb0的网口设备,让我又踩了一个坑,以为这是一个纯网卡的模块,论坛上搜索了一番,也没有这个型号猫的明确说明,相近的型号也描述的不清不楚的,试过dhclinet usb0,无效.还有说要访问个gateway授权再分配IP的(纯属扯谈).后来才发现这个usb0的网卡设备完全没用,这个猫是一个传统的usb转串口的猫.

在系统启动的时候rc.local里加上下面的命令:modeprobe usbserial.ko vendor=0x19d2 product=0x1589,再重新执行第一步,OK,串口出来了.

ls /dev/ttyUSB* -l,有时候会生成0-3共4个USB口,有时候会生成0-4共5个USB控制口,不解为什么.

  3,AT拨号

   ttyUSB设备生成后就可以对设备进行AT指令拨号了,由于生成了4-5个USB节点,只好一个个试验哪个节点是猫口,经测试发现,USB0 USB1接收AT指令能返回OK,USB2 USB3直接返回TIMEOUT,说明2,3不是,猫口在0,1之间.继续测试锁定猫口为第一个设备/dev/ttyUSB0.

  接下来就是写脚本了.SCRIPT:

ABORT BUSY
ABORT 'NO CARRIER'
ABORT 'NO DIALTONE'
 '' AT+CGDCONT=1,"IP","3GNET" OK
ATDT*99# CONNECT

pppd 115200 connect "/usr/sbin/chat -f dial.script -v" /dev/ttyUSB0 modem defaultroute

  通过上面的命令和脚本,发送AT+CGDCONT=1,"IP","3GNET"可以得到OK,再发送ATDT*99#却返回ERROR-.-;于是又在论坛摸索了半天,发现有个人遇到了相同的情况,提示在最前面加一条AT+CFUN=1,0(注册网络)果然就不返回ERROR返回CONNECT了.本以为大功告成,谁知道pppd在下一步的时候又提示检测不到本地IP,而且看log,CONNECT之后确实没有返回本地和远程的IP信息.

  在这一步又卡壳了几天,最后想着换一批pppd参数,折腾了几下终于拨上去了-.-;最终的脚本和命令如下:

ABORT BUSY
ABORT 'NO CARRIER'
ABORT 'NO DIALTONE'
 '' AT+CFUN=1,0 OK
AT+CGDCONT=1,"IP","3GNET" OK
ATDT*99# CONNECT

pppd 115200 connect "/usr/sbin/chat -f dial.script -v" /dev/ttyUSB0 ipcp-accept-local ipcp-accept-remote defaultroute usepeerdns

PS:这款猫还有个BUG,每次拨号,必须要拨两次才能成功,第一次拨号ATDT最后还是会返回ERROR,第二次拨号就可以正确的拨上去了-.-,ZTE的东西就是不太靠谱,最后没办法只有在上层应用加个判断,拨号拨两次再检查状态...