Linux(23) Linux 4G模块不能获取IP排查思路

简介: Linux(23) Linux 4G模块不能获取IP排查思路

这是EC200 4G模块上网的手动确认步骤,适用于Linux环境。

步骤说明

步骤 1:确认上网状态

正常上网后,可以通过下列命令查看路由表和接口状态:

# 正常路由表和接口状态的打印信息
root@ido:/# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.13.113.186   0.0.0.0         UG    0      0        0 usb0
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 usb0
 
root@ido:/# ifconfig usb0
usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.13.113.69  netmask 255.0.0.0  broadcast 10.255.255.255
        inet6 fe80::dd52:91ad:24d4:ca45  prefixlen 64  scopeid 0x20<link>
        inet6 240e:47c:3c00:20c7:317d:f653:f76d:3f21  prefixlen 64  scopeid 0x0<global>
        inet6 240e:47c:3c00:20c7:6c8b:b416:99ac:a939  prefixlen 64  scopeid 0x0<global>
        ether ae:0c:29:a3:9b:6d  txqueuelen 1000  (Ethernet)
        RX packets 144  bytes 13303 (13.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 134  bytes 14041 (14.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在这个阶段,我们可以看到路由表和 usb0 接口的IP信息。如果路由表为空或者 usb0 接口没有获取到IP,说明目前无法正常上网。

步骤 2:检查模块状态

/dev/ttyUSB2 设备上执行 AT 命令来检查模块的状态。

cat /dev/ttyUSB2 &
# AT+CPIN?`: 这个命令用于查询SIM卡的状态,例如是否已插入SIM卡,SIM卡是否已解锁等
echo -e "AT+CPIN?\r\n" >/dev/ttyUSB2 
# AT+CSQ`: 这个命令用于查询信号质量,返回的是信号强度和信号质量等级。
echo -e "AT+CSQ\r\n" >/dev/ttyUSB2

这些AT命令会返回模块是否已插入SIM卡、模块是否已启动以及当前的信号质量 我记得好像是0~33吧 , 如果是99,99肯定是不正常的。

步骤 3:查询PDP上下文

使用 at+CGDCONT? 命令查询PDP上下文(Packet Data Protocol Context)的状态。

# at+CGDCONT?`: 此命令用于查询PDP上下文的状态,返回的参数包括PDP类型、APN设置等
root@ido:/# echo -e "at+CGDCONT?\r\n" > /dev/ttyUSB2
root@ido:/#
# 这两条是`at+CGDCONT?`命令的返回值,展示的是PDP上下文的状态。它们显示了每个PDP上下文的参数,如CID,PDP类型,APN等。在这里,"ctlte"和"IMS"分别是两个不同的PDP上下文的APN设置。
+CGDCONT: 1,"IPV4V6","ctlte","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0,0,0
+CGDCONT: 8,"IPV4V6","IMS","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0,1,1

这个步骤返回的信息会显示已配置的PDP上下文的状态,例如是否已经设置,以及网络类型等。

步骤 4:查询网络设备控制状态

# at+QNETDEVCTL?`: 如之前所述,这个命令用于查询网络设备的状态,返回的状态参数包括设备是否启用,以及数据、语音、SMS服务是否可用。
  root@ido:/# echo -e "at+QNETDEVCTL?\r\n" > /dev/ttyUSB2
+QNETDEVCTL: 1,1,1,1
 
# 如果是下面这种情况--压根拿不到IP , dhcp也没用. (后面解决了 再写)
root@ido:/etc/NetworkManager/conf.d#
+QNETDEVCTL: 0,0,0,0
 
OK

QNETDEVCTL 命令返回的信息表示网络设备的状态,例如设备是否启用,数据业务是否可用等。

+QNETDEVCTL: 1,1,1,1 这是at+QNETDEVCTL?命令的返回值,显示的是网络设备的四个状态参数。在这种情况下,所有的参数都是1,代表每个状态都是开启的,具体包括:

  • 第一个1代表网络设备的启用状态(1为启用,0为禁用);
  • 第二个1代表数据业务的可用状态(1为可用,0为不可用);
  • 第三个1代表语音业务的可用状态(1为可用,0为不可用);
  • 第四个1代表SMS服务的可用状态(1为可用,0为不可用)。

步骤 5:请求网络地址

执行 udhcpc 命令向网络请求地址:

root@ido:/# udhcpc -i usb0
udhcpc: started, v1.30.1
udhcpc: sending discover
udhcpc: sending select for 10.13.113.69
udhcpc: lease of 10.13.113.69 obtained, lease time 86400
# 正常情况下6次左右 , 如果超过10次基本拨不通

这个步骤会向DHCP服务器请求一个IP地址,并配置到 usb0 接口上。

其他 :检查和控制网络

使用下面的命令来检查和控制网络状态。

# AT+QENG="servingcell"`: 此命令用于查询当前服务的小区信息,包括小区ID,信号质量等信息
echo -e "AT+QENG=\"servingcell\"\r\n" > /dev/ttyUSB2
# AT+CFUN=0?` 和 `AT+CFUN=1?`: 这两个命令是用来查询和设置无线模块功能状态的。CFUN=0表示关闭无线模块功能,CFUN=1表示开启无线模块功能。`AT+CFUN=0?` 和 `AT+CFUN=1?`这两条命令是用来查询模块是否处于关闭或开启状态。
echo -e "AT+CFUN=0?\r\n" > /dev/ttyUSB2 
echo -e "AT+CFUN=1?\r\n" > /dev/ttyUSB2

这些AT命令可以用来查看服务小区信息,以及关闭和打开无线模块功能。


通过以上步骤,可以手动验证和排查EC200 4G模块的上网问题。



20230904补充
花了几个小时调的自动化脚本,各种乱七八糟的问题

#!/usr/bin/expect
 
# 1. 检查ttyUSB0、ttyUSB1、ttyUSB2这3个路径是否存在
set timeout 30
foreach port {ttyUSB2 ttyUSB1 ttyUSB0} {
    if {[file exists "/dev/$port"]} {
        set active_port $port
        break
    }
}
 
if {![info exists active_port]} {
    puts "没有找到ttyUSB0、ttyUSB1、ttyUSB2中的任何一个"
    exit 1
}
 
# 启动cat命令并获取其PID
exec cat /dev/ttyUSB2 &
# 等待一会儿确保cat进程已启动
sleep 1  
set cat_pid [exec pgrep -n cat]
puts "使用端口: $active_port,cat进程PID: $cat_pid"
 
# 2. 执行ifconfig usb0 up
exec ifconfig usb0 up
puts "已执行: ifconfig usb0 up"
 
# 3. 发送AT+CPIN?命令
exec echo -e "AT+CPIN?\r\n" > /dev/$active_port
sleep 1 
 
# 4. 发送AT+CSQ命令
exec echo -e "AT+CSQ\r\n" > /dev/$active_port
sleep 1
 
# 5. 发送at+QNETDEVCTL=1,1,1命令
exec echo -e "at+QNETDEVCTL?\r\n" > /dev/$active_port
sleep 1 
exec echo -e "at+QNETDEVCTL=1,1,1,\r\n" > /dev/$active_port
sleep 1
exec echo -e "at+QNETDEVCTL?\r\n" > /dev/$active_port
 
# 6. 拨号udhcpc -i usb0
spawn udhcpc -i usb0
expect {
    "obtained" {
        puts "已拨号: udhcpc -i usb0"
    }
    "udhcpc: read error: Network is down, reopening socket" {
        puts "检测到网络错误,正在尝试重新启动usb0接口..."
        exec ifconfig usb0 down
        sleep 1
        exec ifconfig usb0 up
        sleep 1
        puts "已重新启动usb0接口,正在重新拨号..."
        send "udhcpc -i usb0\r"
    }
    timeout {
        puts "udhcpc命令超时"
    }
}
 
# 7. 检查默认路由
set route_check [exec route -n]
if {![regexp "default" $route_check]} {
    puts "默认路由不存在,正在添加..."
    exec route add default gw 10.0.0.1
    puts "已添加默认路由"
} else {
    puts "默认路由已存在"
}
 
# 杀死cat进程
exec kill $cat_pid
puts "已杀死cat进程,PID: $cat_pid"
 
 


相关文章
|
6月前
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
335 24
|
7月前
|
安全 Linux
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
560 28
|
8月前
|
Ubuntu 安全 Linux
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
231 28
|
7月前
|
监控 数据可视化 Java
调试技巧 - 用Linux命令排查Java问题
总的来说,使用Linux命令来排查Java问题,需要一定的实践经验和理论知识。然而,只要我们愿意花时间深入了解这些工具,我们就能够熟练地使用它们来分析和解决问题。此外,这些工具只是帮助我们定位问题,真正解决问题需要我们对Java和JVM有深入的理解,并能够读懂和分析代码。
416 13
|
8月前
|
Ubuntu 安全 Linux
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
215 18
|
7月前
|
人工智能 Kubernetes Ubuntu
linux配置IP
linux配置IP
647 1
|
8月前
|
应用服务中间件 Linux 开发者
用的到linux-tomcat端口占用排查-Day5
通过本文的介绍,详细讲解了在CentOS 8系统上排查和解决Tomcat端口占用问题的方法。从使用 `netstat`、`lsof`和 `ss`命令检查端口占用情况,到使用 `ps`和 `top`命令查找和停止占用端口的进程,再到修改Tomcat端口配置,最后介绍了自动化脚本的方法。希望本文能帮助系统管理员和开发者有效地解决端口占用问题,确保Tomcat服务器的正常运行。
248 11
|
10月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
1966 23
|
10月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
428 11
|
Web App开发 资源调度 网络协议
Linux系统之部署IP工具箱MyIP
【10月更文挑战第5天】使用Docker部署Radicale日历和联系人应用Linux系统之部署IP工具箱MyIP
528 1
Linux系统之部署IP工具箱MyIP