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#是移动