linux - 具有3G/4G加密狗的Raspberry Pi的连接问题

标签 linux raspberry-pi 3g usb-modeswitch

我卑微地走到你跟前,在精神错乱的边缘摇摇欲坠。
情况如下:
我的公司提供的一项小服务是用树莓皮做的。
采用华为K4203的USB U模式开关,配置如下:
/etc/udev/rules.d/40-usb_modeswitch.rules标准

# Huawei k4203
ACTION=="add", ATTR{idVendor}=="12d1", ATTR{idProduct}=="1f1c", 
RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1f1c -W -M 
55534243123456780000000000000011062000000101000100000000000000"
ACTION=="add", SUBSYSTEM=="net", ATTRS{idVendor}=="12d1", 
ATTRS{idProduct}=="1590", NAME="4gmodem", RUN+="/root/modem-up.sh"
ACTION=="remove", KERNEL=="4gmodem", RUN+="/root/modem-down.sh"

/根/调制解调器关闭.sh
#!/bin/bash
# modem-down.sh
/usr/bin/systemctl restart openvpn@raspz1
/usr/bin/rfkill unblock wifi
/usr/bin/ip link set WIRELESS_INTERFACE up[/code]

/根/调制解调器启动.sh
#!/bin/bash
# modem-up.sh
/usr/bin/rfkill block wifi
#/usr/bin/netctl restart 4gmodem-PROFILE
# Optional
#/usr/bin/ping -c 1 -w 60 8.8.8.8 &&
/usr/bin/systemctl restart openvpn@raspz1

/ETC/USB模式开关D/12D1:1F1C
# Vodafone / Huawei K4203
DefaultVendor=0x12d1
DefaultProduct=0x1f1c
#DefaultProduct=0x14fb
TargetVendor=0x12d1
TargetProductList="157a,1590"
MessageContent="55534243123456780000000000000011062000000101000100000000000000"
HuaweiNewMode=1

问题是,有时加密狗会断开与Internet的连接—我无法通过ssh连接到它,它会断开与我的vpn的连接,客户会很恼火。
当我在办公室的时候,没什么大不了的——我只要拔出加密狗,再把它塞进去,它就可以工作了。
或者,我可以关闭墙上的电源,一旦再次加载,它将重新连接并工作。
不过,我目前正在海外旅行,并(试图)有一个假期(我的家人一直要求我离开电脑,因为我花了几个小时寻找解决方案)。
所以本质上,我需要一种方法,通过某种脚本远程让加密狗重新连接到web。
我尝试过的事情:
->一个定期ping网络的脚本,如果它没有访问google.com,则重新启动pi。
这不管用。由于我似乎无法理解的原因,软件重新启动似乎无法重新启动连接。我有一种感觉,这可能是因为它不像完全重新启动或拔出加密狗那样切断加密狗的电源。
->切断加密狗的电源
我尝试使用以下脚本切断加密狗的电源:
echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
sleep 5
echo 1 > /sys/devices/platform/soc/20980000.usb/buspower

这确实会切断电源,但只是暂时的(例如,在我发送“echo 1”之前,它不会一直关闭,而是会闪烁几次蓝色,然后恢复其当前状态)。
需要注意的是,当你第一次在物理上插入加密狗时,它会在变蓝之前闪烁几次绿色,但上面的脚本不会这样做。
->ifconfig 4gmodem的所有变体
好像什么都没做。
->/etc/init.d/networking重启
-好像什么都没做
一些我认为有用的东西:
我已经有了这几天的想法,但风险是如果我错了,PI将保持与互联网断开,我将没有任何方法修复它,直到我回家-这是不好哈哈
echo "rebooting internet"
  #remove lines from modeswitch so it won't enable modem mode when plugged in.
  sudo rm /etc/udev/rules.d/40-usb_modeswitch.rules
  #reboot dongle
  sudo echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
  sleep 5
  sudo echo 1 > /sys/devices/platform/soc/20980000.usb/buspower
  #modem will hopefully now be flashing green (in storage mode, not modem)
  #write to file
  sudo cat <<EOT >> /etc/udev/rules.d/40-usb_modeswitch.rules
  # Huawei k4203
  ACTION=="add", ATTR{idVendor}=="12d1", ATTR{idProduct}=="1f1c", RUN+="/usr/sbin/usb_modeswitch -v 
 12d1 -p 1f1c -W -M 55534243123456780000000000000011062000000101000100000000000000"
  ACTION=="add", SUBSYSTEM=="net", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1590", 
  NAME="4gmodem", RUN+="/root/modem-up.sh"
  ACTION=="remove", KERNEL=="4gmodem", RUN+="/root/modem-down.sh"
 EOT
 #reboot dongle again with mode_switch reconfigured
  sudo echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
  sleep 5
  sudo echo 1 > /sys/devices/platform/soc/20980000.usb/buspower
  # Device should now reboot into modem mode

上面代码的意思是,我在设置加密狗时注意到,当不是调制解调器模式时,它会闪烁绿色(例如,当您第一次将它插入设备时,在它切换为蓝色之前)
因此,上述代码实质上“破坏”了USB模式开关,重新启动加密狗,希望它进入存储模式,然后恢复进程。
我想这可能行得通,但正如我所说的,这么远的地方有点太冒险了。
有人对我如何脚本断开/重新连接3g加密狗有想法吗?
谢谢

最佳答案

我定期检查外部IP
尝试:
IP=(socket.gethostbyname(“info.io”))
除外:IP='未知'
打印IP
如果没有,则重新启动pi。我还提供了一个dhclient wlan0,但这可能只适用于使用直接ip连接代替wvdial的调制解调器。看看你是否可以找到一个在线脚本,改变调制解调器配置,以防止它在除调制解调器模式以外的任何其他模式下开机,这对我的Sierra 320U是一种享受。

关于linux - 具有3G/4G加密狗的Raspberry Pi的连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48316401/

相关文章:

python - 在使用 Raspberry Pi 寻找圆圈时,如何提高 FPS 并减少延迟?

linux - 使用 wpa_supplicant 在树莓派中连接 wifi

ios - 通过位置 iOS 从后台唤醒应用程序

Android:HttpPost 内容类型 header 和正文在 wifi 和 3g 之间不同

linux - 将读取行转换为 awk

linux - 最大驻留集大小没有意义

linux - $_GET 在服务器上被切断,但在本地有效

python - 如何使用 OpenCV 检测图像帧中的对象?

android - 在 3g Android 上 httpget 后响应不完整

linux - 正则表达式适用于 Regex101 但不适用于 bash