zoukankan      html  css  js  c++  java
  • LINUX下的拨号利器:wvdial和pppd —— 转载

      wvdial是LINUX下的智能化拨号工具,利用wvdial和ppp可以实现linux下的轻松上网。在整个过程中wvdial的作用是拨号并等待提示,并根据提示输入相应的用户名和密码等认证信息;ppp的作用是与拨入方协商传输数据的方法并维持该连接。

    一、wvdial及其相关配置
      wvdial的功能很强大,会试探着去猜测如何拨号及登录到服务器,同时它还会对常见的错误智能的进行处理,不象chat一样,要求你去写登录脚本。wvdial只有一个配置文件:/etc/wvdial.conf。

      wvdial的启动过程是这样的:首先需要载入wvdial.conf配置文件,然后再初始化modem并拨

    号,拨号后等待拨入方的响应,收到拨入方响应后则启动pppd。可以用wvdialconf程序自动生成

    wvdial.conf配置文件,运行该程序的格式为:

    wvdialconf /etc/wvdial.conf

      在执行该程序的过程中,程序会自动检测你的modem的相关配置,包括可用的设备文件名,

    modem的波特率,初始化字符等相关的拨号信息,并根据这些信息自动生成wvdial.conf配置文件。

    如果/etc/wvdial.conf文件已经存在时,再次执行该命令只会改变其中的 Modem、Band、Init等选

    项。一个典型的自动生成的配置文件可能是这样的


    [Dialer Defaults]
    Modem = /dev/ttyACM0
    Baud = 115200
    Init1 = ATZ
    Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 S11=55 +FCLASS=0
    ;Phone =
    ;Username =
    ;Password =

     

    wvdial的执行格式为:wvdial -help | -version | section
    相关的说明如下:
    -help:显示简单的帮助信息
    -version:显示wvdial的版本号
    section:这里的section有点象windows里的ini文件,一个wvdial.conf配置文件可以有好多个section,每一个section由一些变量组成,即由变量=值的语句组成,如上所示。使用wvdialconf自动生成配置文件时将会自动生成一些常用的变量说明如下:
    Inherits=InheritedSection:
      使用wvdialconf自动生成配置文件时将会自动生成[Dialer Defaults],除此之外,你还可以自定义你自己的section。程序运行时,首先载入[Dialer Defaults],然后再用指定的section的相应选项覆盖[Dialer Defaults]的相应选项。比如,我们在 wvdial.conf中还有[Dialer Tom],假如我们运行wvdail Tom,则系统将先读入[Dialer Defaults],然后再用[Dialer Tom]覆盖[Dialer Defaults]的相应选项。如果除了以上的section之外还有[Dialer 169]并且内容如下:

    [Dialer Tom]
    Username=tom
    Password=xxx
    Inherits=169
    [Dialer 169]
    Phone=169

      如果这时候我们执行“wvdial Tom”则系统将先读入[Dialer Defaults],然后再用[Dialer Tom]覆盖[Dialer Defaults]的相应选项,最后再用[Dialer 169]的相应选项来覆盖前二者的相应选项。由此可见,利用wvdial,我们可以很方便地在不同的ISP或modem之间来回移动(假如你有几个ISP或medom的话)。
    Modem=/dev/ttySx:用于指定是用的modem,缺省的为/dev/modem。当然,在这里我们的medom是由wvdialconf自动检测并配置的,所以我们可以忽略该变量。
    Band=115200:wvdial与modem通信的波特率,同上可以忽略。
    Area Code=xxxx : 设置区号
    Dial Prefix=x: 假如你正在使用分机,拨外线需拨9时,可设该值为9。
    Username=xxxx:登录时的用户名
    Password=xxxxxx:登录密码
    Phone=xxxxx: 所拨的号码
    PPPP Path=:设置pppd所在的路径,缺省为/usr/sbin/pppd
    Force Address=x.x.x.x :设置静态ip,一般的isp都会为你分配动态的ip地址。
    New PPPD= 1 or 0: pppd 2.3.0及其以上版本需要/etc/ppp/peers/wvdial文件,如果你的pppd是2.3.0以上版本请设为1.
    Auto Reconnect=on :断线时是否自动重新连接,缺省设为是。
    以上只是wvdial.conf中的常用选项,具体情参考wvdial手册。

    二、pppd及其相关配置
      pppd的配置选项相对要复杂得多,你可以用命令行的形式引用有关的选项,也可以把要引用的选项写到/etc/ppp/options中进行引用。下面的示例文件包含了最常用的选项及其相关的说明:
    # 如果没有给定本地ip, pppd 将使用主机的第一个ip地址;
    # 如果指定了"noipdefault" 选项, pppd将使用拨入方提供的ip地址

    # 选定该选项, pppd 将接受拨入方提供的ip地址:ipcp-accept-local
    # 选定该选项, pppd 将接受拨入方自己的ip地址:ipcp-accept-remote
    # 设置缺省网关:defaultroute
    # 在传输数据包之前,让拨入方先自我认证,注意一般的ISP(如169、163)都不包含该机 # 制,故应选中noauth
    # 使用硬件流控制:crtscts

    #将拨号信息作日志:debug
    以上只是options中的常用选项,具体情参考pppd手册。

    三、一个实例
        下面让我们来看一个具体的应用,在该应用中我们实现了拨号和断开连接的自动化。涉及到的配置文件有:
    /etc/wvdial.conf:wvdial的配置文件
    /etc/ppp/option:pppd的配置文件
    /etc/ppp/ppp-on:拨号自动化脚本
    /etc/ppp/ppp-off:断开连接自动化脚本
    步骤一:确保modem已经正确连接,linux已检测并自动配置了该modem
    步骤二:运行wvdialconf,生成 /etc/wvdial.conf 文件并修改如下:

    [Dialer Defaults]
    Modem = /dev/ttyACM0
    Baud = 115200
    Init1 = ATZ
    Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 S11=55 +FCLASS=0
    New PPPD= 1
    [Dialer Tom]
    Phone = 169
    Username = tom
    Password = *******


    步骤三:编辑并配置/etc/ppp/options,如下所示:
    noipdefault
    ipcp-accept-local
    ipcp-accept-remote
    defaultroute
    noauth
    crtscts
    debug

    步骤四:编写自动化脚本
    1.拨号脚本 /etc/ppp/ppp-on:
    #!/bin/sh
    # This script initiates the ppp connections by wvdial
    wvdial tom &

    2.断开连接自动化脚本/etc/ppp/ppp-off:
    #!/bin/sh
    #!stop wvdial
    killall wvdial
    # If the ppp0 pid file is present then the program is running. Stop it
    if [ -r /var/run/ppp0.pid ]; then
    kill -INT `cat /var/run/ppp0.pid`
    echo "PPP link to ppp0 terminated."
    else
    echo "ERROR: PPP link is not active on ppp0"
    exit 0
    fi
    exit 1

      编辑完后,执行 chmod u+x /etc/ppp/ppp* 改变文件权限。到此大功告成,以后只要运行 /etc/ppp/ppp-on 便自动拨号,执行 /etc/ppp/ppp-off 便自动断开连接。

  • 相关阅读:
    缓存更新的套路
    return 和 return false 的区别
    TensorFlow函数:tf.truncated_normal
    TensorFlow随机值:tf.random_normal函数
    TensorFlow函数:tf.lin_space
    TensorFlow函数:tf.ones_like
    TensorFlow函数:tf.ones
    TensorFlow函数:tf.zeros_like
    Tensorflow函数:tf.zeros
    数据分析常用的python工具和SQL语句
  • 原文地址:https://www.cnblogs.com/xiehy/p/3796783.html
Copyright © 2011-2022 走看看