4G模块——通过脚本进行PPP拨号

4G模块——通过脚本进行PPP拨号

配置文件

sudo vim ppp.sh
#!/bin/bash

# 检查是否安装了pppd软件
if command -v pppd &>/dev/null; then
        echo "pppd已经安装在系统中!"
    else
        echo "pppd未安装在系统中,正在安装..."
        sudo apt-get update
        sudo apt-get install ppp -y
        echo "pppd安装完成!"
fi

FILES=(
    "/etc/ppp/peers/rasppp"
    "/etc/ppp/peers/rasppp-chat-connect"
    "/etc/ppp/peers/rasppp-chat-disconnect"
)

# 切换到root用户
#if [ "$EUID" -ne 0 ]; then
#   exec sudo bash "$0" "$@"
#fi

for FILE in "${FILES[@]}"
do
    if [ -f "$FILE" ]; then
        echo "文件 $FILE 存在!"
    else
        echo "文件 $FILE 不存在!"
        FILENAME=$(basename "$FILE")
        SOURCE_FILE="./ppp/$FILENAME"
        if [ -f "$SOURCE_FILE" ]; then
            echo "从 $SOURCE_FILE 复制文件到 $FILE ..."
            cp "$SOURCE_FILE" "$FILE"
            echo "复制完成!"
        else
            echo "找不到源文件 $SOURCE_FILE"
        fi  

    fi  
done

#


# 运行 lsusb 命令并获取输出
lsusb_output=$(lsusb)

# 检查输出中是否包含 "Quectel"
if [[ $lsusb_output == *"Quectel"* ]]; then
    echo "找到 Quectel 设备!"

    # 使用正则表达式匹配并提取 Vendor ID 和 Product ID
    regex="ID ([0-9a-fA-F]{4}):([0-9a-fA-F]{4}) Quectel"
    if [[ $lsusb_output =~ $regex ]]; then
        vendor_id=${BASH_REMATCH[1]}
        product_id=${BASH_REMATCH[2]}
        echo "Vendor ID: $vendor_id"
        echo "Product ID: $product_id"
    else
        echo "无法提取 Vendor ID 和 Product ID"
    fi  
else
    echo "未找到 Quectel 设备"
fi

sudo modprobe option
echo "$vendor_id $product_id" | sudo tee /sys/bus/usb-serial/drivers/option1/new_id


# 执行 sudo pppd call rasppp
sudo pppd call rasppp &

sleep 8  # 等待 PPP 连接建立

# 检查是否存在 ppp0 网络接口
if ifconfig | grep -q ppp0; then
    echo "ppp0 网络接口已创建"

    # 尝试通过 ppp0 接口进行 ping 测试,并查看 TTL 返回值
    echo "正在 ping 4.2.2.2 ..."
    ping -I ppp0 -c 4 4.2.2.2 | grep "ttl="
    echo "PPP 拨号已完成。"
else
    echo "ppp0 网络接口未创建"
fi

sudo  vim rasppp-chat-connect
#连续15秒,收到以下字符,则退出执行
#进行超时控制,增加对特殊情况的处理,加入下面字段
TIMEOUT 15
ABORT   "BUSY"
ABORT   "ERROR"
ABORT   "NO ANSWER"
ABORT   "NO CARRTER"
ABORT   "NO DIALTONE"
#这部分用于超时控制和处理特殊情况,如果在15秒内出现了"BUSY"、“ERROR”、“NO ANSWER”、"NO CARRIER"或"NO DIALTONE"这些情况,则终止执行

# 40秒内没有收到指定字符,则退出
# 例如 OK \rATZ,发送ATZ,希望收到的是OK
""AT
OK \rATZ

# 使用IPV4,建立连接,联通为3gnet,移动为cmnet,文末给出各运营商配置
OK \rAT+CGDCONT=1,"IP","3gnet"

# 拨号,*99#是联通的拨号号码,*98*1#是移动
OK-AT-OK ATDT*99#
CONNECT \d\c
sudo  vim rasppp-chat-disconnect
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\NSending break to the modem\n"
""\k"
""+++ATH"
SAY "\nGood bye !\n"

拨号成功后,会返回两个DNS域名,如果拨号失败,要注意不同运营商的拨号方式是不一样的,比如电信需要填写用户名和密码,而移动和联通则不需要,拨号号码也不相同联通是 *99# ,电信是 #777,981#是移动

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值