摘要

本文主要介绍了嵌入式Linux系统下使用pppd 2.4.4来进行PPP拨号需要使用的脚本是如何配置的,配置项的含义,同时也说明了如何来配置参数,实现ppp拨号上网。

一.问题提出

嵌入式Linux操作系统下,如果要进行PPP连接,就需要配置拨号要使用的连接脚本。这些脚本参数就决定了PPPD的行为,会对PPP连接产生很大的影响。所以需要对这些脚本的参数以及具体含义有所了解。

二.解决思路和PPP连接关系密切的有两个脚本是chat和options两个脚本。其中,chat脚本是用来进行AT呼叫和控制的脚本,而options脚本就影响PPP连接的。

1.  CHAT脚本

一个简单的chat脚本有下面的结构:

""              AT

OK             ATDT  dialnumber

CONNECT      ""

一个chat脚本都是由字符串对来组成的。前面的字符串都是期望获取的串,紧跟的是发送的字符串。这个脚本每一项的具体含义是这样的:

1)    MODEM期望空字符串。这句话的意思直接理解就是MODEM不管收到什么字符串,先发出字符串AT;

2)    期望收到“OK”字符串,然后发送字符串“ATDT dialnumber”

3)    如果收到“CONNECT”,就不再发送,认为数据链路已建立连接。

这样的chat脚本是最简单的,如果需要进行超时控制,就可以加入如下字段:

TIMEOUT 10

如果要增加对特殊情况的处理,就加入下面字段:

ABORT           BUSY

ABORT           NO ANSWER

ABORT           RINGING

这三行语句的意思是:如果收到字符串“BUSY”、“NO ANSWER”、“RINGING”就退出执行。

所以在考虑到各种特殊情况下,配置一个PPP连接的CHAT脚本就可以像下面这样:

TIMEOUT         30

ABORT           BUSY

ABORT           NO ANSWER

ABORT           RINGING

""                 AT

OK                ATDT dialnumber

CONNECT         ""

2.OPTIONS脚本OPTIONS脚本的内容,为PPP连接指定了连接使用的设备、使用的控制字符传输速率、指定了硬件加速、溢出控制等。

例如下面的options脚本:

ttyS0 ---- 指定连接使用的设备,例如:ttyS0、ttyS1等57600 ---- 设置连接使用的控制字符传输速率,可以设置为57600、115200等

debug ---- 如果需要加入调试信息,就加入参数debug

logfile /var/ ppplog ---- 将连接过程中的信息输入到某个文件中mtu 1500

-detach

noipdefault ---- 不使用默认IP就可以加入参数noipdefault

defaultroute

usepeerdns ---- 使用服务器端协商的DNS就可以设置参数usepeerdns

lcp-echo-failure 4 ---- 当连续4次没有收到发出的LCP回声请求时,就认为服务器端已不再响应,就退出执行。这里的失败次数可以灵活来决定。

-ccp ---- 不使用压缩控制协议-vj ---- 关掉式IP头压缩-chap ---- 不使用chap鉴权

-mschap-v2 ---- 不使用mschap鉴权

user

hide-password

connect "/usr/bin/chat -v -t6 -f /var/ chat" ---- 制定了要使用的chat脚本的位置。加上参数-v 告诉 chat命令将其所有的输出/入拷贝到系统记录里(通常是 /var/log/messages)。-t 6 指定了执行chat该命令的时间为6s。chat脚本的位置可以位于/etc/目录下,也可以位于/var下,这个可以更加需要灵活设置。

persist --- 永久链接(自动重拨)

crtscts --- 告诉ppp使用modem的硬件流量控制

modem --- 使ppp使用DCD信号来判断连接是否正常,有无掉线现象

deflate --- 使pppd使用defalte压缩方式

idle --- 设置了一个时间限制,当在300秒的时间内没有数据传送,就断开连接

lock --- 则创建一个锁定文件,其他程序在发现存在这个文件后,就能得知相应的串口已经被使用。

demond --- 参数告诉pppd停留在后台,监视网络数据,一旦有要求就立即进行连网,超时后就断开连接,但pppd仍然停留在后台等待下次数据传送

其他的参数具体含义可以参照参考PPPD2.4.4 中options.c中注释:

/*

* Option variables and default values.

*/

int debug = 0;  /* Debug flag */int kdebugflag = 0;  /* Tell kernel to print debug messages */

int default_device = 1; /* Using /dev/tty or equivalent */char devnam[MAXPATHLEN]; /* Device name */

bool nodetach = 0;  /* Don't detach from controlling tty */bool updetach = 0;  /* Detach once link is up */

int maxconnect = 0;  /* Maximum connect time */char user[MAXNAMELEN]; /* Username for PAP */

char passwd[MAXSECRETLEN]; /* Password for PAP */bool persist = 0;  /* Reopen link after it goes down */

char our_name[MAXNAMELEN]; /* Our name for authentication purposes */

bool demand = 0;  /* do dial-on-demand */

char *ipparam = NULL; /* Extra parameter for ip up/down scripts */int idle_time_limit = 0; /* Disconnect if idle for this many seconds */

int holdoff = 30;  /* # seconds to pause before reconnecting */bool holdoff_specified; /* true if a holdoff value has been given */

int log_to_fd = 1;  /* send log messages to this fd too */bool log_default = 1; /* log_to_fd is default (stdout) */

int maxfail = 10;  /* max # of unsuccessful connection attempts */char linkname[MAXPATHLEN]; /* logical name for link */

bool tune_kernel;  /* may alter kernel settings */int connect_delay = 1000; /* wait this many ms after connect script */

int req_unit = -1;  /* requested interface unit */bool multilink = 0;  /* Enable multilink operation */

char *bundle_name = NULL; /* bundle name for multilink */bool dump_options;  /* print out option values */

bool dryrun;   /* print out option values and exit */char *domain;  /* domain name set by domain option */

int child_wait = 5;  /* # seconds to wait for children at exit */

3. 鉴权脚本    一般情况下,PPP连接是需要进行身份认证的。签权方式有两种,一种是PAP鉴权,另一种是CHAP鉴权。鉴权需要的用户名和密码是存放在PAP-secrets和chap-secrets脚本中,以如下方式存放:

Username * password

需要进行鉴权时,通过在options脚本中指定鉴权方式为PAP或CHAP,PPP模块就会从PAP-secrets和chap-secrets脚本中读出用户名和密码,附加到PPP的鉴权包中,发送到服务器端进行身份认证。

4. PPP拨号过程与脚本之间的关系  脚本设置成功以后,怎么和pppd2.4.4一起工作呢?这个需要从pppd程序的主函数入手。

这个过程是这样的:

Pppd程序启动以后,就会按照pathname.h中所指定的文家位置去寻找options脚本文件。这个可以按照需要指定文件的位置,确保pppd能够准确找到该文件。

Pppd找到options文件后,按顺序读入参数行。在这里,就可以获取系统要使用的是哪个设备来进行联网、设备的速率是多少。

Pppd 将配置的参数解析为程序当中的全局变量标识符,进行pppd连接控制。

三.实践情况下面是FT282 上的PPP连接使用的OPTIONS、 CHAT和PAP-SECRETS脚本。

OPTIONS:

connect "/usr/bin/chat -v -t6 -f /var/ppp/td-scdma_chat"

ttyUSB0

115200

debug

logfile /var/log/ppplog

mtu 1500

-detach

noauth

noipdefault

defaultroute

usepeerdns

crtscts

lock

lcp-echo-failure 4

-ccp

-vj

-chap

-mschap-v2

user

hide-password

CHAT:

"" AT

OK ATDT*98*1#

CONNECT ""

PAP-SECRETS:

wap *wap

经过在FT282上进行测试,发现能够顺利进行PPP连接。

linux pppd ip up 脚本,Linux下pppd拨号脚本配置(转载)相关推荐

  1. linux pppd源码下载_LINUX下的拨号利器:wvdial和pppd —— 转载

    wvdial是LINUX下的智能化拨号工具,利用wvdial和ppp可以实现linux下的轻松上网.在整个过程中wvdial的作用是拨号并等待提示,并根据提示输入相应的用户名和密码等认证信息:ppp的 ...

  2. linux添加ip白名单_centOS7 下利用iptables配置IP地址白名单的方法

    编辑iptables配置文件,将文件内容更改为如下,则具备了ip地址白名单功能 #vim /etc/sysconfig/iptables *filter :INPUT ACCEPT [0:0] :FO ...

  3. linux怎么创建python文件_Linux下创建python脚本并运行(入门)

    1.首先定位到一个文件夹,然后使用vim编辑器:vim test.py 就创建了python脚本文件,并且进入编辑状态 2.编辑好之后按Esc切换到命令模式,然后输入:wq 回车就自动保存完成了,然后 ...

  4. python写linux脚本_Linux下设置python脚本文件为服务

    (最简单的方式nohup python xxx.py) ------------------------------------------------------------------------ ...

  5. linux python cpu温度,linux-raspbian系统下编写python脚本显示树莓派的当前cpu温度、使用率、内存和硬盘信息...

    描述:之前查看树莓派的温度一直都需要输命令: cd /sys/class/thermal/thermal_zone0 然后cat temp 才能给出数据比如45084,给出的数据需要除以1000才是实 ...

  6. linux网卡IP同一网段,Linux下多网卡不同IP在同一网段的情况

    一.准备工作 1.Setting up Spacewalk repo rpm -Uvh http://spacewalk.redhat.com/yum/1.4/RHEL/5/x86_64/spacew ...

  7. linux mysql 备份脚本_linux下mysql备份脚本

    #!/bin/bash #功能说明:本功能用于备份 #编写日期:2018/07/05 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/lo ...

  8. 【VMware】虚拟机中给Linux设置ip——解决在linux中设置了ip地址,却还是连不上的问题

    大家好,我是好学的小师弟,最近在搭建虚拟机的时候,发现我虽然在linux中设置了ip地址却还是用MobaXterm连不上.后来查询相关文档,解决了该问题 进入虚拟机,点击编辑-虚拟网络编辑器 进入到N ...

  9. 宝塔面板Linux工具箱IP设置,宝塔Linux工具箱

    Linux工具箱 提供服务器的一些系统工具.主要有配置DNS.Swap交换分区.时区设置.系统密码.IP设置. DNS设置 修改当前服务器的DNS服务器,保存DNS前,请测试当前DNS是否能够正常使用 ...

  10. Linux笔记-ftp主动和被动模式下iptables的规则配置

    服务端准备 首先安装vsftpd: yum -y install vsftpd 启动服务: systemctl start vsftpd.service 配置文件目录在:/etc/vsftpd/vsf ...

最新文章

  1. 力压清华北大!深圳大学,世界第三!国际专利申请最新榜单出炉
  2. 17个改变世界的数学公式,马斯克点赞
  3. SAP财务模块中,科目余额表中的数据存在数据库的哪张表中?
  4. VTK修炼之道82:VTK管线机制_信息对象类VTKInformation
  5. AS3.0 对象键和内存管理
  6. ubuntu18.04纯命令行安装chrome
  7. [HttpPost] vs [AcceptVerbs(HttpVerbs.Post)]
  8. 文档服务器archive,文档查询服务器,archive server,音标,读音,翻译,英文例句,英语词典...
  9. 关键词组合工具_8大工具组合出击,解决扩量难题
  10. java之StringBuilder和关于数组怎么扩容
  11. 高通处理器规格表(全2022)--转载
  12. 好用免费的内网穿透工具
  13. Java PPT转PDF 亲测无水印
  14. 安卓学习笔记—渐变色背景
  15. INT_MAX INT_MIN及其运算
  16. c语言float代码,[求助]float
  17. sql string转为日期_SQL之变身Excel(二)
  18. greenplum使用总结之常用SQL及函数
  19. 国内计算机视觉CV方向的大牛/导师
  20. 计算机操作系统——学习笔记(下)

热门文章

  1. 力扣 460. LFU 缓存
  2. Java使用三层架构、JDBC连接数据库完成《试题信息管理系统》
  3. 中文乱码
  4. gif、bmp、jpg、jpeg图片有什么区别
  5. 解析函数论 Page 22 达朗贝尔判别法 VS 柯西判别法
  6. 难为知己,难为敌-职场之我见
  7. Python应用之批量打水印
  8. 小米手机录制数据集软件操作
  9. 【零基础教学】Unet局域网联机的实现——最基础的Unity联网实现方式(2)
  10. 使用 SAS 宏变量