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 , name =

"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#

空 空


本文标签: 设置 选择 查看 接收