admin 管理员组文章数量: 887021
2024年1月17日发(作者:c语言比较三个数的大小)
Linux下ppp拨号
版本
版本
1.0
1.1
1.2
时间 内容
2011-07-18
添加WCDMA拨号
2011-07-28
添加CDMA2000拨号
2011-07-29
添加TD-SCDMA拨号
添加附录、常见问题以及常用AT命令
拨号流程
本节以WCDMA为例,详细描述了Linux环境下中国联通WCDMA的ppp拨号上网流程。对中国电信CDMA2000和中国移动TD-SCDMA也给出了参考。
Linux下用ppp上网需要两个程序:pppd和chat 。这两个程序有开源代码,可以下载后编译得到。我们的系统中已经有了,不再赘述。ubuntu也自带pppd和chat,可以使用man查看其具体使用方法。
典型的ppp拨号需要准备几个文件
1. pppd 脚本
2. chat脚本
3. chap-secets 文件
4. pap-secets 文件
WCDMA
本节使用的是huawei em770w 模块,使用中国联通WCDMA。
pppd 脚本
pppd 脚本默认放在/etc/ppp/peers/ 目录下,比如我们使用wcdma这个名字为这个脚本的文件名
使用命令
#pppd call wcdma
这样就启动了pppd程序
pppd程序的作用就是建立协议,生成网络接口ppp0(如果第一个).下面是一个pppd call脚本的例子:
#/etc/ppp/peers/wcdma
#This is pppd script, used Huawei EM770W(Union)
/dev/ttyUSB0
115200
crtscts
modem
debug
#nodetach
usepeerdns
defaultroute
user "3gnet"
0.0.0.0:0.0.0.0
connect '/usr/sbin/chat -s -v -f /etc/ppp/wcdma-connect-chat'
有关pppd更多的意义请直接使用linux帮助man pppd
下面是一些重要参数的解释
参数
/dev/ttyUSB0
115200
crtscts
modem
debug
nodetach
usepeerdns
defaultroute
user “3gnet”
connect ‘…’
意义
接口
接口波特率
接口带硬件流控
这个参数使得pppd进程将等待模块发回的CD (Carrier Detect)信号,与local真好相反
输出调试信息
不后台运行,默认是后台运行的
使用dns
本地和远端的ip都设为0使得接入的isp分配本地的ip地址
用户名
调用连接chat脚本
chat脚本
chat脚本是真正AT指令的发送和接收脚本,下面是一个chat脚本
#/etc/ppp/wcdma-connect-chat
TIMEOUT 5
ABORT "DELAYED"
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO DIALTONE"
ABORT "NO CARRIER"
#"AT
#'OK-+++c-OK' ATH0
TIMEOUT 5
'' AT
OK AT+CGDCONT=1,"IP","3gnet",,0,0
OK ATDT*99#
CONNECT ''
chat脚本主要有TIMEOUT 、ABORT 和 AT指令交互等等构成。更多帮助使用man chat。
TIMEOUT不解释了,ABORT指定了AT指令交互时,出了什么样的错误chat将退出。AT指令交互是”接收” “发送”的形式。
比如第一行,意思是不接收任何信息,直接发送AT
'' AT
第二行的意思是等待接收OK,如果OK,发送AT+CGDCONT=1…这个命令。
如果一切正常,会看到如下log。我们可以在log看到3g模块上AT指令的交互情况
~ # pppd call wcdma
timeout set to 5 seconds
abort on (DELAYED)
abort on (BUSY)
abort on (ERROR)
abort on (NO DIALTONE)
abort on (NO CARRIER)
timeout set to 5 seconds
send (^MAT^M)
expect (OK)
A^M^M
OK
-- got it
send (AT+CGDCONT=1,"IP","3gnet",,0,0^M)
expect (OK)
^M
AT+CGDCONT=1,"IP","3gnet",,0,0^M^M
OK
-- got it
send (ATDT*99#^M)
expect (CONNECT)
^M
ATDT*99#^M^M
CONNECT
-- got it
send (^M)
Serial connection established.
using channel 9
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB0
sent [LCP ConfReq id=0x1
rcvd [LCP ConfReq id=0x20
No auth is possible
sent [LCP ConfRej id=0x20
rcvd [LCP ConfAck id=0x1
rcvd [LCP ConfReq id=0x21
sent [LCP ConfAck id=0x21
sent [CCP ConfReq id=0x1
sent [IPCP ConfReq id=0x1 0.0.0.0>] rcvd [LCP DiscReq id=0x22 magic=0x172fd2b] rcvd [LCP ProtRej id=0x23 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f] Protocol-Reject for 'Compression Control Protocol' (0x80fd) received rcvd [IPCP ConfNak id=0x1 10.11.12.13> sent [IPCP ConfReq id=0x2 rcvd [IPCP ConfNak id=0x2 10.11.12.13> sent [IPCP ConfReq id=0x3 rcvd [IPCP ConfReq id=0x10] sent [IPCP ConfNak id=0x10 rcvd [IPCP ConfRej id=0x3 sent [IPCP ConfReq id=0x4 rcvd [IPCP ConfReq id=0x11] sent [IPCP ConfAck id=0x11] rcvd [IPCP ConfNak id=0x4 202.99.166.4>] sent [IPCP ConfReq id=0x5 202.99.166.4>] rcvd [IPCP ConfAck id=0x5 202.99.166.4>] Could not determine remote IP address: defaulting to 10.64.64.64 not replacing existing default route via 192.168.8.254 local IP address 172.20.255.208 remote IP address 10.64.64.64 primary DNS address 202.99.160.68 secondary DNS address 202.99.166.4 chap-secets 和pap-secets 文件 chap-secets 和pap-secets 文件是用于peer需要chap或者pap认证的服务器,我们好像用不到,有兴趣的可以验证一下。需要说明的是如果需要认证,chat脚本中,user 3gnet的3gnet就是用户名。下面是一个chap-secets例子 #/etc/ppp/chap-secrets #client server secret IP address "3gnet" * "3gnet" * 有关CHAP和PAP认证,可以参考 /docs/cd/E19253-01/819-7059/nce-fig-23/ CDMA2000/EV-DO 本节使用的是huawei em660 模块,使用中国电信CDMA2000/EV-DO。 pppd脚本 路径 /etc/ppp/peers/cdma2000 #/etc/ppp/peers/cdma2000 #This is pppd script, used Huawei EM660 /dev/ttyUSB0 115200 crtscts modem debug nodetach usepeerdns defaultroute user "ctnet@" password "" #user "card" #password "card" 0.0.0.0:0.0.0.0 connect '/usr/sbin/chat -s -v -f /etc/ppp/cdma2000-connect-chat' chat脚本 #/etc/ppp/cdma2000-connect-chat TIMEOUT 5 ABORT "DELAYED" ABORT "BUSY" ABORT "ERROR" ABORT "NO DIALTONE" ABORT "NO CARRIER" '' AT 'OK-+++c-OK' ATH0 TIMEOUT 40 '' AT OK ATDT#777 CONNECT '' 如果不出问题,有如下信息 ~ # pppd call cdma2000 timeout set to 5 seconds abort on (DELAYED) abort on (BUSY) abort on (ERROR) abort on (NO DIALTONE) abort on (NO CARRIER) send (AT^M) expect (OK) A^M^M OK -- got it send (ATH0^M) timeout set to 40 seconds send (AT^M) expect (OK) ^M ATH0^M^M OK -- got it send (ATDT#777^M) expect (CONNECT) ^M AT^M^M OK^M ATDT#777^M^M CONNECT -- got it send (^M) Serial connection established. using channel 1 Using interface ppp0 Connect: ppp0 <--> /dev/ttyUSB0 rcvd [LCP ConfReq id=0x1 0x5f285a5a> sent [LCP ConfReq id=0x1 sent [LCP ConfAck id=0x1 0x5f285a5a> rcvd [LCP ConfAck id=0x1 rcvd [CHAP Challenge id=0x2 <00eed0d70cabc4c6c2bc7>, name = ""] sent [CHAP Response id=0x2 "ctnet@"] rcvd [CHAP Success id=0x2 "000"] CHAP authentication succeeded: CHAP authentication succeeded sent [CCP ConfReq id=0x1 sent [IPCP ConfReq id=0x1 0.0.0.0>] rcvd [LCP ProtRej id=0x1 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f] Protocol-Reject for 'Compression Control Protocol' (0x80fd) received rcvd [IPCP ConfReq id=0x3 sent [IPCP ConfAck id=0x3 rcvd [IPCP ConfNak id=0x1 116.236.159.8> sent [IPCP ConfReq id=0x2 116.236.159.8> rcvd [IPCP ConfAck id=0x2 116.236.159.8> not replacing existing default route via 192.168.8.254 local IP address 114.81.240.179 remote IP address 115.168.41.17 primary DNS address 116.236.159.8 secondary DNS address 222.66.251.8 TD-SCDMA 本节使用的是zte mu301 模块,使用中国移动 TD-SCDMA。 mu301模块不是很稳定,比如AT+CGDCONT 和AT+CFUN命令都不返回OK,和移动TD-SCDMA提供的AT命令接口规范不符。 pppd脚本 #/etc/ppp/peers/cdma2000 #This is pppd script, used Huawei EM660 /dev/ttyUSB2 115200 crtscts modem debug nodetach usepeerdns defaultroute user "cmnet" connect '/usr/sbin/chat -s -v -f /etc/ppp/tdscdma-connect-chat' chat脚本 #/etc/ppp/tdscdma-connect-chat TIMEOUT 5 ABORT "DELAYED" ABORT "BUSY" ABORT "ERROR" ABORT "NO DIALTONE" ABORT "NO CARRIER" #'' AT #'OK-+++c-OK' ATH0 TIMEOUT 40 '' AT #OK ATE0V1 #OK ATS0=0 #OK AT+CFUN=1 OK AT+CGDCONT=1,"IP","cmnet" '' ATDT*98*1# CONNECT '' 运行的log ~ # pppd call tdscdma timeout set to 5 seconds abort on (DELAYED) abort on (BUSY) abort on (ERROR) abort on (NO DIALTONE) abort on (NO CARRIER) timeout set to 40 seconds send (AT^M) expect (OK) ^M OK -- got it send (AT+CGDCONT=1,"IP","cmnet"^M) send (ATDT*98*1#^M) expect (CONNECT) ^M ^M CONNECT -- got it send (^M) Serial connection established. using channel 1 Using interface ppp0 Connect: ppp0 <--> /dev/ttyUSB2 sent [LCP ConfReq id=0x1 rcvd [LCP ConfReq id=0x0 0x11223344> No auth is possible sent [LCP ConfRej id=0x0 rcvd [LCP ConfAck id=0x1 rcvd [LCP ConfReq id=0x1 sent [LCP ConfAck id=0x1 sent [CCP ConfReq id=0x1 sent [IPCP ConfReq id=0x1 0.0.0.0>] rcvd [LCP ProtRej id=0x2 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f] Protocol-Reject for 'Compression Control Protocol' (0x80fd) received sent [IPCP ConfReq id=0x1 0.0.0.0>] rcvd [IPCP ConfReq id=0x3 sent [IPCP ConfAck id=0x3 rcvd [LCP EchoReq id=0x4 magic=0x11223344] sent [LCP EchoRep id=0x4 magic=0x1b56a691] sent [IPCP ConfReq id=0x1 0.0.0.0>] rcvd [IPCP ConfRej id=0x1 sent [IPCP ConfReq id=0x2 rcvd [IPCP ConfNak id=0x2 211.136.150.66>] sent [IPCP ConfReq id=0x3 211.136.150.66>] rcvd [IPCP ConfAck id=0x3 211.136.150.66>] not replacing existing default route via 192.168.8.254 local IP address 10.61.167.221 remote IP address 192.168.0.1 primary DNS address 211.136.112.50 secondary DNS address 211.136.150.66 附件 常见问题 如何让ppp网络接口成为默认路由? 在pppd 启动前,删除默认路由。待pppd 成功连接后,会用ISP提供的网关替换默认路由。 #route del default #pppd call wcdma 如何挂断ppp? 两种方法: 1. 使用在pppd脚本中使用disconnect 制定挂断chat脚本。这种情况下,如果连接已经断开,不会调用chat脚本;否则调用chat脚本对模块做其他关闭操作,如ATH0。 2. pppd成功后会生成/var/run/,得到pid后直接kill ppp进程即可。这种方法最好是在连接的chat脚本的拨号命令(ATDT)前使用ATH0挂断。下面是用于挂断的脚本 #/etc/ppp/ppp-off #!/bin/sh ####################################### if [ "$1" = "" ];then DEVICE=ppp0 else DEVICE=$1 fi ####################################### if [ -r /var/run/$ ];then kill -INT `cat /var/run/$` if [ !"$?" = "0" ];then rm -f /var/run/$ echo "ERROR:Removed stale pid file" exit 1 fi fi echo "SUCCESS:PPP link is not active on $DEVICE" exit 1 AT指令说明 通用指令 AT指令 AT+CGMI AT+CGMM AT+CGMR AT+CGSN AT+CSCS AT+WPCS AT+CIMI AT+CCID AT+GCAP A AT+CPOF AT+CFUN AT+CPAS AT+CMEE AT+CKPD AT+CCLK AT+CALA AT+CRMP AT+CRSL 说明 厂家认证请求,返回模块厂家信息 模式认证请求,返回模块使用频段 修正认证请求,返回软件版本 查看产品IMEI序列号 选择TE特性设置 选择ME特性设置 IMSI认证请求,返回SIM卡的IMSI 获得SIM卡标识 查看功能列表 重复上次命令 停止模块的运行 设置模块状态 查看模块当前活动状态 选择模块错误报告方式 模拟小键盘控制操作 设置或查看当前日期和时间 设置警报日期和时间 演示铃声 设置振铃声音大小 电话控制指令 AT指令 ATD ATH ATA 说明 拨号 挂机 接电话 AT+CEER AT+VTD AT+VTS ATDL AT%Dn ATS0 AT+CICB AT+CSNS AT+VGR AT+VGT AT+CMUT AT+SPEAKER AT+ECHO AT+SIDET AT+VIP 查看呼叫失败原因 设置DTMF(双音多频)语音长度 发送DTMF语音 重拨上一次电话号码 根据DTR信号自动拨号 设置自动应答 来电信差 单一编号方案 调整接收声音增益 调整发送声音增益 设置话筒静音 话筒选择 设置回音取消 设置侧音修正 恢复到默认语音设置 网络服务指令 AT指令 AT+CSQ AT+COPS AT+CREG AT+WOPN AT+CPOL 说明 查看网络信号质量 选择服务商 查看当前网络注册状态 文字方式显示网络提供商 查看优先网络列表 安全指令 AT指令 AT+CPIN AT+CPIN2 AT+CPINC AT+CLCK AT+CPWD 说明 输入PIN码 输入PIN2码 查看密码剩余尝试次数 锁住或解锁设备某些功能 更改各种密码 电话薄指令 AT指令 说明 AT+CPBS AT+CPBR AT+CPBF AT+CPBW AT+CPBP AT+CPBN AT+CNUM AT+WAIP 选择不同存储器上的电话薄 读取电话薄 按文字查询电话号码 向电话薄写入电话号码 从电话薄中查询某一电话号码的信息 电话薄移动动作 查看用户本机号码 选择是否重启时初始化电话薄 短信息指令 AT指令 AT+CSMS AT+CNMA AT+CPMS AT+CMGF AT+CSAS AT+CRES AT+CSDH AT+CNMI AT+CMGR AT+CMGL AT+CMGS AT+CMGW AT+CMSS AT+CSMP AT+CMGD AT+CSCA AT+CSCB AT+WCBM AT+WMSC AT+WMGO AT+WUSS 说明 选择短信息服务 新消息确认应答 选择短信存储区 选择短信格式 存储短信参数设置 设备恢复成存储的短信参数设置 显示TEXT短信模式下参数 选择如何接收短信息 读取短信息 按要求列出存储的短信息 发送短信息 写短信息存入存储区 发送存储在存储区的短信息 TEXT短信模式参数设置 删除短信息 设置短信服务中心地址 选择小区广播信息类型 查看小区广播信息标识符 修改短信息状态 覆盖某一短信息 保持短信状态不变 辅助业务指令 AT指令 AT+CCFC AT+CLCK AT+CPWD 说明 设置呼叫转移 设置呼叫禁止 修改辅助业务密码 AT+CCWA AT+CLIR AT+CLIP AT+COLP AT+CAOC AT+CACM AT+CAMM AT+CPUC AT+CHLD AT+CLCC AT+CSSN AT+CUSD AT+CCUG 设置呼叫等待 设置主叫线识别限制 设置主叫线识别显示 设置被叫线识别显示 查看当前话费报告 累计话费显示或清零 设置最大可使用话费 设置话费价格 设置多方会谈呼叫操作 显示当前呼叫列表 设置辅助业务 设置一些非正式的数据辅助业务 设置屏蔽用户 数据指令 AT指令 AT+CBST AT+FCLASS AT+CR AT+CRC AT+ILRR AT+CRLP AT+DOPT AT%C AT+DS AT+DR ATN 说明 设置数据传输类型 选择模式 是否选择详细报告 是否选择详细振铃指示 选择是否报告本地DTE到DCE速率 设置无线链路协议参数 设置其他无线链路协议参数 选择是否进行数据压缩 选择是否支持V42二度数据压缩 选择是否报告链路V42二度数据压缩 选择错误纠正模式 传真指令 AT指令 AT+FTM AT+FRM AT+FTH AT+FRH AT+FTS AT+FRS 说明 设置传真发送速率 设置传真接收速率 设置使用HDLC协议发送传真速率 设置使用HDLC协议接收传真速率 停止发送传真并等待相应时间 停止侦听网络并等待相应时间向DTE发送报告 传真指令(CLASS 2) AT指令 AT+FDT AT+FDR AT+FET AT+FPTS AT+FK AT+FBOR AT+FBUF AT+FCQ AT+FCR AT+FDIS AT+FDCC AT+FLID AT+FPHCTO 说明 开始传输数据 开始接收数据 设置后面是否还有任务进行 设置前面发送数据质量 停止任务 设置传输比特顺序 显示交换缓存大小 控制接收传真备份质量检查 控制能否再接收传真 设置当前任务参数 设置任意任务参数 定义本地ID 设置确定无任务的等待时间 V24-V25指令 AT指令 AT+IPR AT+ICF AT+IFC AT&C AT&D AT&S ATO ATQ ATV ATZ AT&W AT&T ATE AT&F AT&V ATI 说明 设置DCE速率 设置串口起始帧结构 设置DTE和DCE数据 设置DCD信号 设置DTR信号 设置DSR信号 从在线命令模式返回 选择DCE是否返回结 设置DCE响应格式 恢复默认设置 保存设备设置 自动测试 选择是否回回显字符 恢复出厂设置 显示DCE参数设置 显示特殊信息 特殊AT指令 AT指令 AT+CCED AT+WIND AT+ALEA AT+CRYPT AT+EXPKEY AT+CPLMN AT+ADC AT+CMER AT+WLPR AT+WLPW AT+WIOR AT+WIOW AT+WAC AT+WTONE AT+WDTMF AT+WDWL AT+WVR AT+WDR AT+WHWV AT+WDOP AT+WSVG AT+WSTR AT+WSCAN AT+WRIM AT+W32K AT+WCDM AT+WSSW AT+WCCS AT+WLCK AT+CPHS 说明 获得小区环境参数(可扩展查看接收信号能量参数) 显示模块状态信息 数据加密算法 选择是否进行数据加密 加密算法设置密码 查看PLMN状态信息 设置模数转换模式 选择是否进行键盘报告 查看偏好语言 设置偏好语言 查看通用I/O端口状态 设置通用I/O端口状态 停止当前执行命令 演示话筒响或蜂鸣声 演示DTMF声响 将模块切换到下载模式 设置传送语音速率(适用于向外呼叫) 设置传送数据速率(适用于向外呼叫) 显示硬件版本 显示生产日期 选择默认麦克控制者(默认为1) 查看初始化状态或网络状态 查看具体频率接收信号能量 查看和设置振铃模式 选择在不工作状态是否使用32KHz内部时钟 选择一种默认出厂铃声 显示软件版本 显示或编辑发送和接收字符 设置设备锁定 设置DPHS功能 SIM卡工具箱命令 AT指令 AT+STSF AT+STIN AT+STGI 说明 设置SIM卡工具箱功能 SIM卡工具箱指示 显示SIM卡工具箱命令信息 AT+STCR AT+STGR 回显命令:工具箱控制反应 选择或回应命令 三大运营商拨号设置 运营商(ISP) 中国联通 WCDMA (China Unicom) 中国电信 CDMA2000/EVDO (China Telecom) 1X网络 中国移动 TD-SCDMA (China Mobile) 中国移动 GPRS/EGDE (China Mobile) 空 #777 ctnet@ APN 3GNET 拨号号码 *99# 帐号 空 密码 空 #777 空 CMNET *98*1# card (CARD) 空 card(CARD) 空 CMNET *99***1# 空 空
版权声明:本文标题:Linux下ppp拨号 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705474512h486262.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论